2011-03-30 73 views
133

我的確從一個共享的git倉庫一個git pull,但出事真的錯了,我嘗試了git revert後。這裏是現在的情況:致命:混帳寫樹:錯誤建築樹

$ git stash 
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge 
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge 
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge 
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge 
Utilities/socketxx/socket++/sockstream.cpp: needs merge 
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge 
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge 
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge 
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge 
Utilities/socketxx/socket++/sockstream.cpp: needs merge 
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2aafac967c35fa4e77c3086b83a3c102939ad168) 
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (78cc95e8bae85bf8345a7793676e878e83df167b) 
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2524db713fbde0d7ebd86bfe2afc4b4d7d48db33) 
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4bb4ba78973091eaa854b03c6ce24e8f4af9e7cc) 
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (ad0982b8b8b4c4fef23e69bbb639ca6d0cd98dd8) 
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4868371b7218c6e007fb6c582ad4ab226167a80a) 
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (f7a1b386b5b13b8fa8b6a31ce1258d2d5e5b13c5) 
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (6ce299c416fbb3bb60e11ef1e54962ffd3449a4c) 
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (75c8043a60a56a1130a34cdbd91d130bc9343c1c) 
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: unmerged (79c2843f2649ea9c87fa57662dafd899a5fa39ee) 
... 
fatal: git-write-tree: error building trees 
Cannot save the current index state 

有沒有辦法重置所有這一切?

感謝

回答

417

用途:

git reset --mixed

,而不是git reset --hard。你不會失去任何改變。

+5

這個答案應該得到更多upvotes! – 2013-04-30 08:42:24

+0

是肯定它的更多相關 – 2013-07-04 10:06:29

+1

真棒!我不知道--mixed – 2013-08-16 21:45:43

8

我用:

git reset --hard 

我失去了一些變化,但這是好的。

+6

剛一說明:['git的revert'(http://www.kernel.org/pub/software/scm/git/docs/git-revert.html)嘗試合併從過去的變化;你已經正確使用'git reset'來簡單地倒回時鐘。不幸的是,'git stash'不兼容合併衝突。 – 2011-03-30 12:33:33

+0

感謝您的解釋! OMG! – malat 2011-03-30 16:02:30

+0

OMG!有效。剛剛發生了什麼? ;) – nopper 2014-10-14 15:56:02

4

也許有你的git倉庫,你必須藏起來之前解決一些未合併的路徑。

+1

這幫了我,所以我會給它一個+1。但是我提出了更多的擴展答案。 – 2014-03-28 19:38:43

9

要跟進馬拉特的反應,就可以避免通過創建一個補丁,並在以後的時間重新失去它的變化。

git diff --no-prefix > patch.txt 
patch -p0 < patch.txt 

爲了安全起見,您將存儲在存儲庫文件夾之外。

+0

這給了我:SDGL132d9f4b4:故障常見dstromberg $補丁-p0 dstromberg 2015-04-07 18:11:01

+0

我認爲你應該把補丁'mv'再次放回到你創建它的目錄中。 1.'git diff' 2.'mv patch.txt/tmp'3。 'git的stash' 4.'MV /tmp/patch.txt .' 5.'補丁-p0' – HerrSerker 2016-06-16 08:21:48

20

這爲我工作:

$ git status 

並檢查是否有Unmerged paths

# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add <file>..." to mark resolution) 
# 
# both modified:  app/assets/images/logo.png 
# both modified:  app/models/laundry.rb 

解決他們git add他們每個人,並再次嘗試git stash

git add app/assets/images/logo.png 
+3

這對我有用。混帳可能比世界和平更好,但沒有一些解釋它的作用,我沒有觸及它。在我的情況下,我沒有注意到前一次拉的碰撞。儲藏失敗是因爲未解決的問題。 – 2016-11-08 01:16:22

+0

我不明白這個策略比'git reset --mixed'更好,但它工作,似乎更適合我的情況,因爲我在'git stash'而不是'git revert'之後得到錯誤。 – Mars 2017-12-24 19:38:11