git reset --hard ошибка после отмены git rebase: предупреждение: журнал для ref HEAD неожиданно завершился в DD / MM / YYY TTTT - PullRequest
0 голосов
/ 05 июня 2018

есть ли способ вернуть или восстановить операцию git rebase после --abort ее выполнения?

Я сделал git rebase --abort после следующего вывода из базы:

On branch feature/cool-feature-x
Last commands done (20 commands done):
   pick bd4c3q commitA
   pick e53wr1 commitB
  (see more in file .git/rebase-merge/done)
Next commands to do (7 remaining commands):
   pick ws5b4 update
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'feature/cool-feature-x' on 'as34y5'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

git log: дает мне более старый коммит, как и ожидалось.Скажем, последний коммит, т.е. last-working-commit git reflog имеет всю историю, как и ожидалось.Я хочу использовать HEAD{2}

git reset --hard HEAD{2} до последнего изменения, которое я сделал, дает мне следующее:

warning: Log for ref HEAD unexpectedly ended on Sun, 5 Jun 2018 16:15:19 
+0300 (last time I made the changes before `git rebase --abort`)

Однако last-working-commit остается тем же.и каждый раз, когда я запускаю одну и ту же команду, я получаю несколько last-working-commit в журнале

reference Вопросы: Отмена git rebase

Git: как отменитьобъединить во время перебазировки

РЕДАКТИРОВАТЬ:

git reset, казалось, работал даже после предупреждения.каждый раз он создавал один и тот же последний коммит, но после переключения обратно на ветку, которую я изначально включил rebase, HEAD фактически был сброшен, как я хотел.Я не знаю, почему он так себя вел, и было то предупреждение.

1 Ответ

0 голосов
/ 05 июня 2018

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

Оно (предупреждающее сообщение "warning: Log for ref HEAD unexpectedly ended on...") приходит от refs.c#write_pseudoref()

Здесь проверено :

test_expect_success 'Query "master@{2005-05-28}" (past end of history)' '
    test_when_finished "rm -f o e" &&
    git rev-parse --verify "master@{2005-05-28}" >o 2>e &&
    test $D = $(cat o) &&
    test "warning: Log for ref $m unexpectedly ended on $ld." = "$(cat e)"

Это означает, что в какой-то момент Git проверяет журнал HEAD во время сброса и считает, что указанный журнал "после концаистория (сброса) предыдущей ветки, на которую она ссылается.
После завершения сброса я ожидаю, что журнал git снова станет связным (с новым «концом истории»)

...