"исправить" предыдущую фиксацию и отредактировать сообщение

Допустим, я хочу изменить HEAD ~ 2 моей текущей последней фиксацией "HEAD" без изменения, сделанного HEAD ~. Более того, я хотел бы отредактировать сообщение из HEAD ~ 2, а не перезаписывать его (в сообщение нужно внести лишь несколько изменений). Я нашел вот так: это мой текущий журнал git: enter image description here

Затем я выполнил следующую команду:

git reset --mixed Head~3
git add new_file.cpp
git commit -m "Erased previous new_file.cpp by current new_file"
git add other_file.cpp
git commit -m "Added other_file.cpp"

Итак, теперь я понял:

enter image description here

Как видите, я переписал весь свой коммит, чтобы он был чистым. И поскольку я новичок в сбросе настроек ... он может быть немного грязным.

Можно ли получить этот очиститель, просто «отредактировав» коммиты? Например, я хотел бы отредактировать предыдущее сообщение из первой фиксации и оставить сообщение второй нетронутым.

Более того, способ, которым я сделал модификацию, позволяет мне думать, что предыдущая фиксация все еще присутствует и должна загрязнять репозиторий: будут ли они удалены или останутся там навсегда?

P.S: репозиторий GitHub (журнал ссылок довольно ужасен, поскольку я допустил некоторую командную ошибку, прежде чем найти правильную команду)

Moreover, I'd like to edit the message from HEAD~2 and not overwrite it ... ты не можешь этого сделать. Если вы измените сообщение фиксации, вы измените фиксацию. Вы можете изучить возможность интерактивной перебазировки, но tbat переписывает историю ветки и нежелателен для общедоступной / общей ветки.
Tim Biegeleisen 11.04.2018 12:23
0
1
1 251
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Невозможно изменить сообщение фиксации без изменения (по крайней мере, SHA) всех его потомков. Однако, если вы все еще хотите это сделать (например, вы допустили опечатку ранее и еще не опубликовали свою фиксацию), вы можете сделать:

git rebase --interactive HEAD~2

А затем замените pick в начале строки своим коммитом на reword. Он сотворит за вас всю магию git checkout / git commit --amend / git rebase.

Если вы хотите узнать больше:

Moreover, the way I did the modification let me think the previous commit are still present and must pollute the repository : will they be erased or stay there foreever ?

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

Говоря о rebase: как упоминал @TimBiregeleisen, я думаю, что интерактивная перебазировка будет более чистым решением: git rebase -i HEAD~2 позволяет вам пересмотреть последние два коммита. Вы можете переписать сообщение коммита, отредактировать всю фиксацию, сжать несколько коммитов в одно и другие вещи; там много документации (например, здесь или здесь).

Конечно, интерактивная перестановка создает совершенно новые блестящие коммиты и оставляет старые болтающимися, но, как упоминалось выше, это не проблема до тех пор, пока вы не продвигаете эти старые коммиты, а кто-то другой начал работать над ними.

Другие вопросы по теме