1. ホーム
  2. git

[解決済み] プッシュ後に git のコミットメッセージを変更する (誰もリモートからプルしていないと仮定した場合)

2022-03-19 18:04:28

質問

gitのコミットとそれに続くプッシュを行いました。コミットメッセージを変更したいのですが、どうすればよいでしょうか。私が正しく理解しているならば、このような変更を行う前に誰かがリモートリポジトリからプルしているかもしれないので、これはお勧めできません。誰もpullしていないことが分かっている場合はどうすればよいのでしょうか?

このような方法はあるのでしょうか?

どのように解決するのですか?

履歴の変更

最新のコミットであれば、単純にこのようにすればよいでしょう。

git commit --amend

これにより、最後のコミットメッセージが表示されたエディターが表示され、メッセージを編集することができます。 (あなたは -m は、古いメッセージを消去して新しいメッセージを使いたい場合)

プッシング

そして、プッシュするときは、こうしてください。

git push --force-with-lease <repository> <branch>

または、"+"を使用することができます。

git push <repository> +<branch>

または --force :

git push --force <repository> <branch>

これらのコマンドを使用する場合は、注意が必要です。

  • 誰かが同じブランチに変更を加えた場合、その変更を破棄するのは避けたいでしょう。 そのため --force-with-lease オプションは最も安全で、上流の変更があれば中断されるからです (

  • ブランチを明示的に指定しなかった場合、Git はデフォルトのプッシュ設定を使用します。 デフォルトのプッシュ設定が "matching" である場合、複数のブランチでの変更を同時に破棄することができます。

プル/フェッチの後処理

すでにpullした人はエラーメッセージが表示されるので、次のような方法で更新する必要があります(自分では何も変更していないと仮定して)。

git fetch origin
git reset --hard origin/master # Loses local commits

を使用する場合は注意が必要です。 reset --hard . ブランチに変更があった場合、その変更は破棄されます。

履歴の修正に関する注意点

破壊されたデータは、実際には古いコミットメッセージだけですが --force はそれを知らないので、他のデータも喜んで削除します。 そこで --force しかし、破壊されたデータがコミットされるとき、しばしば reflog から古いコミットを復元することができます。 孤児 破壊されるのではなく、孤児となったコミットは定期的に削除されますが)。

もし、データを破壊していないと思うのであれば、以下のコマンドは使わないでください。 --force ... 悪いことが起こるかもしれない .

このため --force-with-lease の方がやや安全です。