Как отменить и go предыдущий этап перед коммитом - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок в системе контроля версий (git). Я сделал ошибку, и когда понял, что это случилось, уже слишком поздно. что я сделал

(1) commit current work 
(2) git pull --rebase origin master

Затем я go для предыдущего коммита, используя

(3) git checkout 858223adcac47288c44c4c07fbc3938773d778b8

Теперь мне нужно go предыдущего этапа (1), прежде чем зафиксировать. И я действительно не знаю, как go там. Это значит, что я хочу go моего мастера и отменить ребаз .
От всего сердца благодарю, если кто-нибудь скажет мне, как это сделать.

1 Ответ

1 голос
/ 01 апреля 2020

git сохраняет историю refs (читай branches) в основном для этого вида сценария ios, когда вы хотите получить коммит, который больше не доступен ни из одного из текущих refs.

Если не прошло достаточно времени или вы явно не указали reflog записей, срок действия которых истекает, и сборщик мусора может получить историю, выдав git reflog <branch> вывод изменений в ветвь в форме <sha> <action description leading to changing value of branch>, начиная с самой последней.

Найдите тот, к которому вы хотите вернуться (вероятно, тот, который был до упомянутого вами коммита), исследуя:

git reflog master

Проверьте это, чтобы дважды проверить содержимое:

git checkout <sha>

Переход к мастеру и reset мастер к этому коммиту (осторожно, если hard reset потенциально опасен / проблематичен при неправильном использовании):

git checkout master

git reset --hard <sha>


Некоторые примечания:

Как git-rebase работает. Это поможет понять, как no longer reachable может возникнуть во время rebase https://git-scm.com/book/en/v2/Git-Branching-Rebasing

Также возможно создать еще один коммит поверх rebased коммита, который эффективно отменяет вытянутую часть , но это менее практично и отмечено только для полноты.

...