避免重复提交,从主人到分支的挑选,然后从分支合并回主人

时间:2011-12-21 06:55:36

标签: git merge cherry-pick

我在git中有两个分支,master /和1.7 /。我使用cherry-pick将一些修复从master / backport转移到1.7 /。 (我没有使用合并,因为我只想要进行一些更改。):

$ git checkout 1.7
$ git cherry-pick -x <initial commit SHA>..<master change 2 SHA>

然后,我合并1.7 /回到master /,因为我希望所有已经进入1.7 /(除了樱桃选择之外)的更改被合并回主线:

$ git checkout master
$ git merge 1.7

我的问题是,这会将樱桃选择(最初来自master /)重新提交给master /:

$ git log --oneline
8ecfe22 Merge branch '1.7'
fe3a60d master change 2 (cherry picked from commit f5cca9296e45d5965a552c45551157ba
9c25f53 master change 1 (cherry picked from commit 8fae2a68a356f5b89faa8629b9a23b23
f5cca92 master change 2
8fae2a6 master change 1
ffa10bf initial commit

在我的真实存储库中,它甚至导致合并冲突。

所以我的问题是,我可以避免这种情况(如果是这样,如何)?

重现此行为的完整命令列表:

$ git init
<create Dialog.js file>
$ git add Dialog.js
$ git commit -am "initial commit"
$ git branch 1.7

<edit Dialog.js file>
$ git commit -am "master change 1"
<edit Dialog.js file>
$ git commit -am "master change 2"
$ git log

$ git checkout 1.7
$ git cherry-pick -x <initial commit SHA>..<master change 2 SHA>

$ git checkout master
$ git merge 1.7
$ git log

1 个答案:

答案 0 :(得分:2)

当您选择时,除非您使用快进选项-ff,否则您正在创建新提交,当您合并回来时,git必须合并这些提交,即使它们可能实际上是无操作

Rebase可能会帮助您,而不是合并:

git rebase master 1.7

然后现在,合并分支(如果需要。)

如果您希望从您要丢弃的分支进行小的更改,则最好使用Cherry-pick。您的工作流程应根据需要进行合并或变更。