2009-08-30 64 views
2

使用MSYSGIT歷史瀏覽器,我簽出了一個特定的提交。 這是一個錯誤 - 我試圖查看這些文件,並認爲我必須檢查它們才能看到它們。撤消在GIT結帳

從那時起,我一直無法推送任何更多的提交到我的遠程回購(在GITHub上)。我有點理解,但不完全。 [我承認並不完全瞭解結帳的工作方式,請在小菜點上溫和點。]

如何撤消結帳並使事情恢復到之前的狀態?

如果我右鍵點擊「簽出」提交,我可以選擇'刪除此分支'。這會刪除該提交的文件[壞]還是撤消檢出?我吠叫錯了樹嗎?

回答

7

我的理解是,你不小心簽出了一個早期的提交,然後在你想保留的提交之上做了新的提交。首先,確保你有一個指針,以你現在的工作:

git checkout -b newbranch 

然後,結帳你在哪裏之前:

git checkout master 

希望這將讓你回到你的主線分支,你可以推到GitHub上像平常一樣。如果再想在你所做的更改拉,就可以合併,(一旦你高興)刪除臨時分支:

git merge newbranch 
git branch -d newbranch 
+0

如果你不想合併整個newbranch,你也可以選擇cherry提交單個提交。 – Benno 2009-08-30 12:15:19

+0

另外,如果其他人已將提交添加到遠程主服務器,您將無法將主服務器推送到遠程服務器。在那種情況下,做'git pull',然後'git push'應該可以工作。 – 2009-08-30 12:59:52

+0

幹得好!那樣做了! [儘管這個問題還不是很清楚。]但我仍然好奇:如果我在msysgit歷史瀏覽器中按下「刪除此分支」,會發生什麼?它會刪除文件嗎?甚至是在該文件之後做出的所有提交? – SamGoody 2009-08-31 07:21:07

0

分支基本上是一個指針,用C++術語。

您可能想嘗試移動分支以指向不同的提交。爲此,請使用git reset

git checkout mybranch 
git reset mypreviouscommit 

這不會刪除該承諾,但它確實讓mybranch「點」 mypreviouscommit。所以,mypreviouscommit會在master

+0

要驗證我是否正確理解 - 簽出的提交的位置是2e968f,並且我已經添加了另一個提交2a45b0。我現在做「git reset 2e968f」,我應該像以前那樣搞砸了,沒有檢出提交,2a45b0是最新的常規提交。 – SamGoody 2009-08-30 09:51:05

+0

試圖重置拋出一個錯誤。致命:無法解析對象'2e968fd7bf2018680856316e3133c610284d9619'。請幫忙。 – SamGoody 2009-08-30 09:55:43

-1

如果你不介意失去您所做的所有更改自上次拉來Github上,你可以簡單地刪除一個新鮮的,新的目錄和

git clone ... 

+1

我不介意丟失我的其他提交,但它是一個記住的想法。順便說一下,我發現這種態度在GIT中非常普遍(例如,我今天接觸到了這個評論:「有趣,從來沒有面對過這個問題,因爲我定期從主服務器重新創建我的分支,正確的做法很多,特別是如果你有很多的貢獻,但嘿...「[這不是一個非常悲傷的反映使用GIT的不切實際?!] – SamGoody 2009-08-31 07:27:24