2011-02-24 21 views
3

我在主分支上,並且運行git checkout -b ui。難道噸,工作了一個多星期的過程中,在其中我跑結束:檢出另一個分支後,找不到在Git分支中完成的工作

git add . 
git commit -am 'ui' 

git checkout master 
git merge ui 
git push 

我然後切換到我的previously- git checkout uploads工作的一個分支 - 在這一點我在做每一件事情用戶分支丟失了。它沒有在git log中列出,而git reset --hard HEAD^將我帶回「ui」分支之前的分支。這是如何發生的?

通過查看reflog並恢復到'ui'提交,我能夠恢復大部分內容,但我不知道是什麼原因導致了這種情況發生?

回答

7

它並沒有丟失,它只是當你在git中切換分支時(使用git checkout),你的工作樹被完全更改爲具有該分支上的文件。如果你運行:

git branch 

...你應該看到masteruiuploads所有上市。

如果你想看到的日誌中ui分支,你應該運行:

git log ui 

之所以git reset --hard HEAD^感動你回到提交上master你合併ui是您的合併提交之前(其中master在)有兩個家長:

  1. master鏈節之前合併
  2. ui前GE

當你添加一個^以提交名字,帶您回到第一父 - 指第二父母,你會用HEAD^2。不過,我想你並不是真的想在git reset --hard這裏改變master的位置。 (無論如何,這是一個應謹慎使用的命令,因爲它會丟棄未提交的更改。)

無論如何,您在ui分支上所做的所有更改現在合併爲master,所以如果你對你在那裏所做的事情感到滿意,那麼你不應該再擔心ui分支。 Greg Hewgill的回答暗示了一些行動方案,如果你現在想要的是確保你的uploads分支包含所有這些工作。

+0

哦,那是有道理的。當我重新加載一個文件並且所有的增加都沒有了的時候,這種感覺嚇壞了。我並不期待它,因爲我對git很陌生。謝謝 – aperture 2011-02-24 07:59:11

+0

@aperture:事實上,當你第一次看到你的工作樹在「git checkout」之後完全改變時,最令人驚訝 - 如果你在一個倉庫中工作,那裏的人完全** **完全**不同的工作樹同一個存儲庫的不同分支:)作爲一個更一般的觀點,一旦在git中提交了更改,就會讓你很難失去它們,所以經常進行定期的操作是很好的做法。 – 2011-02-24 08:07:57

3

您所描述的一切都與預期一致。當您切換到uploads分支時,您看到您在ui分支上的工作沒有出現,這聽起來很讓人驚訝。這很有道理,因爲在創建uploadsui的工作並不存在。您可以在這裏兩種方法:

  1. 合併masteruploadsgit merge master
  2. 再次基於uploadsmastergit rebase master

這兩個命令將在uploads分支運行。

相關問題