什么是SVN中的反向合并(Revert Merge),简单的解释和从头到尾的逐步过程

Posted

技术标签:

【中文标题】什么是SVN中的反向合并(Revert Merge),简单的解释和从头到尾的逐步过程【英文标题】:What is Reverse Merge ( Revert Merge ) in SVN, a simple explanation and the step by step processes from start to finish 【发布时间】:2013-10-31 20:15:57 【问题描述】:

就好了。

谁能给我流程,如果可以的话,编号。一个好的简单的例子也很好。

【问题讨论】:

【参考方案1】:

来自乌龟User Guide:

如果您想将更改从工作副本中合并回来,以还原 已提交的更改,请选择要修改的版本 还原并确保选中了反向合并框。

从我的角度来看,反向合并是一种“正常”提交,它代表对一个或多个先前提交的“反”提交。以前的提交仍然存在,但更改会通过新的“反”提交恢复。

【讨论】:

我想用一个例子简单解释一下 如果您执行的提交将变量“Foo”的值更改为“Bar”,那么反向提交将带回“Foo”。 这个例子对你有帮助吗? 这很有帮助。所以这有点像回滚。 @Micha:也感谢您的回复。虽然我理解你的观点并同意你的用法本身并没有错,但如果使用个人公式而不是在特定领域中成熟的公式,在更广泛的社区中进行交流仍然会变得非常困难,尤其是在微妙而混乱的情况下——容易出现的主题,例如版本控制。在这种情况下,我建议坚持 SVN 自己的术语定义。在那里,提交意味着“将工作副本中的更改发送到存储库”(svnbook.red-bean.com/en/1.7/svn.ref.svn.c.commit.html)。【参考方案2】:

简答

反向合并在形式上与合并相同,但当然是相反的顺序。来自反向合并修订的更改将在您的工作副本中撤消。

示例

例如,如果您想从 HEAD 返回到 rev。 123,你会像这样反向合并,假设你的工作副本处于 HEAD 状态:

svn merge -r HEAD:123

这会将您的工作副本设置为修订版 123 的状态,但它将正式基于 HEAD。您的工作副本状态就像您手动将文件编辑回修订版 123 一样。到目前为止,存储库中没有任何变化。

请注意,这与 更新 到修订版 123 不同。如果您这样做了,尽管您的工作副本文件在两种情况下都具有相同的内容,但您的工作副本状态会有所不同:SVN 会知道您的工作副本是基于修订版 123 而不是 HEAD。如果您随后尝试提交更改,它会告诉您应该先更新到 HEAD,这将撤消对修订版 123 的更新,假设您在此期间没有更改任何内容。

回到我们原来的场景。如果您对反向合并感到满意,则可以将其签入存储库:

svn commit -m "We undid all changes since r123."

或者,如果您觉得自己犯了错误,您可以revert reverse merge,这是完全不同的事情,因为它只会将您的工作副本设置回存储库状态基于(在我们的例子中是 HEAD):

svn revert --recursive .

但是要小心那个,它会不可逆转地恢复你的反向合并:-)。 点指的是当前目录,并且必须明确指定(与大多数其他 SVN 命令不同)作为安全措施,以避免意外恢复任何内容。

【讨论】:

以上是关于什么是SVN中的反向合并(Revert Merge),简单的解释和从头到尾的逐步过程的主要内容,如果未能解决你的问题,请参考以下文章

svn merge树冲突怎么解决

把一台电脑的svn 工作代码到另一台电脑上。svn cleanup,svn revert等操作很慢?

cherry-pick,revert和rebase使用的3-way合并策略

git在merge后会不会把最新代码更新过来

SVN merge问题。

git revert和git reset的区别