Подтвердить что ты не робот

Git rebase - continue и --stepback?

Есть ли способ отменить коммит во время интерактивной перебазировки?

4b9b3361

Ответ 1

Да, есть. Как сделать шаг назад во время интерактивной перебазировки:

  1. Получите хеш коммита вашей текущей HEAD, например, с помощью git rev-parse HEAD
  2. запустить git rebase --edit-todo
  3. вставить пик с этим хешем в начало этого файла pick <hash from step 1>
  4. запустить git reset --hard HEAD^

Теперь вы все еще находитесь в ребазе, но вернули один коммит, и вы можете продолжить ребазинг с помощью

  1. git rebase --continue.

Если вы не хотите, чтобы отмененный коммит был получен без изменений, вы можете добавить edit <HASH> вместо pick <HASH> в список задач (шаг 3).

Приложение: Вы можете запомнить больше хешей, сбросить их до более ранней точки и добавить несколько пиков, чтобы повторить более одного коммита.

Объясняется более четко здесь: http://arigrant.com/blog/2014/5/4/git-rebase-stepping-forward-and-back

Ответ 2

Нет, как сказал Магнус.

Однако

  • git -rerere может приблизиться к тому, что вы хотите в некотором роде: если бы были предыдущие разрешения на разрешение вручную, которые вы не хотели потерять, вы можете включить rerere (предварительно записанные разрешения конфликтов), чтобы они автоматически разрешается таким же образом при последующих слияниях. Обратите внимание, что это означает, что вам нужно будет помнить, какую часть вы хотите решить по-разному в следующий раз (предположительно, цель состоит в отступлении в первую очередь?), Потому что - ну, reerre предполагает, что вы хотите применить такое же разрешение снова.

Если вы посмотрите на реализацию rebase, вы можете найти альтернативные настройки для GIT_WORK_TREE/GIT_DIR/GIT_INDEX; Затем вы могли бы использовать команды сантехники с рефлогом для перепродажи branch

  • это глубоко погружает вас в недокументированные внутренности (за пределами сантехники).
  • вы можете просто предложить патч для rebase, который реализует --step-back

Ответ 3

Нет. Вы можете - продолжать продолжать перезагрузку (например, после того, как вы разрешили какой-либо конфликт), --bort (отменить и весь процесс переадресации) или --skip пропустить текущий патч.

Ответ 4

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

Как упомянул в своем комментарии johnb003, при перебазировании вы действительно делаете серию новых коммитов. Делая что-то вроде git log --pretty=oneline --abbrev-commit, вы можете легко увидеть все коммиты, которые вы уже сделали через ребаз. Просто скопируйте их хеши для последующего использования.

Затем git rebase --abort, git rebase -i <base_branch>, скопируйте хеши, которые вы хотите сохранить, возможно, измените их на edit, если вы хотите изменить любой из них ', и продолжайте