Git并在多个分支机构工作

时间:2009-08-26 11:22:20

标签: git version-control branch

我有几个Git分支:'experimental','something'和'master'。

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

我想我应该切换到'某事',修复bug,提交然后再回到'实验'。我应该如何从'某些'中进行微小的改变并将其应用于'master'和'experimental',这样当我切换到这些分支时我不必再次修复bug?

6 个答案:

答案 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 earlyNever merging back,以及Junio C Hamano撰写的Committing to a different branch博客文章(git maintainer)。


Cherry-picking a bugfix

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)

你可以:

  • stashcommit您在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。