git rebase --continue и --stepback? - PullRequest
29 голосов
/ 02 мая 2011

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

Ответы [ 4 ]

22 голосов
/ 11 сентября 2015

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

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

Теперь вы все еще в ребазе, но один коммит назад, и вы можете продолжить ребаз с git rebase --continue. Если вы не хотите, чтобы отмененный коммит был поднят без изменений, вы можете добавить edit <HASH> вместо pick <HASH> в список задач (шаг 3).

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

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

5 голосов
/ 02 мая 2011

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

Однако,

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

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

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

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

0 голосов
/ 11 октября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...