高级Git分支杂耍

时间:2015-03-03 15:04:16

标签: git

我有一个奇怪的情况,我可以通过其他方法解决,但我想进一步推动我对git的了解。

我认为图表是有序的。它看起来很疯狂,但我认为它实际上并不那么糟糕。我用方括号表示当前的分支。

                   upstream
                     /   \
                   /      \
                 /         \
      starting point        |
        /      \         upstream
   my OSX       \         change (1)
   config        \          \
      |       my linux       \
    worked    config     more stuff
     on A        |        upstream (2)
      |\________ |            |
      |         \|            |
      |        Merge         /|
      |  (OSX into Linux)   /  \
      |          |         /    \
   changed    worked      /     |
   OSX conf    on B      /      |
      | ________/|   ___/    [upstream]
      |/         |  /
      |          | /
      |      Merge (upstream
   Merge B     into Linux)
  into OSX        |
    [OSX]      worked
                on C
                  |
               worked
                on D
               [Linux]

所以基本上我们这里有7件"工作"我已经在概念上将其放入此图表中的各种提交中。标记为A至D的工作单位是实际的" work"我想使用git merge来通过我的[OSX]和[Linux]工作分支进行传播。

但是我想保持我的配置文件差异(在我的实际情况中这些包括makefile中的一些简单更改,但你也可以想象这是一组很大的配置文件差异)在他们自己的分支本地。

好的,我现在遇到的问题是我想将C和D合并到[OSX]中。但是,由于原因(不失一般性),上游更改(标记为1和2)我实际上想要远离[OS X]。

我想建立一个工作流程,我可以在我的分支机构之间任意切换(比如说我在办公室的Linux上工作,在咖啡店的OS X上工作,因为在咖啡店里SSH太不稳定了)。一个完全合适的解决方案就是,例如,将C和D挑选到[OSX]中,但我认为可以配置所有内容,以便我实际上只需将[Linux]合并到[OSX]中而无需引入上游我想要保留的东西。

我也想出了如何做到这一点。我可以继续进行合并,然后在上游变更(1)和(2)上进行git revert(实际上在功能上只是逆樱桃选择),然后在这一点上我可以自由前进。

所以我对此几乎感到高兴。我认为更强大的是,如果我能以某种方式" pin"上游"上游"提交,以便它自动不在(1)和(2)中合并。通过这种方式,它可以让我免于执行潜在的大量樱桃选择或恢复。

这可能吗?

0 个答案:

没有答案