4

我在 git 中有两个分支,master/ 和 1.7/。我使用cherry-pick将一些修复从master/移植到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

我的问题是,这会将cherry-picks(最初来自 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
4

1 回答 1

2

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

变基可能会在这里帮助你,而不是合并:

git rebase master 1.7

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

当您想从您要丢弃的分支中获取小的更改时,最好使用 Cherry-pick。您的工作流程应酌情基于合并或变基。

于 2011-12-21T07:31:29.600 回答