简短的问题是:如果我hg rollback
,如果他克隆了我,彼得如何获得我的回滚版本? 他或我必须执行或输入的确切步骤是什么?
细节:
完成以下步骤后,玛丽有7
,彼得有11
。我的存储库是7
彼得或我必须做的具体步骤是什么,或者输入那些回到PETER GETS 7的步骤?
F:\>hg init hgme
F:\>cd hgme
F:\hgme>echo the code is 7 > code.txt
F:\hgme>hg add code.txt
F:\hgme>hg commit -m "this is version 1"
F:\hgme>cd ..
F:\>hg clone hgme hgpeter
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
F:\>type hgpeter\code.txt
the code is 7
F:\>cd hgme
F:\hgme>notepad code.txt [now i change 7 to 11]
F:\hgme>hg commit -m "this is version 2"
F:\hgme>cd ..\hgpeter
F:\hgpeter>hg pull
pulling from f:\hgme
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
F:\hgpeter>hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
F:\hgpeter>type code.txt
the code is 11
F:\hgpeter>cd ..\hgme
F:\hgme>hg rollback
rolling back last transaction
F:\hgme>cd ..
F:\>hg clone hgme hgmary
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
F:\>type hgmary\code.txt
the code is 7
F:\>cd hgpeter
F:\hgpeter>hg pull
pulling from f:\hgme
searching for changes
no changes found
F:\hgpeter>type code.txt
the code is 11
彼得或我必须做的具体步骤是什么,或者输入那些回到PETER GETS 7的步骤?彼得应该采取一些措施来获取我的存储库的“当前状态”他克隆了我。我不应该敲他的前门告诉他,“嘿,你需要回滚”或其他什么。
答案 0 :(得分:4)
如果有人已撤消您的更改(您正在描述的情况),则回滚不合适。
来自hg
手册:
此命令不适用 在公共存储库上。一旦改变 可供其他用户使用, 在本地滚动交易是 无效(别人可能已经 拉了变化)。此外, 与读者的比赛是可能的 库;例如正在进行中 如果a,从存储库中拉出可能会失败 执行回滚。
你应该做的是hg backout
变更集,然后告诉彼拉。
如果你坚持回滚,你可以告诉Peter重新登记存储库,但我不建议这样做。
答案 1 :(得分:2)
是的,这种代码更改方案永远不应该使用hg rollback
。它应该使用hg backout
。 hg rollback
删除了历史记录,但是如果
然后你的版本被称为“野外”,有一天可以通过添加回你的存储库来“回来咬你”。因此,规则是,永远不要使用hg rollback
,除非您正在回滚应该从未存在于存储库中的内容,例如使存储库历史非常大的所有编译目标代码文件,和你确定没有人拉,你从不推,然后使用hg rollback
。对于普通版本控制使用,请使用hg backout
hg backout tip
将退出存储库中的最新修订版(通过创建新的变更集和历史记录)。
参考:http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html
处理已提交的更改