如何在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>