分支后删除主机的某些代码时Git分支和合并

分支后删除主机的某些代码时Git分支和合并

问题描述:

我从主机分支X,从主机删除一些代码Y.当我将代码从X合并回到主数据库时,我如何使它返回给主数据库(因为它尚未从X中删除)。分支后删除主机的某些代码时Git分支和合并

只是运行git merge,这就是这个命令的用途。

它会尝试将YX的修改组合在一起。

如果你创建了一个分支,在master中修改代码并合并(至少在这个部分)不变的分支,那么代码将不会回来。

Git是关于更改(“提交”)。如果您在已更改主控的相同位置合并了已更改部件的分支,则会收到通知并且合并已暂停。否则,更改是,合并

+0

我明白这一点。有没有办法克服这一点,除了愚蠢的复制粘贴? –

+1

假设我得到了你想要的东西,那完全不是git的目的。这将恢复主分支中的所有更改。分支并不意味着是备份快照。但是,您可以在两个分支之间创建差异并创建还原提交。 – clemens321

+1

另一种方法是使用“git reset”,它会将分支引用更改为任何其他提交。但要小心,这可能会删除其他提交,并且如果您使用远程存储库,则可能导致非转发操作。 – clemens321

,当你最后运行git checkout master && git merge branch-X,Git会:

  1. 找到master当前尖端的合并基础,并提交给该名branch-X做出决议;
  2. 运行两个git diff s将基数与每个分支点进行比较;和
  3. 尝试合并所得变更集,将此组合应用于合并基础内容,以提出合并内容。

如果master侧的变化包括删除一些套系Y的,这是一个输入步骤3.有没有办法避免它成为一个输入步骤3

除非您使用不同的合并策略 - 合并策略具有完全控制权,因此可以修改上述三个步骤中的任何一个或全部,或者甚至可以消除部分或全部这些步骤 - 您现在可以做的唯一事情就是为灾难做好准备在步骤3期间:

  • 让自己(或合并的人)记录。例如,用一条喊出来的线替换被删除的线:“在合并后把这些东西放回原处。”
  • 尝试安排一个合并冲突,通过确保将来的任何提交将是branch-X的提示将包含对同一组行的更改。

这样做会有最高的成功几率,因为谁合并(你或别人)会看到警告的警告。但请注意,这两个准备步骤可能会被未来的其他人撤销,在未来的某个时间git merge之前。没有什么可以做,以防止这种情况。


凡实际运行git merge,在未来,有这个控制,通过git merge -s <strategy-name>。然而,在目前以及我认为可以预见的将来,并不是神奇的合并策略,无论如何它都会做你想要的。所以这也没什么帮助。

+0

谢谢!它是我想要做的。 –

+0

尽管如此,你可能会更好地服务于不同的策略(不是“合并策略”,而是整体使用Git):不是提交'master'来删除一堆行,而是创建一个新分支'删除了一堆线。保持'master'原样,并使用'for-now'来部署,直到你认为事情已经准备好。 – torek

+0

是的,我结束这种情况的唯一原因是因为我们有一群人同时写功能,然后2个月后,决定删除其中一个。到那时已经有一个巨大的承诺,它似乎更容易从主人身上移除它。但事实证明,另一个功能需要这个工作,并出现在X分支,当X需要回到主 - 爆炸 –