【发布时间】:2010-12-12 11:54:53
【问题描述】:
有时我会同时与多个分支机构合作。假设我有名为 master、release-1.1 和experimental 的分支。我创建了一个新文件或在实验中进行了更改,我希望将一个更改应用于其他分支。
我可以在 git 中执行此操作吗?如果我只是将提交合并到另一个分支中,git 会自动“快进”并包含其间的任何提交。但是必须有一些方法来处理这个用例。
【问题讨论】:
有时我会同时与多个分支机构合作。假设我有名为 master、release-1.1 和experimental 的分支。我创建了一个新文件或在实验中进行了更改,我希望将一个更改应用于其他分支。
我可以在 git 中执行此操作吗?如果我只是将提交合并到另一个分支中,git 会自动“快进”并包含其间的任何提交。但是必须有一些方法来处理这个用例。
【问题讨论】:
你想做的事叫做cherry picking。您可以使用以下命令cherry pick单个提交:
$ git cherry-pick <commit hash or name>
这会将来自该提交的更改仅合并到您当前的分支中。但是请注意,这会创建一个 new 提交;这个新提交与精心挑选的提交具有完全相同的更改(甚至相同的提交日期和作者),但从技术上讲,它是一个 new 提交,所以你会看到它是一个新提交例如,gitk。您还必须为要查看更改的每个分支执行樱桃挑选。
【讨论】:
解决方案,但不幸的是,您在进行更改之前需要了解的解决方案是仅为此更改创建单独的分支(所谓的“主题分支” ),关闭最早的分支或有意义的最早提交,并将此分支合并到任何需要此提交的分支中。
在某些情况下,其他解决方案可能是在维护分支中进行更改,将维护分支合并到稳定分支,并将稳定分支合并到开发分支。
Junio C Hamano(Git 维护者)在他的博客中写道:Resolving conflicts/dependencies between topic branches early
【讨论】: