如何在Git中合并特定的提交

我从GitHub的一个仓库分支出了一个分支,并且犯了一些特定的事情。 现在我发现原来的仓库有一个很好的特点,在HEAD

我只想在没有提交的情况下合并它。 我该做什么? 我已经知道如何合并所有提交:

 git branch -b a-good-feature git pull repository master git checkout master git merge a-good-feature git commit -a git push 

' git cherry-pick '应该是你的答案。

应用现有提交引入的更改。

不要忘了在这篇文章中读到bdonlan关于樱桃采摘后果的答案:
“从分支中提取所有提交,将指定的提交推送到另一个提交” ,其中:

 A-----B------C \ \ D 

变为:

 A-----B------C \ \ D-----C' 

这个提交的问题是git认为提交包含所有的历史logging

其中C'具有不同的SHA-1 ID。
同样,樱桃挑选从一个分支到另一个分支基本上涉及到生成一个补丁,然后应用它,从而也失去了历史。

提交ID的这种改变打破了Git的合并function(尽pipe如果使用的话,有启发式将会在这个文件上)。
更重要的是, 它忽略了函数依赖关系 – 如果C实际上使用了B中定义的函数,那么你永远不会知道

你可以使用git cherry-pick将自己的一个提交应用到你当前的分支。

例如: git cherry-pick d42c389f

我们试着举个例子来理解:

我有一个分支,说大师 ,指向X <commit-id>,我有一个新的分支指向Y <sha1>。

其中Y <commit-id> = <master>分支提交 – 很less提交

现在说Y分支我必须closures主分支和新分支之间的提交。 以下是我们可以遵循的程序:

步骤1:

 git checkout -b local origin/new 

其中local是分支名称。 任何名字都可以给出。

第2步:

  git merge origin/master --no-ff --stat -v --log=300 

合并提交从主分支到新的分支,也创build一个合并提交的日志消息与最多<n>实际提交合并的单行描述。

有关Git合并的更多信息和参数,请参阅:

 git merge --help 

另外如果你需要合并一个特定的提交,那么你可以使用:

 git cherry-pick <commit-id>