对于那些将绝对路径和数据库凭据硬编码到 Web 应用程序的多个随机位置的人来说, hell 中有一个特殊的地方。可悲的是,在他们下 hell 之前,他们正在地球上肆虐。我们必须处理他们的代码。
我必须对其中一个网络应用程序执行一些小的更改。我创建了一个新分支 features
,并执行全局查找和替换以将路径和凭据更新到我的本地环境。我 promise 。我还将其标记为 local
。
我快活地跳进了危险的黑客忏悔中,在打了一百个令人费解的补丁之后,我想将我的 features
更改 merge 到 master
分支中,但我不想要一个 local
提交将被 merge 。
以后,我将在 master
和 features
之间来回 merge ,我希望 local
留在 features
,永远不会出现在 master
中。
理想情况下,我希望所有这一切都神奇地发生,尽可能少的有趣参数和诸如此类的东西。
有没有一种我缺少的简单明显的方法?
我可以想到几个,但它们都要求我记住我不想要那个提交。那绝对不是我的强项。尤其是对于这样糟糕的黑客攻击程序。
如果做不到这一点,我感兴趣的是更复杂的手动方式来处理这种情况。
最佳答案
我对这个问题的解决方案是使用 rebase 而不是 merge
从这样的提交树开始:
a-b-c <-- master
\
d <-- local
\
e-f-g <-- dev
$ git rebase --onto master local dev
master
V
a-b-c-e'-f'-g' <-- dev
\
d <-- local
$ git checkout 大师
$ merge 开发
master
V
a-b-c-e'-f'-g' <-- dev
\
d <-- local
$ git rebase --onto master master local
master
V
a-b-c-e'-f'-g' <-- dev
\
d' <-- local
$ git branch -f 本地开发
master
V
a-b-c-e'-f'-g'
\
d' <-- local
^
dev
关于git:如何在分支之间 merge ,同时保持一些变更集专用于一个分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288480/