我有几个Git分支:'experimental','something'和'master'。
我切换到'实验'分支。我注意到一个与“实验”无关的错误,属于“某事”中的变化。我该如何解决?
我想我应该切换到'某事',修复bug,提交然后再回到'实验'。我应该如何从'某些'中进行微小的改变并将其应用于'master'和'experimental',这样当我切换到这些分支时我不必再次修复bug?
答案 0 :(得分:53)
您可以使用以下两种解决方案:使用主题分支或使用挑选。
在主题分支解决方案中,您切换到分支'某事',创建分支以修复错误,例如'something-bugfix',将此分支合并为'something'(修复bug),然后将此分支合并为'experimental'。
$ git checkout -b something-fix something
[edit, commit]
$ git checkout something
$ git merge something-fix
$ git checkout experimental
$ git merge something-fix
[fix conflicts if necessary and commit]
另请参阅Resolving conflicts/dependencies between topic branches early和Never merging back,以及Junio C Hamano撰写的Committing to a different branch博客文章(git maintainer)。
cherry-picking 解决方案非常有用,如果您注意到以后您创建的错误修复(例如在开发分支上)也会在其他分支上有用(例如,稳定分支) )。在你的情况下,你可以修改'某事'分支:
$ git checkout something
[edit, edit, edit]
$ git commit
$ git checkout experimental
然后你注意到你在“某事”分支中的修复也应该在'experimenta'分支上。让我们说这个错误修正是提交'A'(例如,如果你没有在'某事'之上提交任何内容,那么'某事',但它可能是'某事〜2'或'c84fb911'):
$ git checkout experimental
$ git cherry-pick A
(如果你想在编辑樱桃挑选的bug修改之前编辑提交消息,你可以使用--edit
git cherry-pick选项。
答案 1 :(得分:5)
stash
或commit
您在experimental
分支机构上所做的更改checkout something
bisect
查找错误commit
更改checkout experimental
然后:
rebase something
如果你想要一个干净的提交图(如果你公开这个存储库而你关心它)或:
merge something
如果您不关心'演示':)答案 2 :(得分:2)
由于实验性分支具有某些内容的功能,您应该执行以下操作之一:
答案 3 :(得分:0)
如果你没有太多进入'master',只需切换回实验并做'git merge master'。如果你这样做,我认为'git cherry-pick'命令是你的朋友。
答案 4 :(得分:0)
你的分支在某种程度上与此相关:
master>的东西>实验
这是,如果你真的打算将某些东西合并到master中。
如果可能的话,我会把它固定在主人之上,然后在主人之上重新安排其他人。但我只是喜欢变基。或者你可以在那里解决它,然后完全合并
master>的东西>实验
但如果某个东西是一个简单的主题分支,我就不会这样做。这听起来像是你的“候选人下一位大师”
答案 5 :(得分:0)
如果可以合并,那么就这样做。如果您不想将某些内容合并到其他分支中,那么请修复提交到其他每个分支的bug和cherry-pick。