Git コミットとそれに続くプッシュを実行しました。コミット メッセージを変更したいと思います。正しく理解していれば、変更を行う前に誰かがリモート リポジトリからプルしている可能性があるため、これはお勧めできません。誰もプルしていないことがわかっている場合はどうすればよいですか?
これを実行する方法はありますか?
ベストアンサー1
歴史を変える
最新のコミットの場合は、次のように実行します。
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 はデフォルトのプッシュ設定を使用します。デフォルトのプッシュ設定が「一致」の場合、複数のブランチの変更を同時に破棄する可能性があります。
その後のプル/フェッチ
すでにプルしたユーザーにはエラー メッセージが表示されるので、次のようにして更新する必要があります (自分で変更を加えていない場合)。
git fetch origin
git reset --hard origin/master # Loses local commits
を使用するときは注意してくださいreset --hard
。ブランチに変更があった場合、その変更は破棄されます。
履歴の変更に関する注意
破棄されたデータは実際には古いコミット メッセージに過ぎませんが、--force
そのことを認識せず、他のデータも削除します。つまり、--force
「データを破棄したいが、どのデータが破棄されるかは確実にわかっている」と考えてください。ただし、破棄されたデータがコミットされると、多くの場合、reflog から古いコミットを回復できます。つまり、データは破棄されるのではなく、実際には孤立しているのです(孤立したコミットは定期的に削除されます)。
データを破壊している気がしない場合は、--force
...を避けてください。悪いことが起こるかもしれない。
--force-with-lease
これが、いくぶん安全である理由です。