Я хочу знать, что происходит. Я создал файл HTML и поместил в него несколько строк
this is first line
this is second line
this is third line
this is fourth line
и фиксируются после каждой строки, например, commit a, commit b, commit c, commit d соответственно.
Теперь я выполнил возврат к фиксации c, но он выдает ошибку:
could not revert 82b69e5... c
hint: after resolving the conflicts, mark the corrected paths <br>
hint: with 'git add <paths>' or 'git rm <paths>' <br>
hint: and commit the result with 'git commit'<br>
Я хочу знать, как работает git-revert. Я знаю что-то вроде «отменяет фиксацию и добавляет новую фиксацию», но не знаю, как ее успешно использовать.
Как и в ответе здесь, git revert
«отменяет» изменения, внесенные одной фиксацией, путем создания другой фиксации, которая удаляет эти изменения. Если исходная фиксация добавила строку, обратная фиксация удалит эту строку. Если исходная фиксация удалила строку, обратная фиксация вернет ее. Если исходная фиксация изменяет строку, возврат попытается отменить эти изменения.
Причина, по которой вы получили сообщение об ошибке, заключается в конфликте, изменения, внесенные коммитом c
, слишком близки к изменениям, внесенным в другие коммиты, и, таким образом, git защищает, прося вас «разрешить конфликт», по сути выяснить, что правильный результат должен быть.
@LasseVågsætherKarlsen ваше предложение сработало для меня, возможно, я не оставлял много места.
Он создает инвертирующий патч для коммита, который вы хотите отменить, поэтому в вашем случае коммит c
выглядел так:
this is first line
this is second line
+this is third line
# End of file
Затем из d
вы запускаете git revert c
, поэтому он пытается создать следующее и применить его к вашему дереву:
this is first line
this is second line
-this is third line
# End of file
Однако ваш файл выглядит так:
this is first line
this is second line
this is third line
this is fourth line
# End of file
Таким образом, созданный патч не применяется (конфликт конца файла и четвертой строки). Итак, когда Git говорит вам:
could not revert 82b69e5... c
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add ' or 'git rm '
hint: and commit the result with 'git commit'
Это означает «Я пытался сделать то, что вы просили, но я столкнулся с делом, которое не могу решить», поэтому вам нужно:
git revert --quit
Скорее всего, ваше решение будет таким:
this is first line
this is second line
this is fourth line
Наличие конфликта не является проблемой само по себе. Это совершенно нормально, когда два изменения происходят в одном и том же месте. Отвечает ли это, однако, на ваш вопрос о том, как работает git revert
?
да, у меня возникли трудности с разрешением конфликта слияния. Я исправил конфликт, а затем после этого использовал git revert --continue. Это решило мою проблему
Команду git revert можно рассматривать как команду типа «отменить», однако это не традиционная операция отмены.
По сути, он отменяет все, что было сделано в указанном коммите, а затем создает новый коммит в процессе. Вы можете проверить это для получения дополнительной информации.
И что касается вашей проблемы, вы получаете конфликты слияния. Для устранения этих конфликтов вы можете использовать git mergetools (например, Meld).
Я почти уверен, что здесь, в Stack Overflow, есть дубликаты, которые уже отвечают на этот вопрос.