分支后删除主机的某些代码时Git分支和合并
只是运行git merge
,这就是这个命令的用途。
它会尝试将Y
和X
的修改组合在一起。
如果你创建了一个分支,在master中修改代码并合并(至少在这个部分)不变的分支,那么代码将不会回来。
Git是关于更改(“提交”)。如果您在已更改主控的相同位置合并了已更改部件的分支,则会收到通知并且合并已暂停。否则,更改是,合并。
,当你最后运行git checkout master && git merge branch-X
,Git会:
- 找到
master
当前尖端的合并基础,并提交给该名branch-X
做出决议; - 运行两个
git diff
s将基数与每个分支点进行比较;和 - 尝试合并所得变更集,将此组合应用于合并基础内容,以提出合并内容。
如果master
侧的变化包括删除一些套系Y
的,这是一个输入步骤3.有没有办法避免它成为一个输入步骤3
除非您使用不同的合并策略 - 合并策略具有完全控制权,因此可以修改上述三个步骤中的任何一个或全部,或者甚至可以消除部分或全部这些步骤 - 您现在可以做的唯一事情就是为灾难做好准备在步骤3期间:
- 让自己(或合并的人)记录。例如,用一条喊出来的线替换被删除的线:“在合并后把这些东西放回原处。”
- 尝试安排一个合并冲突,通过确保将来的任何提交将是
branch-X
的提示将包含对同一组行的更改。
这样做会有最高的成功几率,因为谁合并(你或别人)会看到警告的警告。但请注意,这两个准备步骤可能会被未来的其他人撤销,在未来的某个时间git merge
之前。没有什么可以做,以防止这种情况。
凡实际运行git merge
,在未来,有这个控制,通过git merge -s <strategy-name>
。然而,在目前以及我认为可以预见的将来,并不是神奇的合并策略,无论如何它都会做你想要的。所以这也没什么帮助。
谢谢!它是我想要做的。 –
尽管如此,你可能会更好地服务于不同的策略(不是“合并策略”,而是整体使用Git):不是提交'master'来删除一堆行,而是创建一个新分支'删除了一堆线。保持'master'原样,并使用'for-now'来部署,直到你认为事情已经准备好。 – torek
是的,我结束这种情况的唯一原因是因为我们有一群人同时写功能,然后2个月后,决定删除其中一个。到那时已经有一个巨大的承诺,它似乎更容易从主人身上移除它。但事实证明,另一个功能需要这个工作,并出现在X分支,当X需要回到主 - 爆炸 –
我明白这一点。有没有办法克服这一点,除了愚蠢的复制粘贴? –
假设我得到了你想要的东西,那完全不是git的目的。这将恢复主分支中的所有更改。分支并不意味着是备份快照。但是,您可以在两个分支之间创建差异并创建还原提交。 – clemens321
另一种方法是使用“git reset”,它会将分支引用更改为任何其他提交。但要小心,这可能会删除其他提交,并且如果您使用远程存储库,则可能导致非转发操作。 – clemens321