我可以“git cherry-pick <sha>”并且让“git log foo..bar”识别它吗?

3
背景:我有两个分支,master和stable,其中master上有很多提交记录不在stable上。我想要将一些这些提交记录合并到stable,然后使用“git log --merges-only stable..master” 命令来查看剩下的内容。
但是,如果我只是使用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

以“+”为前缀的条目是未来挑选的候选项。


Git对它们进行这样的处理,是因为它们确实是两个不同的提交 :-) ... cherry-pick会将"挑选的樱桃"与其父提交进行差异比较,然后将相同的更改作为新的提交应用到HEAD上。你需要的是(git提供了)逐对比较所做的更改;请参考Magnus Bäck的回答。请注意,这需要相当多的计算工作(git必须计算差异,就像在cherry-pick命令中一样,但现在必须对分叉路径上的每个提交都进行计算并进行比较!尽管如此,它在执行任务时速度相当快)。 - torek
3个回答

3

git cherry 命令是为了这个目的而设计的。


0

我不确定这是否对你有帮助,但你可能想看一下我的git-missing脚本。它模仿了Bazaar的bzr missing命令。它会显示出你在分支上多出来的提交,以及在另一个分支上缺失的提交。它还考虑了cherry picks。

例如:

$ git missing master
You have 1 extra revisions
--------------------------
0db6b7c Call SetupSource for .zsh files.

You have 1 missing revisions
----------------------------
70f9f42 Add clojure snippets.

0

在你挑选完所有需要的提交后,尝试将稳定版本与主版本进行变基:

git checkout stable
git rebase master

这将把所有的更改从主分支带到稳定分支,这正是我不能做的。我想带上一小部分,然后使用“git log”(或其他工具)来显示剩下的内容,省略我已经挑选的提交。 - Kylo
@Kylo 你可以进行一个微不足道的更改,以获取 git checkout --detach stable(检出与 git checkout stable 完全相同的代码,但让你处于分离的 HEAD 状态),然后按照此答案中的 git rebase master 进行操作,最后检查 git log master..HEAD。你可以选择在临时分支上执行此操作,而不是使用分离的 HEAD。 - user743382

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接