我一直在分支机构工作:
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而没有每个提交。
如果我正常合并,我会收到所有提交。
你会怎么做?
答案 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}}提交相关的主合并冲突。