我目前有一个稳定的主分支,以及在某些类上有很多重大变化的分支。
使用"更改"我发现了一个我想在主分支上修复的错误。
我通过更改主代码中的一行代码来修复它。
现在,我希望将此修补程序添加到"更改"分支。
Reading some answers,有人建议最好选择Rebase。
将git rebase master
应用于"更改"但是,git似乎考虑了其中之一
冲突文件是一个完全不同的文件。使用mergetools --tool diffuse
,我得到以下诊断:
正如您所看到的,第一个文件中有一个更改,第二个文件中有大量更改,而且显然没有任何重叠。
我的问题是:有没有办法将小变更合并到一个重大改变的分支中,而不必花费大量精力解决冲突?如果没有,那么处理这种情况的最佳方式是什么?
答案 0 :(得分:3)
你可以使用用户推荐的樱桃挑选方法,这是一个很好的方法,只是不是唯一的方法。另一个原因是,由于主分支上也存在错误,因此两者的最新合并基础也有。
git checkout $(git merge-base master changes)
# fix bug at the last branchpoint
git commit -m 'fix bug #27182'
git branch bugfix-27182
git checkout master
git merge bugfix-27182
git checkout changes
git merge bugfix-27182
# git branch -d bugfix-27182
无论哪种方式存在缺点,你都在平衡提交图杂乱与清晰的可追溯性(很容易说git branch --contains $somecommit
找出哪些分支包含修复,不是那么容易也不确定寻找等效的提交但是一个更清洁的历史。
答案 1 :(得分:2)
看看命令git cherry-pick。这里有更多细节:
http://git-scm.com/docs/git-cherry-pick
我们经常使用它,将错误修正复制到包含不同版本的其他分支。这是一个很棒的功能。