我已经使用 Git 大约一年了,觉得它很棒,但我刚刚开始了该项目的第二个版本,并为其创建了一个新分支。我正在努力寻找处理未来事情的最佳方式。
我有两个分支,分别称为 master10(用于 v1)和 master20(用于 v2)。我一直在 master10 分支的 v1 中进行错误修复,并开发 master20 的新东西。每当我进行错误修复时,我都会通过检查 master20 并将其合并到 v2 中并执行git merge master10. 到目前为止,一切都很好。
git merge master10
然而现在,我在 v1 中做了一些我不想在 v2 中进行的更改,但我想继续合并其他错误修复。我如何告诉 Git 跳过那个特定的提交(或一系列提交),但是我仍然想合并其他错误修复。
我认为git rebase这可能是我需要的,但读了文档,我的头几乎要爆炸了。
git rebase
我想我想要的是一个类似于“git sync”的命令,它告诉 git 两个分支现在是同步的,并且将来只会合并来自这个同步点的提交。
任何帮助表示赞赏。
例如,如果您想将分支“maint”上的大部分但不是所有提交合并到“master”,您可以这样做。它需要一些工作——如上所述,通常的用例是合并分支中的所有内容——但有时会发生你对不应该集成回来的发布版本的更改(也许该代码的已经被master取代了),那么你如何表示呢?开始…
所以让我们假设 maint 已经应用了 5 个更改,其中一个 (maint~3) 不会合并回 master,尽管所有其他的都应该合并。您分三个阶段执行此操作:实际合并之前的所有内容,告诉 git 将 maint~3 标记为已合并,即使未合并,然后合并其余部分。神奇之处在于:
bash <master>$ git merge maint~4 bash <master>$ git merge -s ours maint~3 bash <master>$ git merge maint
第一个命令在您麻烦的维护提交到 master 之前合并所有内容。 默认合并日志消息将说明您正在合并“分支’维护’(早期部分)”。
第二个命令合并了麻烦的 maint~3 提交,但是“-s ours”选项告诉 git 使用特殊的“合并策略”,实际上,它通过简单地保留您要合并到的树并忽略提交来工作(s ) 你正在完全合并。但它仍然会以 HEAD 和 maint~3 作为父级进行新的合并提交,因此修订图现在显示 maint~3 已合并。所以实际上你可能也想使用 -m 选项来git merge解释那个 maint~3 提交实际上被忽略了!
git merge
最后的命令只是将其余的 maint (maint~2..maint) 合并到 master 中,这样你就可以再次同步了。