Почему я не могу откатиться до точки, когда я использую Revert в Github в Android Studio 3.3.1? - PullRequest
0 голосов
/ 02 марта 2019

Я фиксирую и отправляю свой код три раза, это «Отправить 1», «Отправить 2» и «Отправить 3».

Я надеюсь откатить свой код до точки «Отправить 2» и отправить их в удаленный репозиторий.

Поэтому я выполняю операцию «Отменить» в точке «Отправить 2» (см. Изображение «Выполнить возврат» ), отображается диалоговое окно «Файлы, объединенные с конфликтами» (см. Изображение Файлы, объединенные ), иДочернее диалоговое окно слияния отображается точно так же, как изображение Дитя слияния .

A: Я не могу понять, почему при выполнении операции возврата выполняется следующий код?Кажется, что система готовит все записи фиксации истории, чтобы позволить мне объединиться.

Код

<<<<<<< HEAD
//Submit 3
=======
//Submit 1
>>>>>>> parent of 86821fc... Submit 2

B: И еще, я не могу получить правильный результат(откат моего кода до пункта «Отправить 2»), независимо от того, выбираю ли я команду «Принять ваш», «Принять их» или «Объединить ...», почему?

C: Что будет делать система, если я запущу операцию «Объединить ...»?

Отправить 1 enter image description here

Отправить 2 enter image description here

Отправить 3 enter image description here

Вернуть enter image description here

Объединенные файлы enter image description here

Дитя слияния enter image description here

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Понял, что это кажется вопросом рядом с Чем отличается команда Revert во всплывающем меню, git-меню и Показать историю в Android Studio 3.3? , я не уверен, что у меня что-то не так с моимОтвет там.

A: Я не могу понять, почему следующий код отображается, когда я выполняю операцию возврата?Кажется, что система готовит все записи фиксации истории, чтобы позволить мне слиться.

Это называется Конфликт слияния .Это происходит, когда собираются два коммита, но они обнаружили, что редактируют одно и то же место с другой идеей, что делает Git неспособным решить, какой из них оставить.Затем Git сохраняет их оба, показанные в формате:

<<<<<<< Branch1
Content A
=======
Content B
>>>>>>> Branch2

и позволяет вам вручную решить, какой из них сохранить.

B: И еще, я не могу получитьправильный результат (откат моего кода до точки «Отправить 2»), независимо от того, выбираю ли я команду «Принять ваш», «Принять их» или «Объединить ...», почему?Я собираюсь изменить его позже.

Если вы хотите вернуть репозиторий ко времени, когда вы сделали Submit 2, вы должны выбрать дочерний коммит Submit 2, который является Submit 3 в вашем случае, затем использовать«Их» объединить.

Зачем отправлять 3?Это потому, что Revert «Создать новый коммит, который отменяет изменения, сделанные в оригинальном коммите», затем, когда вы вернете Submit 3, он очистит то, что вы сделали после (и включили) Submit 3, что простокак выглядит хранилище, когда вы сделали Submit 2.

Почему "Theirs"?Здесь, если вы выберете «Отправить 2», то фиксация будет на «Отправить 2», «Наши изменения» - «Отправить 3» (что мы сделали после «Отправить 2»), а «Их изменения» - «Отправить 1» (почему?) что мы сделали в Submit 2, то хранилище становится таким, как выглядит до Submit 2, то есть Submit 1).

Почему конфликт?Отправить 3 и Отправить 1 изменили одну и ту же строку с другой идеей, затем возник конфликт.

... Подождите, пока я тестирую, я думаю, что обнаружил ошибку Local Changes или Changelist в IntelliJ IDEA ... Да, об этом много раз сообщалось, с другим способом воспроизведения, например IDEA-124412 , IDEA-67036 и IDEA-20326, файл, измененный дважды другим способом, показывается в списке изменений, что вторая модификация отменила первую модификацию.

C: Что будет делать система, если я запусту Merge ...операция?

Когда вы нажимаете Merge..., вы можете увидеть окно, показанное на последнем рисунке вашего вопроса.Это окно позволяет вам выполнять интерактивное слияние.Рядом с номерами строк, которые имеют конфликт по обеим сторонам окна, отображается значок «X» и «>>» или «<<».Нажатие «X» означает, что вы отклоняете этот кусок кода на той стороне, нажатие «>>» или «<<» означает, что вы принимаете этот кусок кода на этой стороне.После этого вы все еще можете редактировать средний «Результат». </p>

0 голосов
/ 02 марта 2019

1) Почему это произошло?

Вы перепутали revert и reset здесь.

Сброс возвращает текущую ветвь к предыдущему пункту в истории коммитов.

Возврат конкретный коммит создает новый, содержащий точный реверс тоговы выбрали не не изменяет старый коммит и не возвращает вас к этому прошлому пункту.

Это также то, почему вы получили слияние, которое вы не ожидали.


2) Как исправить ситуацию под рукой?

Теперь попробуйте выполнить сброс до точки до всего этого беспорядка, и все должно быть в порядке снова.

Сначалавсе, если слияние все еще продолжается, прервите его

git merge --abort

Затем проверьте ваш log и определите коммит, к которому вы изначально хотели "вернуться" (и я предлагаю изменить ваше разговорное использование этого термина здеськак будто вы видели, что это больно) и сброс это:

git reset --hard <commitHash>

(Так как вы (я полагаю?) еще не перешли на пульт, никакого вреда ожидать не стоит.Если на самом деле что-то толкнуло во время процесса, прокомментируйте, и я отредактирую свой ответ, чтобы исправить это.)


3) Как избежать той же проблемыв будущем?

Посмотрите на скриншот с именем "Do revert", в этом вы должны были выбрать just выше «Сбросить текущую ветвь сюда», а не «Вернуть».

...