Я запутался в том, как работает git revert

Я хочу знать, что происходит. Я создал файл 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. Я знаю что-то вроде «отменяет фиксацию и добавляет новую фиксацию», но не знаю, как ее успешно использовать.

Я почти уверен, что здесь, в Stack Overflow, есть дубликаты, которые уже отвечают на этот вопрос.

Lasse V. Karlsen 10.04.2019 10:16

Как и в ответе здесь, git revert «отменяет» изменения, внесенные одной фиксацией, путем создания другой фиксации, которая удаляет эти изменения. Если исходная фиксация добавила строку, обратная фиксация удалит эту строку. Если исходная фиксация удалила строку, обратная фиксация вернет ее. Если исходная фиксация изменяет строку, возврат попытается отменить эти изменения.

Lasse V. Karlsen 10.04.2019 10:17

Причина, по которой вы получили сообщение об ошибке, заключается в конфликте, изменения, внесенные коммитом c, слишком близки к изменениям, внесенным в другие коммиты, и, таким образом, git защищает, прося вас «разрешить конфликт», по сути выяснить, что правильный результат должен быть.

Lasse V. Karlsen 10.04.2019 10:17

@LasseVågsætherKarlsen ваше предложение сработало для меня, возможно, я не оставлял много места.

Prashant Singh 10.04.2019 10:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
261
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Он создает инвертирующий патч для коммита, который вы хотите отменить, поэтому в вашем случае коммит 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'

Это означает «Я пытался сделать то, что вы просили, но я столкнулся с делом, которое не могу решить», поэтому вам нужно:

Скорее всего, ваше решение будет таким:

this is first line
this is second line
this is fourth line

Наличие конфликта не является проблемой само по себе. Это совершенно нормально, когда два изменения происходят в одном и том же месте. Отвечает ли это, однако, на ваш вопрос о том, как работает git revert?

padawin 10.04.2019 12:57

да, у меня возникли трудности с разрешением конфликта слияния. Я исправил конфликт, а затем после этого использовал git revert --continue. Это решило мою проблему

Prashant Singh 10.04.2019 18:16

Команду git revert можно рассматривать как команду типа «отменить», однако это не традиционная операция отмены.

По сути, он отменяет все, что было сделано в указанном коммите, а затем создает новый коммит в процессе. Вы можете проверить это для получения дополнительной информации.

И что касается вашей проблемы, вы получаете конфликты слияния. Для устранения этих конфликтов вы можете использовать git mergetools (например, Meld).

Другие вопросы по теме