Git并在多个分支机构工作

Gav*_*Gav 42 git version-control branch

我有几个Git分支:'实验','某事'和'主人'.

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

我想我应该转向'某事',修复bug,提交然后再回到'实验'.我应该如何从'某些'中做出微小的改变并将其应用于'master'和'experimental',以便在切换到这些分支时我不必再次修复bug?

Jak*_*ski 54

您可以使用以下两种解决方案:使用主题分支或使用cherry-picking.


主题分支解决方案

主题分支解决方案中,您切换到分支'某事',创建一个分支来修复错误,例如'something-bugfix',将此分支合并为'某事'(修复错误),然后将此分支合并为'实验'.

$ 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]
Run Code Online (Sandbox Code Playgroud)

另请参见解决冲突/主题分支机构之间的依赖关系的早期永不回合并,或许也是致力于不同的分支由JUNIOÇ滨野(GIT维护者)博客文章.


樱桃采摘错误修复

樱桃采摘,如果你注意到的解决方案是非常有用后来是(在开发分支如)创建的bug修正将是对其他分支也很有用(例如稳定的分支).在你的情况下,你会修改'某事'分支:

$ git checkout something
[edit, edit, edit]
$ git commit
$ git checkout experimental
Run Code Online (Sandbox Code Playgroud)

然后你注意到你在"某事"分支中所做的修复也应该在'experimenta'分支上.让我们说这个错误修正是提交'A'(例如'某事',如果你没有在'某事'之上提交任何东西,但它可能是例如'某事〜2'或'c84fb911'):

$ git checkout experimental
$ git cherry-pick A
Run Code Online (Sandbox Code Playgroud)

(如果你想在编辑樱桃挑选的bug修改之前编辑提交消息,你可以使用git cherry-pick--edit选项).


Car*_*ino 5

你可以:

  • stash或者commit您在experimental分支机构上工作的更改
  • checkout something
  • (可选)bisect找到bug
  • commit 变化
  • checkout experimental

然后:

  • rebase something 如果你想要一个干净的提交图(如果你暴露这个存储库,你关心它)

要么:

  • merge something 如果你不关心'演示':)