git:如何在分支之间 merge ,同时保持一些变更集专用于一个分支?

标签 git version-control branch dvcs merge

对于那些将绝对路径和数据库凭据硬编码到 Web 应用程序的多个随机位置的人来说, hell 中有一个特殊的地方。可悲的是,在他们下 hell 之前,他们正在地球上肆虐。我们必须处理他们的代码。

我必须对其中一个网络应用程序执行一些小的更改。我创建了一个新分支 features,并执行全局查找和替换以将路径和凭据更新到我的本地环境。我 promise 。我还将其标记为 local

我快活地跳进了危险的黑客忏悔中,在打了一百个令人费解的补丁之后,我想将我的 features 更改 merge 到 master 分支中,但我不想要一个 local 提交将被 merge 。

以后,我将在 masterfeatures 之间来回 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/

相关文章:

git - 为什么这个 merge 没有快进?

svn - 一个 SVN 存储库中的不同修订增量

ios - ViewDidLoad 加载4张图片

version-control - bitrot 有任何可接受的尺寸吗?

linux - 将之前忽略的目录添加到 Git 存储库

Git pull 但从不推送文件

django - 为项目框架创建一个 git repo

git - 在git中,在新代码添加到master后,是否可以从master merge 到最初从master创建的分支?

Git:限制推送到远程存储库的文件

git - 自动 merge 2 个 git 分支的脚本?