2012-03-12 73 views
3

我只是做了一些愚蠢的事情。在我fooclient項目,我只是做:如何從無關項目中撤消git pull?

git remote add official https://github.com/fooserver 
git pull official master 

換句話說,我把一個完全不同的代碼庫(服務器,而不是客戶端)到我的工作目錄。毫不奇怪,合併衝突並不多(文件名畢竟是完全不同的)。同樣毫不奇怪的是,Git完全沒有提醒我,回購沒有一個共同的祖先。

在這種特定情況下,我能夠通過這樣做來恢復:

cp file-i-worked-on.js ~ 
git reset --hard HEAD # to discard broken merge conflicts 
git checkout a12345 # where a12345 is the latest head of fooclient that I had checked out 
cp ~/file-i-worked-on.js . 

但是這將是更普遍的策略是什麼?

回答

4

這將重置到最後狀態主人是:

git reset --hard [email protected]{1} 

這是可能的,因爲reflog的。運行git reflog會顯示reflog,並允許您驗證您是否重置爲正確的狀態。

+0

啊 - 這聽起來像是正確的答案。因此,HEAD @ {...}可讓您跟蹤HEAD所指向的更改。因此,你的命令轉化爲「你知道HEAD在我們搞砸之前指出了什麼?讓我們回到那裏......」 - 聽起來像是一個非常有用的工具。 – 2012-03-12 03:08:41

+0

@SteveBennett是!這是非常有用的,因爲它使撤銷意外命令比試圖回溯你所做的更容易。可悲的是,它不是Git非常有名的功能。 – 2012-03-12 03:10:33

0

刪除不需要的遠程(git remote rm ...)後,只需git reset --hard即可將您的當前分支打開。

git reset --hard origin/master 

如果您之前是在master,這將重置您的master是同一個點,你的出身遠程的主人是它。而已!

+0

只是想要說明的是,這裏假定你沒有任何未完成的本地提交。 – 2012-03-12 01:14:36

0
git stash 
git reset --hard HEAD^ 
git stash apply 
+0

不會git存儲也藏匿半合併文件? – 2012-03-12 01:14:19

+0

@SteveBennett:是的你說得對,我沒有閱讀關於合併衝突仍然存在的部分。 – wintersolutions 2012-03-12 01:15:35

0

從現在起

git fetch 

檢查你在gitk或git的日誌或其他任何東西了。現在合併或重新設定您所到達的位置。

+2

你是說你永遠不會使用git pull嗎? – 2012-03-12 03:05:21

+0

正確。我曾經。我現在不在了。 – 2012-03-12 22:34:54