2016-01-24 5 views
1

Итак, я пытался вернуться к предыдущей версии моего проекта. Но я продолжаю получать конфликты слияния, когда я делаю git revert. Почему это имеет смысл? Я говорю: «Я хочу вернуться к этой предыдущей версии, точно так же, как это было тогда», и теперь он говорит, что мне нужно сохранить часть текущего кода. Нет, я не хочу этого, я каким-то образом напортачил и подумал, что эта ранняя версия не была испорчена. Я знаю, что я должен просто решить эти проблемы, но я никогда не делал серьезных конфликтов слияния раньше, и я не очень разбираюсь в этом коде Xcode.Почему я запускаю конфликты с git-слиянием, когда я возвращаюсь?

Кроме того, если я вернусь к фиксации, я иду ПЕРЕД или ПОСЛЕ фиксации? Например ...

Commit A, B Commit, Зафиксировать C, Зафиксировать D.

я вернуться Commit 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 для 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 's изменения обратного C' s изменения.

Если вы хотите, чтобы «вернуться в прошлое», чтобы B вы можете использовать git checkout B (что приведет к detached head, что в целом не является полезным, если вы хотите, чтобы сделать новые изменения с этой точки), вы можете использовать git reset двигаться master спины к B, что делает C и D прав для сбора мусора, или вы можете использовать git branch создать ветку нового в B.

С информацией в вашем вопросе я не могу сказать, какой из них вы хотите.

Смежные вопросы