2016-01-24 42 views
1

所以我一直試圖恢復到我的項目的以前版本。但是當我執行git還原時,我不斷收到合併衝突。爲什麼這是有道理的?我的意思是「我想恢復到之前的版本,就像現在一樣」,現在它說我需要保留一些當前的代碼。不,我不想要它,我搞砸了我的項目,並認爲這個早期版本沒有搞砸。我知道我應該能夠解決這些問題,但是我之前從未做過大規模的合併衝突,並且我不瞭解很多這種Xcode代碼。爲什麼我在恢復時遇到git合併衝突?

此外,如果我恢復提交,我會提交之前或之後提交?例如...

提交A,提交B,提交C,D.提交

我回復提交B.我在哪裏去了?在A之後,還是在B之後?

$ git revert 8873550de2b6c4bec42cfec4e98600736f01ffb9 
error: could not revert 8873550... Grid view 
hint: after resolving the conflicts, mark the corrected paths 
hint: with 'git add <paths>' or 'git rm <paths>' 
hint: and commit the result with 'git commit' 
+2

'git revert'!='git checkout'。請參閱http://stackoverflow.com/questions/8358035/whats-the-difference-between-git-revert-checkout-and-reset – Jubobs

+0

...或參閱[克里斯的回答](http://stackoverflow.com/a/34978213/2541573)。 – Jubobs

+0

[瞭解Git for Visual Studio 2015:恢復]的可能重複(http://stackoverflow.com/questions/33222674/understanding-git-for-visual-studio-2015-revert) –

回答

4

我說: 「我想恢復在此之前的版本,正是因爲它當時」

其實,you're not

由於一個或多個現有提交,恢復相關修補程序引入的更改,並記錄一些記錄它們的新提交。

鑑於這種簡單的歷史,

D [master] 
| 
C 
| 
B 
| 
A 

git revert B生成有關的D頂部的新承諾是逆轉(見下面的例子)在B引入的變化。如果在C中引入的更改與此新提交衝突,則會發生衝突。

如果我回復一個承諾,做我去之前或之後提交

都不是。你會最終像

E [master] 
| 
D 
| 
C 
| 
B 
| 
A 

其中E的變化反向C的變化。

如果你想「回到過去」以B你可以使用git checkout B(這將導致一個detached head,如果你想從這一點新的變化一般是無益的),你可以使用git resetmaster移回B,使得CD有資格進行垃圾回收,或者您可以使用git branchB處創建新的分支。

隨着你的問題中的信息,我不能告訴你想要這些。