我从 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
其中Y
现在说对于 Y 分支,我必须在主分支和新分支之间进行间隙关闭。以下是我们可以遵循的程序:
步骤 1:
git checkout -b local origin/new
其中 local 是分支名称。可以给出任何名称。
第 2 步:
git merge origin/master --no-ff --stat -v --log=300
将提交从主分支合并到新分支,并创建日志消息的合并提交,其中包含来自最多
有关 Git merge 的更多信息和参数,请参阅:
git merge --help
此外,如果您需要合并特定的提交,那么您可以使用:
git cherry-pick <commit-id>