2010-11-25 42 views
44

首先,Git很糟糕。我知道,我知道,它應該是自切片面包以來最好的,但它很糟糕。這就像試圖用電鋸刮鬍子一樣:一個微小的錯誤,到處都是血和牙齒。也許,如果我真的可以在頭,裁判,犯,分支,幹,gnargel和whizpoo之間做出確切的區分,其中一些可能會更簡單一些,但對於只有10年的普通人來說SVN,Perforce和RCS的體驗,它們看起來都像是一種胡思亂想的黑魔法。撤消壞拉

現在由於某種原因,git pull從來沒有爲我工作。到目前爲止,我收到一條10行錯誤消息,與「錯誤」一樣有用。使用谷歌搜索錯誤信息產生了一系列廣泛的建議,這些建議的共同之處在於它們沒有任何明顯的影響。但是,這不是今天的問題:我已經習慣於輸入git pull origin branch

今天,我在兩個分支之間來回翻轉,「主人」和「休息室」之間,當時我在主分支。我想從遠程存儲庫獲取最新的更改到本地,但我輸錯了。我沒有寫git pull origin master,而是寫了git pull origin lounge,然後毫不猶豫地輸入了正確的命令。

有沒有第一(壞)拉日誌,只有兩個從主合併的證據:

commit 0c6be9569bab0581244ea8603bf2edfee82cdd7b 
Merge: 43fdec5... db09f0d... 
Author: Malvolio <[email protected]> 
Date: Wed Nov 24 20:38:58 2010 -0500 

Merge branch 'master' of github.com:xcompanyx/xRepositoryX 

commit db09f0d79d744d6a354142041b47ff5d748999f3 
Merge: 81b6c3d... fc73e25... 
Author: Malvolio <[email protected]> 
Date: Wed Nov 24 17:38:16 2010 -0800 

Merge branch 'master' of github.com:xcompanyx/xRepositoryX 

commit 81b6c3d04b7c464f8750a56282635526a5ef83a1 
Author: Michael <[email protected]> 
Date: Wed Nov 24 17:38:07 2010 -0800 
    the last commit I did 

但是文件在休息室分支新創建的是有我的資料庫。

所以現在我被fscked了吧?我是否應該只需要對我的倉庫進行處理,再次克隆遠程控制器,手動重新應用所有未經修改的更改,然後將其記錄爲Git吮吸,或者是否有一些咒語可以讓我更好記?如果我犧牲一隻山羊會有幫助嗎?

+15

@Robert - 但後來我不會得到這麼好笑。 – 2010-11-25 02:10:39

+0

而對於最初的問題,我決定嘗試一下這樣的可能性,當它說「合併分支'主''它真的意味着'合併[一些未知的和未命名的]分支[與當前分支,你知道,命名爲'主''「。我試着重新回到81b6。這似乎工作(雖然,奇怪的是,從原點檢索一些文件的下一個拉來改變很多),但與Git的所有事情一樣,我必須穿過我的手指。 – Malvolio 2010-11-25 02:30:03

回答

36

使用git reflog來查看你的HEAD在你搞砸之前指出了什麼。

你應該看到:

48ab8d [email protected]{0}: pull: Fast-forward 
a34bda [email protected]{5}: commit: my last commit message 

現在,在點你的主分支回犯壞之前拉:

git reset --hard a34bda

完成。就像它從未發生過。

6

我不能完全理解你的問題的歷史,但總的來說,如果你進行兩次合併(拉是一個合併),刪除其中一個是完全簡單的。

- o - o - o - A - M1 - M2 (master) 
       //
     - o - o - o / (origin/lounge) 
        /
      - o - o (origin/master) 

最明顯的方法:

git checkout master 
git reset --hard A 
git merge origin/master 

這將使用你的本地緩存的起源的主版本,如果要合併的任何時候會再有現在,使用git pull origin master