Как сохранить сообщение фиксации при редактировании с помощью git rebase -interactive?
Я сейчас в середине сеанса git rebase --interactive
, где я редактирую фиксацию. Я продолжаю, как было предложено Как я могу разделить Git commit, зарытый в истории?, то есть я побежал git reset HEAD^
и внес свои изменения.
Теперь я хочу, чтобы rebase продолжалась, что требует от меня изменений. Я хотел бы изменить свое старое сообщение о фиксации, но проблема в том, что если я запустил git commit --amend
, мне передали сообщение о фиксации перед тем, которое я на самом деле модифицирую - и я, конечно, не хочу чтобы слить мои изменения в это сообщение.
Итак, как мне получить мое старое сообщение фиксации для коммита, над которым я сейчас работаю?
Ответы
Ответ 1
В то время как решение CharlesB является правильным и, вероятно, более простым, причина, по которой исходный плакат видит сообщение фиксации до, коммит, который он хочет потому что он использует флаг --amend
git commit
, который изменяет предыдущую фиксацию.
Вместо того, чтобы использовать --amend
для фиксации изменений, просто используйте git commit
без флага, который не коснется предыдущей фиксации. Вы также можете передать возможность повторного использования сообщения фиксации из фиксации, которое вы reset, с помощью git reset head^
:
git commit [email protected]{1}
# Or use -C, which is the same thing, but shorter:
git commit -C [email protected]{1}
[email protected]{1}
указывает на фиксацию, на которой вы были, до того, как вы сделали git reset head^
. Вы также можете просто передать sha id для этой фиксации напрямую.
Из git commit
docs:
-C <commit>
--reuse-message=<commit>
Возьмите существующий объект фиксации и повторно используйте сообщение журнала и информацию об авторстве (включая метку времени) при создании фиксации.
Конечно, как я уже сказал, решение CharlesB проще, так как если вы не сделаете первый git reset head^
, вы можете просто внести изменения и внести поправки в фиксацию, которую вы пытаетесь изменить напрямую, и вы автоматически получаете предыдущее сообщение фиксации, когда вы выполняете git commit --amend
, вам не нужно передавать в нем команду фиксации.
Ответ 2
Зачем следовать инструкциям по фиксации фиксации если вы этого не хотите?
Вы не reset до HEAD^
, это применяется только при фиксации разделения. Просто отметьте фиксацию для редактирования в rebase -i
, внесите изменения, commit --amend
и rebase --continue
.
Ответ 3
У меня есть еще один ответ, который кажется более глупым, хотя и недокументированным.
$ git reset HEAD^
$ git add ... # stage the first part of your split
$ git commit -m 'part one'
$ git commit -a -F $(git rev-parse --git-dir)/rebase-merge/message
Ответ 4
Я применил несколько примеров в git -commit (1) и git - reset (1):
$ git reset HEAD^
$ git add ... # stage the first part of your split
$ git commit -m 'part one'
$ git commit -a -c ORIG_HEAD # start with the earlier commit message
Если вы беспокоитесь о том, чтобы что-то изменить ORIG_HEAD
, вы могли бы сделать следующее:
$ SAVED=$(git rev-parse HEAD)
$ git reset HEAD^
...
$ git commit -a -c $SAVED # start with the earlier commit message