我从GitHub中的一个存储库中分叉了一个分支,并为我提交了一些特定的东西 . 现在我发现原始存储库有一个很好的功能,位于 HEAD .
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关于采摘樱桃的后果的答案:"Pull all commits from a branch, push specified commits to another",其中:
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
git cherry-pick d42c389f
让我们试着举个例子来理解:
我有一个分支,比如 master ,指向X <commit-id>,我有一个指向Y <sha1>的新分支 .
哪里 Y <commit-id> = <master> branch commits - few commits
现在说对于Y分支,我必须在主分支和新分支之间进行间隙关闭 . 以下是我们可以遵循的程序:
Step 1:
git checkout -b local origin/new
其中local是分支名称 . 任何名字都可以给出 .
Step 2:
git merge origin/master --no-ff --stat -v --log=300
将提交从主分支合并到新分支,并创建日志消息的合并提交,其中包含来自最多<n>实际提交的一行描述 .
有关Git merge的更多信息和参数,请参阅:
git merge --help
此外,如果您需要合并特定的提交,那么您可以使用:
git cherry-pick <commit-id>
3 回答
'git cherry-pick'应该是你的回答 .
不要忘记在这篇文章中阅读bdonlan关于采摘樱桃的后果的答案:
"Pull all commits from a branch, push specified commits to another",其中:
变为:
您可以使用git cherry-pick将单个提交单独应用于当前分支 .
示例:
git cherry-pick d42c389f
让我们试着举个例子来理解:
我有一个分支,比如 master ,指向X <commit-id>,我有一个指向Y <sha1>的新分支 .
哪里 Y <commit-id> = <master> branch commits - few commits
现在说对于Y分支,我必须在主分支和新分支之间进行间隙关闭 . 以下是我们可以遵循的程序:
Step 1:
其中local是分支名称 . 任何名字都可以给出 .
Step 2:
将提交从主分支合并到新分支,并创建日志消息的合并提交,其中包含来自最多<n>实际提交的一行描述 .
有关Git merge的更多信息和参数,请参阅:
此外,如果您需要合并特定的提交,那么您可以使用: