Git исправить последний коммит: перебазировать его с предыдущим

Я не знаю точно, как описать это в терминах Git, но я делаю так:

  • Я делаю некоторые изменения, фиксирую это коммитом "Добавить окно поиска"
  • Я понял, что в моем коде отсутствует скобка, измените его, зафиксируйте как "исправление"
  • затем git rebase -i HEAD~2:

    pick 34ea25a Add a search box
    f 9c4b283 fix
    
  • Сохранить файл

  • И да, у меня хорошая история

Но я хотел бы автоматизировать это, так как я могу использовать git rebase без необходимости открывать редактор?

2 ответа

Решение

Прежде всего, если вы знаете, что собираетесь сделать следующий коммит при выполнении этого, вы можете просто использовать git commit --amend вместо. Вот пример рабочего процесса:

$ git commit -am "Add a search box"
$ vim file1.c    # fix something
$ git commit --amend file1.c

Интерактивный режим Git, как следует из названия, предназначен для интерактивного использования. Вы можете, однако, сделать это с помощью GIT_SEQUENCE_EDITOR переменная среды или sequence.editor опция конфигурации. Оба работают одинаково - вы можете установить их для некоторого сценария, который будет получать стандартный интерактивный файл rebase в качестве входных данных. Его вывод будет использован для фактической перебазировки. Вы можете увидеть некоторые предложения о том, как использовать его в этом вопросе.

Мое первое решение простое и работает, только если у вас чистая ветка, то есть нет неотслеживаемых файлов, и только для последнего коммита.

Добавьте сценарий оболочки в папку в вашем PATH лайк ~/bin и назовите это git-reword сделать его исполняемым.

#!/bin/bash
if [ -z "$1" ]; then
  echo "Message missing"
  exit 0
fi
git reset --soft HEAD^1
git commit -am "$1"

В своем репо вы можете набрать

$ git reword "new message"
Другие вопросы по тегам