git - 我可以在过去的提交中 merge future 的分支,而不 merge 它们之间的共享提交,或者不进行樱桃选择吗?

标签 git git-branch git-merge git-cherry-pick

假设我有一个标签,v1.5。进行了更多提交,并在标记 v1.5 之前的某个点创建了另一个分支 fix

现在 fix 中的修复已经完成,需要将其应用于 1.5 处标记提交所表示的代码的发布版本。

是否可以在不使用 git-cherry-pick 的情况下,在历史记录中的给定点 merge 来自 fix 的大量提交?

o  ... (history)
|
o  tag v1.5
|
o (can not have in v1.5)
|
o (can not have in v1.5)
|
o (can not have in v1.5)
|\
| \ (`fix` branch)
|  \
|   o (needed at v1.5)
o   | -(can not have in v1.5)
|   o (needed at v1.5)
|   |
|   o (needed at v1.5)
o   | -(can not have in v1.5)
    o (needed at v1.5)

最佳答案

是的,这可以通过rebase而不是cherry-pick来实现。无论使用哪种方法,最终结果都应该是相同的。

首先为fix分支创建一个新名称,使得原来的fix分支保持不变

git branch fixv1.5 fix

然后将 fixv1.5 重新设置为 v1.5

git rebase --onto v1.5 <upstream> fixv1.5

哪里<upstream>应该是修复分支所基于的提交的 SHA,即下图中标记为 P 的那个。

现在您应该拥有如下所示的历史记录:

o  ... (history)
|
o  tag v1.5
| \
|  \   A'  B'  C'  D'
|   ---o---o---o---o  fixv1.5
|
o (can not have in v1.5)
|
o (can not have in v1.5)
|
o (can not have in v1.5) P
|\
| \ (`fix` branch)
|  \
|   o (needed at v1.5) A
o   | -(can not have in v1.5)
|   o (needed at v1.5) B
|   |
|   o (needed at v1.5) C
o   | -(can not have in v1.5)
    o (needed at v1.5) D

为了完整起见,cherry-pick 的等效用法是

git checkout -b fixv1.5 v1.5
git cherry-pick <upstream>..fix

关于git - 我可以在过去的提交中 merge future 的分支,而不 merge 它们之间的共享提交,或者不进行樱桃选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313252/

相关文章:

git - Symfony2 项目与 Git : Best approach?

git commit 不适用于 cron 作业,尽管 git pull 确实有效

git - 如何在 git 中对齐列以改进格式?

git - 如何使用 git 将现有分支推送到新的仓库中?

java - Ref 对象的 getPeeledObjectId() 和 getObjectId() 有什么区别?

git - 版本控制 Laravel。我应该忽略哪些文件?

git - 如何在本地计算机上进行 git rebase 后删除存储库中的 "branch"

git - 再次从 master 中删除提交

git - 两个分支添加的相同文件导致奇怪的 merge 冲突

git - 阻止将琐碎的 merge 推送到 git 服务器