1

假设我在 master 中做了很多更改。但是,我想挑选所有不在 branch:release-5 中的内容。

4

2 回答 2

5

你可以挑选,但如果你变基会容易得多:

git checkout -b missing-commits master
git rebase -i --author=me release-5

不会选择第 5 版中已经存在的所有提交,只有您的提交才会被选中。之后,您可以将缺少提交的分支合并到 release-5 中。

话虽如此,您可以使用cherry-pick:

git cherry-pick --skip-empty --cherry-pick --no-merges --right-only --topo-order --do-walk master...release-5

正如您所看到的,它更容易使用git rebase,它可以为您挑选樱桃。

于 2014-05-10T09:15:29.417 回答
2

挑选樱桃的全部意义在于,您可以选择要复制到分支的特定提交子集。它是明确存在的,因为在某些情况下,您不想使用合并来集成来自另一个分支的所有提交。

现在,如果您发现自己处于想要挑选其他分支上的所有提交的情况,那么您正好处于合并情况,您只想将该分支合并到当前分支以集成所有更改:

git checkout release-5
git merge master

话虽如此,A..B修订范围语法允许您指定可访问的提交,B而没有可访问的提交A。因此,在您的情况下,您可能希望用于release-5..master选择所有已打开master但无法从您的release-5分支访问的提交:

git cherry-pick release-5..master

但是同样,如果您只想要所有这些,合并绝对是更好的选择,因为它不会重复提交并保持实际历史可用。

于 2014-05-09T17:18:11.307 回答