Как решить конфликт возврата фиксации

Я пытаюсь научиться использовать Git и GitHub. Я сделал простой html-файл и пытаюсь отменить некоторые изменения.

Я использую приложение GitHub для Windows, а репозиторий находится здесь: https://github.com/ionutincau/Ceau

Мои последние 2 коммита: «Добавить 13 в список» и «Добавить учетные записи в список». Я хочу отменить фиксацию «Добавить 13 в список», но получаю этот файл:

<!DOCTYPE html>
<html>

<head>
    <title>Hi</title>
</head>

<body>
    <p>Hi, this is my first version</p>
    <p>TODO List:</p>
    <p>- Pictures</p>
<<<<<<< HEAD
    <p>- 13</p>
    <p>- Accounts</p>
=======
>>>>>>> parent of 76f0f70... Add 13 to list
</body>

</html>

Что я должен сделать? Как это работает?


person WhiteShadow    schedule 18.11.2016    source источник


Ответы (4)


Это простой конфликт. Если бы вы не добавили строку accounts, Git понял бы, что восстановление 76f0f70 — это просто удаление строки 13. Но теперь он попадает в строку accounts и говорит: «Эй, я не знаю, как отменить изменения с 76f0f70. Я отметил проблемную часть в файле, вы можете помочь мне вручную?»

Итак, вы открываете файл, удаляете ненужную строку 13 и все маркеры, вставленные Git:

<body>
    <p>Salutare aceasta este prima versiune</p>
    <p>TODO List:</p>
    <p>- Poze</p>
    <p>- Accounts</p>
</body>

</html>

Теперь вы можете пометить конфликт разрешенным, запустив git add index.html и зафиксировав его. Теперь история будет:

$ git log --pretty=oneline --abbrev-commit | head -n 3
02933f8 Revert "Add 13 to list"
d4b2377 Add Account
76f0f70 Add 13 to list

И обратная фиксация выглядит так:

$ git show --oneline 02933f8
02933f8 Revert "Add 13 to list"
diff --git a/index.html b/index.html
index 9f99341..6bec1cf 100644
--- a/index.html
+++ b/index.html
@@ -9,8 +9,7 @@
        <p>Salutare aceasta este prima versiune</p>
        <p>TODO List:</p>
        <p>- Poze</p>
-       <p>- 13</p>
        <p>- Accounts</p>
 </body>

Конечно, в этом случае было бы проще не заморачиваться и просто удалить ненужную строку, не используя git revert.

person zoul    schedule 18.11.2016

Я просмотрел вашу историю коммитов. Чтобы удалить свой коммит «Добавить 13 в список», прежде всего, вы должны взяться за коммит «Рефакторинг».

git reset --hard 8816fb
git cherry-pick d4b2377
git push origin HEAD --force

Первая команда приведет вас к «Рефакторингу».

Вторая команда выберет ваш «Добавить учетные записи в список» для управления

Наконец, вам нужно нажать --force, потому что вы сбрасываете головку.

Если у вас есть какие-либо вопросы или я неправильно понимаю ваш вопрос, дайте мне знать

person DilumN    schedule 18.11.2016
comment
Однако это не возврат. - person zoul; 18.11.2016
comment
Я думал, он просит удалить Add 13 to list commit. - person DilumN; 18.11.2016
comment
Возврат коммита отличается от его удаления. Возврат не изменяет существующую историю, он записывает новую фиксацию, которая отменяет нежелательные изменения. - person zoul; 18.11.2016
comment
Я хочу отменить коммит, а не удалить его - person WhiteShadow; 18.11.2016
comment
Но я не понимаю, почему он это делает, это простой коммит, он не должен конфликтовать в первую очередь - person WhiteShadow; 18.11.2016

Если ваши измененные строки в двух коммитах являются соседними, возникнет конфликт возврата. Но если ваши строки изменения выглядят следующим образом:

<body>
    <p>Hi, this is my first version</p>
    <p>TODO List:</p>
    <p>- Pictures</p>
    <p>- 13</p>
    something
    <p>- Accounts</p>
</body>

вы возвращаетесь и нет конфликта. Причина: Конфликт при попытке возврата в Git

person 李其琛    schedule 19.12.2016

Позвольте мне показать вам основную причину: «перевод строки, новая строка, br»

первый раз, когда вы вводите <p>- 13</p> |(курсор есть)

во второй раз, когда вы вводите (<p>- Accounts</p>), git на самом деле думает, что вы удаляете <p>- 13</p> и добавляете новый <p>- 13</p>, поэтому во второй раз вы просто фиксируете этот контент:

<p>- 13</p>
<p>- Accounts</p>

когда вы отменяете первую фиксацию, git сгенерирует новую фиксацию «отменить фиксацию». Существует конфликт между второй фиксацией и «откатной фиксацией».

решение A На самом деле, для этого сценария нет необходимости использовать команду возврата, просто удалите ее вручную решение B следуйте zoul answer

git revert: почему возникают конфликты? git revert: почему у меня возникают конфликты?

person frank_liu    schedule 09.01.2020