У меня есть рабочее дерево, содержащее 3 коммита:
➜ ~ myproject git: (мастер) git log
commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <my@mail.com>
Date: Thu Aug 16 00:59:05 2012 +0200
.gitignore edits
commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <my@mail.com>
Date: Mon Aug 13 01:36:39 2012 +0200
Create .gitignore file
commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <my@mail.com>
Date: Mon Aug 13 01:13:05 2012 +0200
Initial commit (with a misleading message)
Теперь я хочу получить reword
сообщение о моей первой фиксации (6707a66)
➜ ~ myproject git: (мастер) git rebase -i 6707
(… Вход в vim)
pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits
# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
В этом случае я хочу исправить ( reword
на языке git) рассматриваемое сообщение фиксации:
Первоначальная фиксация (с вводящим в заблуждение сообщением)
… К чему-то подходящему.
Неудивительно, что моя попытка выше не увенчалась успехом, поскольку первая фиксация явно не имеет родительской фиксации. (И когда вам rebase
нужно ссылаться на следующую самую старую фиксацию до той, которую вы хотите reword
, верно?)
Таким образом, суть моего вопроса: можете ли вы добиться этого другими способами?
Ответы:
Делать
git rebase -i --root
(укажите
root
вместо указания на конкретную фиксацию)Таким образом, первая фиксация также включена, и вы можете использовать
reword
ее, как и любую другую фиксацию.--root
Вариант был введен в Gitv1.7.12
(2012). Раньше единственным вариантом было использоватьfilter-branch
или--amend
, что обычно труднее.Примечание: см. Также этот аналогичный вопрос и ответ .
источник
Вы всегда можете использовать
git filter-branch --msg-filter
:источник
-f
он будет продолжать и всегда переписывать коммиты данной ветки. Значение ссылки ветки с первого раза было сохраненоrefs/original/master
до того, как вы запустили команду.В pcreux есть хороший способ перефразировать первую фиксацию:
источник
git rebase -i --root
это путь, предложенный florisla.