如何合并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认为提交包含了所有的历史记录
其中C'具有不同的SHA-1
ID。
同样,樱桃挑选从一个分支到另一个分支的提交基本上涉及生成一个补丁,然后应用它,从而以这种方式丢失历史。
提交ID的这种改变会破坏git的合并功能(尽管如果使用的话会有启发式方法,但会对此进行讨论)。
更重要的是, 它忽略了函数依赖关系 - 如果C实际使用了B中定义的函数,那么您永远不会知道 。
你可以使用git cherry-pick将自己单独提交到你当前的分支。
例如: git cherry-pick d42c389f
让我们试着举一个例子来理解:
我有一个分支,比如master ,指向X <commit-id>,并且我有一个指向Y <sha1>的新分支。
其中Y <commit-id> = <master>分支提交 - 很少提交
现在说,对于Y分支,我必须关闭主分支和新分支之间的提交。 以下是我们可以遵循的程序:
步骤1:
git checkout -b local origin/new
其中local是分支名称。 任何名字都可以给出。
第2步:
git merge origin/master --no-ff --stat -v --log=300
合并从主分支到新分支的提交,并创建合并提交日志消息,最多只有<n>实际提交被合并。
有关Git合并的更多信息和参数,请参阅:
git merge --help
另外如果你需要合并一个特定的提交,那么你可以使用:
git cherry-pick <commit-id>
链接地址: http://www.djcxy.com/p/8225.html