Как использовать интерактивную переадресацию git для завершения серии коммитов
Я бы хотел, чтобы подписал все коммиты на ветке, которую я закончил и хочу отправить в восходящий проект (например, с помощью запроса на перенос на GitHub).
Рекомендуемым способом, который я нашел, является использование
git rebase -i [base-commit]
# Set all commits to "edit"
git commit --amend --signoff # do this for all commits
Как это сделать автоматически, в одной неинтерактивной команде?
Ответы
Ответ 1
С Git 2.13 (Q2 2017) не требуется больше "git commit --amend --signoff
":
См. commit 9f79524 (18 апреля 2017 г.) и commit 0fb3c4f, совершить b7cc705 (15 апреля 2017 г.) Джузеппе Билотта ( Oblomov
).
(Слияние Junio C Hamano - gitster
- в совершить 768c7cb, 26 апреля 2017 г.)
rebase
: передать --[no-]signoff
вариант git am
Это упрощает подписание целого набора патчей перед отправкой.
git rebase
справочная страница теперь включает в себя:
--signoff:
Этот флаг передается 'git am
', чтобы отменить все перебитые коммиты.
Несовместим с опцией --interactive
.
Ответ 2
Похоже, что алиасы git могут сделать это довольно красиво. Поместите в свой ~/.gitconfig
:
[alias]
# Usage: git signoff-rebase [base-commit]
signoff-rebase = "!GIT_SEQUENCE_EDITOR='sed -i -re s/^pick/e/' sh -c 'git rebase -i $1 && while git rebase --continue; do git commit --amend --signoff --no-edit; done' -"
Здесь также Gist.
Вы используете его точно так же, как git rebase
; pick
автоматически перевернуты на edit
, используя sed
и --no-edit
, чтобы не открывать редактор для каждой отдельной фиксации.