git rebase -i:我只想要最后一次提交

时间:2014-03-18 17:20:19

标签: git

我一直在分支机构工作:

       C1--D1--E1 branch
      /
 A--B--C--D--E--F master

在一个小测试回购中使用“git rebase -i master”的分支上,我可以到达这里:

 A--B--C--D--E--F--E1 master

问题是,当存在合并冲突时,git希望我从分支逐个解析每个提交。我一直在做很多试验和错误,因此,我有很多提交 - 我只想将工作树合并到master而没有每个提交。

如果我正常合并,我会收到所有提交。

你会怎么做?

2 个答案:

答案 0 :(得分:0)

要获得一次提交,您就是这样做的:

目前,您的分支机构有3个不同的提交。所以,将它移到另一个分支: 假设您的分支被称为testBranch

git branch newBranch
git reset --hard HEAD~3 (Or as many commits as you have)
git cherry-pick newBranch

请参阅此答案以获取更多信息:Git - only push up the most recent commit to github

如果你现在对'testBranch'进行git登录,你会发现你只有最后一次提交(E1)。您可以使用您想要的任何命令将其与master合并。我希望这会有所帮助。

答案 1 :(得分:0)

您面临的主要问题是,一方面您希望通过将所有内容合并为一个提交来消除历史记录,另一方面,您希望在重新合并该分支时避免后续冲突。在一般情况下,这是不可能的。因此,当您达到以下状态时:

           C1--D1--E1 branch
          /
A--B--C--D--E--F--E1’ master

整个E1’分支的血统不一致,并且随后会发生合并冲突。在我看来,通过以下方式达到上述确切状态更为简单:

master $ git merge –squash branch
master $ git commit -m "E1’"

那么你可以做什么?如果你愿意废除 branch 的历史,你可以将所有内容重新绑定到分支上的单个提交中< / em>分支本身,

branch $ git rebase –i

创建这个:

           E1’ branch
          /
A--B--C--D--E--F  master

然后将结果合并到 master

master $ git merge branch

           E1’--o    branch
          /      \
A--B--C--D--E--F--M  master

现在,如果继续在分支上进行开发 - 则不应再有与<{1}}提交相关的合并冲突。