Git和在多个分支上工作

我有几个Git分支:“实验”,“某事”和“主人”。

我切换到“实验”分支。 我注意到一个与“实验”无关的错误,属于“某事”所做的变化。 我应该如何解决它?

我想我应该切换到“某些东西”,修正错误,提交然后回到“实验”。 我应该如何从“某些东西”中稍微改变一下,并将其应用于“主”和“实验”,以便在我切换到这些分支时不必重新修复错误?

有两种解决scheme尚未提及,您可以使用:使用主题分支或使用樱桃采摘


主题分支解决scheme

主题分支解决scheme中 ,您切换到分支“something”, 创build一个分支来修复一个bug,例如“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] 

另请参阅早期解决主题分支之间的冲突/依赖关系 , 永不合并 ,也可能由Junio C Hamano(git维护者) 提交不同的分支博客文章。


樱桃挑选错误修正

樱桃采摘解决scheme是有用的,如果你后来注意到,你创build的错误修正(例如在开发分支)也将在其他分支(如稳定的分支)也有用。 在你的情况下,你可以修改“东西”分支:

 $ git checkout something [edit, edit, edit] $ git commit $ git checkout experimental 

然后你注意到,修正你在“某事”分支应该也在“实验”分支。 假设这个错误修正是提交'A'(例如,如果你没有在'东西'之上提交任何东西,但是可能是'something〜2'或'c84fb911'):

 $ git checkout experimental $ git cherry-pick A 

(你可以使用--edit选项git樱桃select,如果你想编辑提交消息之前樱桃挑选错误修正)。

你可以:

  • stashcommit您在experimental分支上commit的更改
  • checkout something
  • (可选) bisectfind错误
  • commit更改
  • checkout experimental

接着:

  • 如果你想要一个干净的提交图(如果你公开这个仓库,你关心这个)

要么:

  • merge something如果你不关心“演示文稿”:)

因为您的实验分支具有某些function,您应该执行以下操作之一:

  • 在修复错误之后,将某些东西合并到实验中
  • 重新设定你的实验

如果你没有太多的“主”,只要切换回实验,然后做'混合主'。 如果你这样做,我认为“git cherry-pick”命令是你的朋友。

你的分支是这样的:

大师>东西>实验

这是,如果你真的打算把东西合并到主。

如果可能的话,我会把它修改在主人之上,然后在主人之上重新绑定其他人。 但我只是喜欢重新装订。 或者你可以在那里修复它,然后像这样合并

大师>东西>实验

但是如果某个东西是一个简单的主题分支,我不会那么做。 这听起来像是你的“候选人下一个主人”

如果你可以合并,那就这样做。 如果你不想合并到其他分支的东西 ,然后修复错误,樱桃select提交到每个其他分支。