背景:我有两个分支,master和stable,其中master上有很多提交记录不在stable上。我想要将一些这些提交记录合并到stable,然后使用“git log --merges-only stable..master” 命令来查看剩下的内容。
但是,如果我只是使用cherry-pick命令,git会把它们作为两个提交,因此 'git log' 命令就无法帮助我了。例如,给定以下内容:
然而,我了解到了关于
但是,如果我只是使用cherry-pick命令,git会把它们作为两个提交,因此 'git log' 命令就无法帮助我了。例如,给定以下内容:
# create a repo
mkdir cherry
cd cherry
git init
# add a commit on master
touch foo.txt
git add foo.txt
git commit -a -m 'commit 1'
# create a stable branch
git checkout -b stable
# add two more commits to master
git checkout master
touch bar.txt
git add bar.txt
git commit -m 'commit 2'
touch baz.txt
git add baz.txt
git commit -m 'commit 3'
# cherry-pick just one of those commits to stable
git checkout stable
git cherry-pick master
接下来,我希望能够查看哪些提交是未来在主分支上进行 cherry-pick 的候选项,最好使用 git log
命令,但这并没有真正回答我的问题:
> git log stable..master --pretty=oneline --no-merges
01550adab8993ceb1eec7bbc7a0e3de3550d63fc commit 3
8a3ea27aa50c887b603296bb9d4a36ccbfa35311 commit 2
然而,我了解到了关于
git cherry
的知识:> git cherry stable master
+ 8a3ea27aa50c887b603296bb9d4a36ccbfa35311
- 01550adab8993ceb1eec7bbc7a0e3de3550d63fc
以“+”为前缀的条目是未来挑选的候选项。
cherry-pick
会将"挑选的樱桃"与其父提交进行差异比较,然后将相同的更改作为新的提交应用到HEAD
上。你需要的是(git提供了)逐对比较所做的更改;请参考Magnus Bäck的回答。请注意,这需要相当多的计算工作(git必须计算差异,就像在cherry-pick
命令中一样,但现在必须对分叉路径上的每个提交都进行计算并进行比较!尽管如此,它在执行任务时速度相当快)。 - torek