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


136

ここで説明するように、古いコミットメッセージを編集しようとしました

私が実行しようとする事は、今それである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'.

何か案は?

回答:


125

それは言う:

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

$ 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

エディタを終了するとき入力 しないようgit rebase -i HEAD~3にしてください。これで問題なく動作するはずです。
(そうでない場合、特定の状況では、git rebase -i --abortすべてをリセットして再試行するためにa が必要になる場合があります)


デイブフォークトはコメントで言及、git rebase --continue、リベースプロセスで次のタスクに行くためであるあなたが最初のコミットを改正した後

また、グレッグ・リンド彼の回答reword次のように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呼び出しをスキップできます


2
また、git rebase --continue最初のコミットを修正した後、リベースプロセスの次のタスクに進みます。
Dave Vogt、2010

1
コミットメッセージを変更するためのgithub wiki記事へのリンクを追加
Joy

60

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とマークしたコミットのメッセージをメッセージごとに1つのファイルで編集するように求められます。それはあなたが交換したときにコミットメッセージだけで編集することがはるかに簡単してきただろうと注意pickしてreword、それをやっても何の効果もありません。

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


とてもよく説明されました。ありがとう:D
Shubham Jain

私の答えが役に立ったことを@ShubhamJainに感謝します
Punit Vara

私はそれをしました、そして他のブランチからのコミットが私のブランチに現れます
Reza

@Rezaあなたが何かを台無しにしたかもしれません。他のリポジトリでこれを試してください。このソリューションは完全に機能します
Punit Vara

54

FWIW、git rebase interactiveに「reword」オプションが追加されました。これにより、これがはるかに簡単になります。


3
を使用しているときにreword、Gitでそのファイルのコミットメッセージをコミットのリストで編集できないのはなぜですか?代わりに、1 reword行に1つのコミットメッセージファイルでエディターを起動します。これは不要です。外部コマンドの起動以外のアクションpickreword起動が必要な場合でも、そのreword必要はありません。
Dan Dascalescu

9

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

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

だから私がしたことは、最新のマスターから新しいブランチを作成し、問題のブランチからのすべてのコミットを新しいブランチの単一のコミットにスカッシュすることでした。私にとっては簡単だったので、今後の参考としてここに置いておくとよいでしょう。

最新のマスターから:

git checkout -b 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


1
あなたの答えは本当に私の日を救いました:)。rebase -i約2時間も苦労して成功しませんでした。私のコミットは18回のコミットよりも遅れていたので、想像できるでしょう。これは、リベースを使用せずに見つけることができる、より簡単で便利な方法でした。ありがとう、友達!
Carlos Parra

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.