Подтвердить что ты не робот

Как сохранить сообщение фиксации при редактировании с помощью git rebase -interactive?

Я сейчас в середине сеанса git rebase --interactive, где я редактирую фиксацию. Я продолжаю, как было предложено Как я могу разделить Git commit, зарытый в истории?, то есть я побежал git reset HEAD^ и внес свои изменения. Теперь я хочу, чтобы rebase продолжалась, что требует от меня изменений. Я хотел бы изменить свое старое сообщение о фиксации, но проблема в том, что если я запустил git commit --amend, мне передали сообщение о фиксации перед тем, которое я на самом деле модифицирую - и я, конечно, не хочу чтобы слить мои изменения в это сообщение.

Итак, как мне получить мое старое сообщение фиксации для коммита, над которым я сейчас работаю?

4b9b3361

Ответ 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