簡體   English   中英

Git中的TFVC“回滾”等效項是什么?

[英]What is the equivalent of TFVC “Rollback” in Git?

如果我使用牛逼 EAM˚Foundation 小號烏爾斯河呼叫控制,我可以很容易地回滾到舊變更。

假設我有一個具有4個版本的文件,則每個版本都有一個changset:

  • 變更集a126-版本1。
  • 變更集b347-版本2。
  • Changeset c560-版本3。
  • 變更集d912-版本4。

現在,我在版本3和版本4中發現了很多錯誤,我想快速返回到版本2。

在Visual Studio中,我可以單擊文件上的“查看歷史記錄”,單擊Changeset b347(“版本2”),然后單擊“回滾”。

現在,我使用版本2中的文件創建了一個新的變更集,我可以檢入它(我的歷史記錄中仍然有版本3/4,因此有時也可以返回到它們)。

在Git中,我知道有revertreset (硬,軟),但是我不確切知道我需要做什么才能達到相同的結果。

那么在Git中回滾到舊版本的最佳方法是什么(通過Visual Studio首選)?

git reset --hard b347
git push -f origin master

這會完全刪除c560d912 ,但是之后您需要強制按下。

請參閱Git還原,簽出和重置之間有什么區別?

要撤消創建新提交的更改:

git revert d912 c560

假設您有4個提交ABCD ,每個文件都更改了foo.txt ,並且CD的代碼都有foo.txt引入的錯誤。

1.其他文件可能會在C和D中更改。如果只想將foo.txt回滾到B版本:

git checkout B -- foo.txt

如果要提交回滾,

git commit

歷史將是ABCD-R1

2.如果要回滾C和D的所有更改(包括其他文件的更改,如果有的話),並且CD已推送到遠程存儲庫:

git revert D C

歷史將是ABCD-R2-R3

3.如果要回滾C和D的所有更改,而CD尚未推送到遠程存儲庫:

git reset B --hard

歷史將是AB 您也可以在案例2中使用此解決方案,但隨后需要強制推動分支以覆蓋遠程存儲庫中的分支。 如果其他貢獻者獲取了舊的歷史記錄,則需要告訴他們獲取新的歷史記錄。

不知道什么是TFVC中的簽入,但是如果您只想查看v2文件,則可以git checkout b347 -- thefilenameyouwant您想要的文件git checkout b347 -- thefilenameyouwant

要繼續工作副本中存儲庫的v2狀態,您可以執行

# get uncommitted changes out of the way
git stash

# recreate v2 in the working copy
git checkout commit-hash-or-tag-of-v2 

# create new branch based on v2
git checkout -b branchname-for-new-branch

(1)如何回滾和“丟失”版本3和4:

就像這樣簡單:

git reset --hard b347

說明:

  • 回到版本2。
  • 您將“丟失”版本3和版本4。
  • 如果您仍然希望獲得版本3和版本4,則這些提交在您的reflog中仍然可以使用一段時間(具體取決於您的設置)(默認時間為內存的90天)。

或(2)創建一個新分支(以保留版本3和4):

  • 您只需在版本2中創建一個新分支即可。

    git checkout b347

    git checkout -b redo-work-from-version-2

說明:

  • 您將回到無頭狀態的b347。 暫時暫時不理會。
  • 我們創建一個名為redo-work-from-version-2的新分支。
  • 版本3和版本4仍然存在並且可用,但是它們將位於不同的分支上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM