假設我在工作目錄中進行了一些更改並意外標記了幾個文件(包括一些修改後的文件)以供刪除。如何取消刪除文件而不會丟失我所做的更改?撤銷Mercurial中的移除操作
回答
hg revert
我敢肯定水銀甚至使得在默認情況下更改備份。
好吧,我知道恢復。由於我使用了「hg remove -Af」(即在下一次提交中而不是從磁盤中將文件從存儲庫中刪除),我一直在尋找一種解決方案,只取消文件的標記以便保留在存儲庫中。 「hg revert」也將替換以前的版本。 我預計會有類似於「hg add」/「hg forget」的方式。 「hg forget」只是在下一次提交中將標記爲添加的文件取消標記。 – Kostas 2010-02-02 12:00:39
AFAIK恢復是你的唯一選擇去除 - 當然刪除的幫助說看到恢復刪除的東西(而你說的添加建議忘記作爲oposite)。你應該得到.orig文件,但是你的更改在 – 2010-02-02 13:04:07
嚴重。我只是想讓它從我不小心「忘記」的文件中刪除「刪除」標記。我不希望我的文件被修改。 如果我不小心加了,hg忘記解除它。相反是不正確的。如果我忘記一個文件,沒有任何數量的hg add'ing會取消標記。 BOOOOOOO TERRIBLE UX。 – 2012-04-04 20:12:08
在您對jk的評論中,我檢查了hg forget
。它似乎只是hg remove -Af
的一個快捷方式,這意味着這是hg add
的真正對立面。
接下來,如果您使用hg remove -Af
,那麼您應該能夠使用hg add
恢復(我剛剛嘗試過,似乎工作)。
標記存儲在.hg/dirstate文件中。在發佈hg remove -Af
之前,您需要做的只有一項。它可能看起來像這樣(未測試):
hg clone bad-repo orig-repo
cp orig-repo/.hg/dirstate bad-repo/.hg/dirstate
cd bad-repo
hg status
最後一個命令應顯示刪除文件之前的狀態。
只是hg add
的文件。
我不知道爲什麼你會得到一些修改工作目錄的答案。如果您不小心標記了一些要刪除的文件,則可以使用添加進行撤消。
[email protected]:~/hgtest$ hg status --all
M another_file
C a_file
[email protected]:~/hgtest$ hg remove --after --force *
[email protected]:~/hgtest$ hg status --all
R a_file
R another_file
[email protected]:~/hgtest$ hg add *
[email protected]:~/hgtest$ hg status --all
M another_file
C a_file
這就是說,不hg remove
或曾經真正使用--force
。也試圖養成使用hg forget
而不是hg remove --after
,
很確定這是正確的答案 - 並需要更多upvotes推到頂部。 – slim 2013-02-11 10:43:41
警告:在未經修改的文件上執行'hg remove [file]'將文件從文件系統中移除。在這種情況下,'hg add [file]'失敗,並且將其添加回來必須執行'hg revert [file]'。 'hg add [file]'是在刪除之前修改過的文件的正確答案。 – dinosaur 2014-10-28 20:15:21
這是真的。這就是爲什麼'忘記'總是一個更好的選擇。將刪除保留爲舊的(非mercurial)'rm'。 – 2014-10-29 04:21:21
的習慣我有完全相同的問題。 hg add
與hg forget
相反(正好相反)。但是,嘗試重新添加目錄本身不起作用。相反,我必須在每個文件上使用hg add
:
hg st | egrep "^R" | sed -e "s/R //" | xargs hg add
希望有所幫助。請注意,就我而言,我沒有任何理由想要刪除。如果您有一定要刪除的文件,請相應地調整grep。
如果該文件存在,(很可能你已經與hg forget
標記爲刪除或者如果已修改它,然後hg remove
d吧),做hg add [file]
與後最後一次提交之前所做的任何更改將其添加回忘記文件。
如果文件不存在(如果該文件未被修改,並且您使用hg remove
標記了要刪除的文件),請執行hg revert [file]
以將其恢復到其在工作目錄父級中的狀態。
這個答案遠遠勝過最受歡迎的答案,因爲它解釋了爲什麼以及何時每個命令都可以工作,而不是僅僅放棄一個配方。 – 2015-07-16 08:50:19
- 1. 撤銷mercurial中的移動/重命名操作?
- 2. 刪除WebView的NSUndoManager的撤銷操作
- 3. 使用Snackbar.Callback撤銷刪除操作
- 4. 審計撤銷操作
- 5. 撤消Mercurial中的最後一個刪除操作?
- 6. 撤銷遷移
- 7. 在codemirror中操作撤銷狀態
- 8. 如何撤銷在Mercurial中的添加/刪除
- 9. Mercurial撤銷推送到主分支
- 10. 撤消刪除操作monogdb
- 11. 如何從RichTextBox控件的撤消堆棧中移除操作?
- 12. 撤銷Google照片中的已撤銷作品
- 13. 撤銷遷移錯誤
- 14. 撤銷TortoiseSVN中的修復移動
- 15. 撤銷iOS證書撤銷
- 16. 有什麼辦法可以撤銷Mercurial中發佈的合併?
- 17. 如何撤銷Mercurial中變更集或變更集的內容?
- 18. 如何撤銷SmartGit/Git中的提交操作
- 19. 撤銷SVN刪除./* --force
- 20. 如何在datagridview中實現撤銷操作
- 21. 如何撤銷中間文件刪除
- 22. Eclipse項目刪除操作後撤消
- 23. 刪除/刪除/撤銷零件
- 24. 在CoreData中撤消操作
- 25. 我們可以撤銷Mercurial推送的更改嗎?
- 26. 如何取消正在進行的撤銷/重做操作?
- 27. 是否可以撤銷Mongo Collection上的拖放操作?
- 28. 如何撤銷信號量最新操作的SEM_UNDO?
- 29. 撤消Pdfnup操作
- 30. 執行撤銷/重做操作添加/刪除ListView項目(第2部分)
是的,除非你不告訴它,改變放在.orig文件 – 2010-02-01 10:16:30
我剛剛運行'hg恢復'在一個文件我間接刪除與'hg mv'。它沒有**保存我的更改,並且恢復到上次提交的副本。 – cesar 2011-09-23 02:43:44
這不是正確的答案。恢復改變目錄的工作,這個問題是關於如何撤消「刪除標記」 – 2012-05-11 17:09:15