2015-03-02 40 views
1

我正試圖圍繞git revert環繞我的頭。我們可以說,一個git還原合併舊的提交頂部的恢復提交?

我從Clearcase背景的,其中以撤銷錯誤提交,你要麼:

  1. 檢查中就不好了提交的文件頂部的舊版本的文件(只讀文件級別上的承諾Clearcase)
  2. 刪除提交的元素
  3. 在版本樹中,將先前版本合併到當前版本中,以創建與最新提交之前相同的新版本。

現在在我的腦海裏,一個git revert是一個自動等價於(3)中的手工工作。

我的問題是:我們可以說git還原合併舊的提交頂部的恢復提交嗎?

+0

見http://stackoverflow.com/questions/28166547/what-are-the-differences-between-revert-amend-rollback-and-undo-a-com/28166763#28166763 – Jubobs 2015-03-02 10:28:12

回答

1

總之

git revert創建的要撤消提交的倒數。然後,您將新的更改集提交到存儲庫。

見節2.4 Git Basics - Undoing Things Unmodifying修改的文件

所以,不,你不能說:

,我們可以說,一個混帳復歸合併上 頂部的回覆提交舊的以前提交?

因爲您可以恢復存儲庫歷史記錄中的任何提交。

假設你有這樣的歷史:

C1 <-- C2 <-- C3 (HEAD) 

這意味着,如果要恢復提交C2,你不要犯「老一次提交」這將是C1 。因爲那麼你最終會以

C1 <-- C2 <-- C3 <-- C1 (HEAD) 

你不這樣做。你最終

C1 <-- C2 <-- C3 <-- C2' (HEAD) 

C2'是的C2倒數,以及C3仍然你歷史的一部分。

插圖

下面是上述說明中,taken from here的圖示。

enter image description here

0

不完全。 git revert將爲您選擇要恢復的每個提交創建一個新的提交對象,並且每個提交對象將與您分別選擇要恢復的每個提交完全相反。

意思是說,如果你git revert C1,那麼git將創建C1R,它正好顛倒了C1所做的所有更改。

+0

這是一個非常簡明明確的答案,用最少的話來捕捉問題的本質。 (對不起 - 其他人有圖)。 – hawkeye 2015-03-02 11:56:18