履歴のより深いところにあるコミットメッセージを変更したいのですが、多くの新しいコミットをプッシュしました。
コミットメッセージを変更するにはどうすればいいですか? 可能ですか?
ベストアンサー1
Linus Torvalds からのメッセージがあなたの疑問に答えてくれるかもしれません:
短い答え: できません (強制された場合)。
抜粋 (Linus は BitKeeper を BK と呼んでいます):
補足ですが、歴史的な興味から言うと、BK では可能でした。
そして、もしあなたがそれに慣れているなら(私のように)、それは本当に実用的でした。私はアンドリューからのパッチ爆弾を適用し、何かが間違っていることに気づいたら、それをプッシュする前に編集するだけです。
git でも同じことができます。コミット メッセージだけを名前の一部にしないようにして、履歴が変更されないことを保証し、「後でコメントを修正する」機能を許可するのは簡単だったでしょう。
しかし、私はそうしませんでした。
その一部は純粋に「内部一貫性」です。Gitは単純にクリーナーすべてがSHA1で保護され、オブジェクトの種類に関係なくすべてのオブジェクトが同じように扱われるシステムです。確かに4種類のオブジェクトがあり、それぞれがまったく異なり、同じように使用することはできませんが、同時に、ディスク上のエンコードが異なっていても、概念的にそれらはすべてまったく同じように動作します。
しかし、内部の一貫性は柔軟性に欠けることの言い訳にはなりません。間違いが起こった後にそれを修正できれば、明らかに柔軟性は高まります。ですから、これはあまり説得力のある議論ではありません。
の本物Git がコミット メッセージの変更を許可しない理由は、非常に単純です。そのようにすれば、メッセージを信頼できるからです。後から変更を許可した場合、メッセージは本質的にあまり信頼できません。
完了するには、できたローカルコミット履歴を書き換えて、希望する内容を反映させます。sykora が提案(リベースとリセットを少し行うと、大変です、びっくり!)
しかし、修正した履歴を公開するとまたgit push origin +master:master
( は、プッシュが強制的に実行されることを示す記号で+
、たとえ「早送り」コミットにならなくても)...トラブルに巻き込まれるかもしれない。
他の SO の質問からの抜粋:
I actually once pushed with --force to git.git repository and got scolded by Linus BIG TIME. It will create a lot of problems for other people. A simple answer is "don't do it".