搜索

首页  >  问答  >  正文

git 远程提交合并

例如远程master分支上有100次提交记录

现在想把1-10次提交合并成一次提交,【就好像我只提交过一次一样】其他11-100次提交保持不变。如何实现?

看了git rebase -i ,好像只能合并本地分支,合并以后怎么影响远程分支呢?

曾经蜡笔没有小新曾经蜡笔没有小新2761 天前634

全部回复(2)我来回复

  • 阿神

    阿神2017-05-02 09:49:56

    git rebase -i HEAD~99
    然后把最远的10次提交前面的pick改为squash。
    然后强制提交 git push -f
    试试看,不知道行不行

    回复
    0
  • 巴扎黑

    巴扎黑2017-05-02 09:49:56

    楼上说的方式没错,但是应该是 git rebase -i HEAD~100 吧。HEAD~99 只能读取到 2~100 次提交,读不到第一次的。

    另外,找到最远的 10 次提交之后,其实不一定要改成 squash(或者s),如果你不打算保留提交信息,用 fixup(或者f)就行了。。

    修改之后肯定是要 git push -f 的,因为你的 timeline 和后续的 commit hash 都变了,当然你的代码不会变


    鉴于从最后一条翻到第一条可能会比较久。。再提供一种思路(以下用 <xxx> 表示变量,不需要打出来<和>。但其它符号都是要打的):

    1. 在当前 branch 基础上新建一个 branch: git checkout -b newBranch

    2. 在新 branch 上回滚到提交第一次之前: git reset --hard <commit1Hash>

    3. Cherry pick 前十条 commit,放到缓冲区: git cherry-pick -n <commit1Hash>..<commit10Hash>

    4. 提交这十个commit。git commit -m "<xxxx>"

    5. Cherry pick 剩余 commit,不放到缓冲区(直接添加到 timeline): git cherry-pick -n <commit11Hash>..<commit100Hash>

    这样你就在一个新的 branch 上搞好了你想要的。合并到你要修改的 branch 就行

    回复
    0
  • 取消回复