web-dev-qa-db-ja.com

Gitの古いコミットメッセージを変更する

here のように、古いコミットメッセージを編集しようとしていました。

問題は、今、rebase -i HEAD~5を実行しようとすると、interactive rebase already startedと表示されることです。

だから私は試してください:git rebase --continueが、このエラーが発生しました:

error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.

何か案は?

123
Pablo Fernandez

それは言います:

エディターを保存して終了すると、そのリストの最後のコミットに巻き戻され、コマンドラインに次のメッセージが表示されます。

$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with

そんな意味じゃない:

もう一度入力してくださいgit rebase -i HEAD~3

notを終了するときにgit rebase -i HEAD~3と入力すると、正常に動作するはずです。
(それ以外の場合、特定の状況では、すべてをリセットして再試行できるようにするためにgit rebase -i --abortが必要になる場合があります)


Dave Vogt がコメントで言及しているように、git rebase --continueはリベースプロセスの次のタスクに進むため、最初のコミットを修正した後

また、 Gregg Lindhis answerrewordコマンドの git rebase

コマンド "pick"をコマンド "edit"に置き換えることにより、git rebaseにそのコミットの適用後に停止するように指示できるため、ファイルやコミットメッセージを編集し、コミットを修正し、リベースを続行できます。

コミットのコミットメッセージを編集する場合は、コマンド「pick」をコマンド「rewordに置き換えます。なぜなら、 Git1.6.6(2010年1月)

インタラクティブなリベース中に「edit」が行うことと同じことを行いますが、では、シェルに制御を戻すことなくコミットメッセージを編集することしかできません。これは非常に便利です。
現在、コミットメッセージをクリーンアップする場合は、以下を行う必要があります。

$ git rebase -i next

次に、すべてのコミットを「編集」に設定します。次に、それぞれについて:

# Change the message in your editor.
$ git commit --amend
$ git rebase --continue

reword」の代わりに「edit」を使用すると、git-commitおよびgit-rebaseの呼び出しをスキップできます。

110
VonC

FWIW、git rebase interactiveには "reword"オプションがあり、これにより痛みが軽減されました!

49
Gregg Lind

Gregg Lindが示唆したように、rewordを使用して、コミットメッセージのみを変更するように求められます(そうでない場合はコミットをそのまま残します)。

git rebase -i HEAD~n

ここで、nは最後のn個のコミットのリストです。

たとえば、git rebase -i HEAD~4を使用すると、次のように表示されます。

pick e459d80 Do xyz
pick 0459045 Do something
pick 90fdeab Do something else
pick facecaf Do abc

メッセージを編集するコミットのpickrewordに置き換えますの:

pick e459d80 Do xyz
reword 0459045 Do something
reword 90fdeab Do something else
pick facecaf Do abc

ファイルを保存してからエディターを終了すると、rewordとマークしたコミットのメッセージをメッセージごとに編集するように求められます。 pickrewordに置き換えたときにコミットメッセージを編集する方がはるかに簡単でしたが、それを行っても効果はありません。

詳細については、GitHubのページで コミットメッセージの変更 をご覧ください。

35
Punit Vara

このために別のオプションを提供したかっただけです。私の場合、私は通常、個々のブランチで作業してからマスターにマージし、ローカルに行った個々のコミットはそれほど重要ではありません。

Jiraで適切なチケット番号をチェックするが、大文字と小文字を区別するgitフックのため、コードをプッシュできませんでした。また、コミットはかなり前に行われたので、リベースに戻るコミットの数をカウントしたくありませんでした。

それで、私がしたことは、最新のマスターから新しいブランチを作成し、問題のあるブランチからのすべてのコミットを新しいブランチの単一のコミットに押しつぶすことでした。私にとっては簡単だったので、今後の参考としてここに置いておくことをお勧めします。

最新のマスターから:

git checkout -b new-branch

それから

git checkout new-branch
git merge --squash problem-branch
git commit -m "new message" 

参照: https://github.com/rotati/wiki/wiki/Git:-Combine-all-messy-commits-into-one-commit-before-merging-to-Master-branch

3
WebDever

考えられるすべてのケースをカバーする非常に素晴らしい要点は次のとおりです。 https://Gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4

概要:

git rebase -i HEAD~X
# X is the number of commits to go back
# Move to the line of your commit, change pick into edit,
# then change your commit message:
git commit --amend
# Finish the rebase with:
git rebase --continue
2
Mahmoud Zalt