Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以';吉特樱桃皮克<;sha>';并拥有';git log foo..bar';认识它吗?_Git_Git Cherry Pick - Fatal编程技术网

我可以';吉特樱桃皮克<;sha>';并拥有';git log foo..bar';认识它吗?

我可以';吉特樱桃皮克<;sha>';并拥有';git log foo..bar';认识它吗?,git,git-cherry-pick,Git,Git Cherry Pick,背景:我有两个分支,master和stable,在master上有很多提交,但在stable上没有。我想挑选一些提交给stable的文件,然后能够使用git log--merges only stable..master查看剩下的内容 但是,如果我只是随意挑选,git会将它们视为两个提交,因此“git log”命令没有帮助。例如,鉴于此: # create a repo mkdir cherry cd cherry git init # add a commit on master touch

背景:我有两个分支,master和stable,在master上有很多提交,但在stable上没有。我想挑选一些提交给stable的文件,然后能够使用
git log--merges only stable..master
查看剩下的内容

但是,如果我只是随意挑选,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 picking on master的候选提交,理想情况下使用
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的候选项。

在cherry Pick了所有需要的提交后,尝试对master重新设置稳定值:

git checkout stable
git rebase master

git cherry命令就是为此而设计的。

我不确定它是否对您有帮助,但您可能想看看我的脚本。它模仿Bazaar的
bzr missing
命令。它将显示分支上的额外提交,然后是另一个分支中缺少的提交。它考虑了樱桃采摘

例如:

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

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

这将带来所有的变化,从主人到稳定,这正是我不能做的。我想带一把过来,然后用“git log”(或其他什么东西)来显示剩下的内容,省略我已经选择的提交。@Kylo你可以做一个小小的更改来获得
git checkout--detach stable
(签出与
git checkout stable
完全相同的代码,但让你的头分离),然后完全运行这个答案中的
git-rebase-master
,最后检查
git-log-master..HEAD
。您可以选择在临时分支上执行此操作,而不是使用分离的头。Git这样对待它们,因为它们是两个不同的提交:-)
cherry pick
将“picked cherry”与其父项进行区分,然后将相同的更改作为新提交应用于
HEAD
。您需要(git提供的)是成对地比较所做的更改;见马格纳斯·比克的答案。请注意,这是一个相当多的计算工作(git必须计算差异,就像在
cherry pick
命令中一样,但是现在必须对fork中的每个提交进行计算,然后将它们全部进行比较!不过,对于它正在做的事情,它的速度相当快)。