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"