Git:以前のコミットのメッセージのみを編集


12

怠惰な理由で、デフォルトのメッセージを使用して大量のコミットをプッシュしましたが、各コミットで何を変更したのか本当にわからないので、面倒になっています。

以前のコミットのメッセージだけを編集して、(可能な場合は)コミットツリーを保持するにはどうすればよいですか?


10
公の歴史の変化に注意してください!
D.ベンノーブル2018

2
ここでの答えが十分に悲惨な警告を与えていないのではないかと心配です。その間に他の誰かがあなたの歴史を引っ張っていれば、これ巨大な混乱を引き起こします-さらに、彼らがその上に新しい仕事をコミットした場合はなおさらです!
Eevee、2018

私は原因でそれを使用します、ここでより簡単なケースがあります、私はこのレポを使用する唯一の人です。
Tuyen Pham

3
情報:これは、Stack Overflowですでに(おそらく何度も)尋ねられます。
user202729 2018

回答:


20

一連のコミットのコミットメッセージを編集するには、次のコマンドを実行します

git rebase -i firstsha

ここfirstshaで、編集したい最初のコミットの親コミットの識別子です。(ここでは任意の有効な参照を使用できるためgit rebase -i HEAD~4、最後の4つのコミットが表示されます。)

開いたエディターで、変更するコミットですべての「選択」エントリを「変更」に変更し、エディターを閉じます。次に、選択したすべてのコミットのコミットメッセージを入力するように求められます。

コミットのハッシュが変更されるため、これによりコミットツリー変更されることに注意してください。新しいツリーを強制的にプッシュするか、新しいツリーにプッシュする必要があります。また、マージを台無しにするので、マージコミットの編集は避けてください。

最後のコミットのみをすばやく編集するには、次を実行します。

git commit --amend

(ただし、コミットのためにステージングされたものには注意してください)。


コミットツリーにどのように影響しますか?コミットツリーに中間の垂直線を作成しますか?現在、垂直ラインコミットツリーは1つしかなく、100以上のメッセージを変更する必要があります。
チュエンファム

3
コミットツリーに新しい「行」を作成するのではなく、すべてのコミットを変更します。履歴が現在線形である場合、それは線形のままです。
Stephen Kitt 2018

場合によります。自分で使用していて、サーバーにプッシュしていませんか?その後、いいえ、「行」は1つだけです。しかし、それ以外の場合は2つある可能性があり、最初の2つに対する回答に基づいて、古い「ライン」を取り除くのに役立ちます。
キャプテンマン

1
Rebaseにはマージを処理するためのフラグがあります(そうだと思いますpreserve-merges
D. Ben Knoble

6

あなたが探しているのはgit rebaseです。

前のgit commitメッセージのみを変更したい場合は、以下を使用するだけです。

git commit --amend

そして、以前のコミットに必要な変更を加えてから、編集を保存します。

ただし、古いコミットを変更する必要がある場合は、を使用する必要がありますrebase

git rebase -i HEAD~N 

ここで、Nは元に戻したいコミットの数です。たとえば、2、12、6などです。

ここで、コミットしたテキストエディターを取得します。オプションをpickからrewordに変更して、メッセージを変更します。

変更するすべてのコミットを特定し、それらのオプションを適切に変更したら、エディターを保存して閉じます。次に、各コミットメッセージに変更を加えます。満足したら、次のコマンドを実行できます。

git push --force

また、必要な変更を加えたので、異なるハッシュ値を使用していてもgit履歴を維持しているはずです。ここにあなたがチェックする必要があるいくつかの追加のリンクがあります:

7.6 Gitツール-履歴の書き換え
GitHubヘルプ-コミットメッセージの変更
StackOverflow-古いコミットメッセージの変更に関する質問


「言い換える」場合commit --amend、コミットプロセスを何らかの方法で台無しにしない限り、「」する必要はありません。
Stephen Kitt

ありがとう、ここであなたの投稿から私の理解として行う手順:1. git rebase -i firstshaそれfirstshaは、親コミットのコミットのハッシュであり、メッセージを変更したいので、エディターで、に変更pickrewordenter新しいメッセージ、そして発行しますgit rebase --continueしますgit push --forceか?
チュエンファム

@StephenKitt、あなたの答えに気づいたばかりです。私はあなたのアドバイスに従い、それらの編集を行います。より適切な場合は、複数の同様の回答を持つよりもこの質問に適していると思われる場合は、リンクをあなたの回答に追加することで私の回答をあなたの回答にマージできます。
ケモテップ

@TuyenPhamあなたはgit rebase -i HEAD~N、あなたが行きたいコミットの数であるNとだけする必要があります。from〜のメッセージを編集するすべてのコミットオプションを変更pickreword、このファイルを保存し、各コミットファイルに変更を加えて保存します。作業が完了したと確信したら、必要なのはあなただけですgit push --force [Name of git branch you are were working on]。いつでも戻ってこれを行うか、段階的に行うことができます。
kemotep 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.