Git: 'git reset'後にコミットメッセージを再利用/保持する方法は?


103

Gitユーザーが定期的にこの状況に遭遇するので、フィックスアップコミットに適合しない、--amendまたはrebase -iフィックスアップコミットを使用しない方法で、1つ以上のコミットをやり直す必要があります。通常、私は次のようなことをします

git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?

私は賢明な合成コミットメッセージを非常に真剣に受け止めています。通常、それらには、変更のための参照と理由を含むより大きなテキストが含まれています。これまでは、ソートされていないを介して古いコミットメッセージを回復するための長いプロセスにかなり悩まされていますgit refloggit logコピーと貼り付けのプロセスをます。

これに取り組む方が良いですか?そして、もし私が複数のコミットで構成されているとしたらどうでしょうか?

編集:これについて少し考えた後、私が探しているのは、フィックスアップ/修正コミットが適切でないコミットメッセージのgit stashのような機能です。


2
もしあなたがやったことがすべてだったらgit reset head~1、古いコミットメッセージは単にの2番目のエントリではreflogないでしょうか?

はい。ただし、コピーと貼り付けなしでメッセージを再利用するにはどうすればよいですか(通常、手動でインデントを
解除

今日、ただgitk開いているだけです。そうすれば、reflogを使用する必要さえなくなります。または、rev-parse <branch>リセット前にハッシュを取得し、ibizamanによる回答を使用するために使用します。
cst1992 '18

回答:


141

の後git reset、このワンライナーはそれを行うことができます:

git commit --reuse-message=HEAD@{1}

またはさらに短い:

git commit -C HEAD@{1}

@ user2718704で指定された他のオプションを使用できます。


6
短縮:git commit -C@@{1}
Phu Ngo 2018

2
これはreflogの素晴らしい使い方です
David Mann

22
リセット後、ORIG_HEADが設定されます。私git commit --reuse-message=ORIG_HEADは最もはっきりしています。
Scott Jacobsen、

45

「git commit」コマンドを実行するときは、次のオプションを確認する必要があります。

再利用するには、

--reuse-message=<commit>

再利用時に編集するには、

--reedit-message=<commit>

著者を変更するには、

--reset-author

1
これが最も包括的な答えを提供したので、これを新しいソリューションとしてマークしました。この解決策はまだ私の「検索」問題を完全に解決していませんが。
ベントラー2013

9

ハック、修正、ハッキングして実行することができるのであれば、なぜリセットするのか git commit --amend --no-edit。したがって、元のコミットメッセージを保持します。

複数のコミットで機能するようにするには、最新の変更で一時コミットを作成し、インタラクティブリベースを使用して、以前のコミット(適切なコミットメッセージを含む)を新しい一時コミットで押しつぶし、古いコミットのコミットメッセージを保持します。


2
インタラクティブなリベースを行う場合、fixup命令を使用して、後のコミットが前のコミットを修正することを宣言することもでき、修正コミットからのメッセージを破棄して、元のコミットメッセージを自動的に使用します。
qqx 2013年

たとえば、強制的に更新されたプルリクエストを再マージしたい場合などです。または、コミットが最後ではなく、HEADに基づいて簡単に修正できず、やり直すのが簡単な場合。
ベントラー2013年

@BenTebulinまあ、インタラクティブなリベースを使用すると、指定したコミットの範囲内のコミットを変更できます。修正する必要があるのは厳密にはHEADコミットではありません。
mart1n 2013年

@選び出しためmart1nのおかげで編集をしてrebase -i。そのコンテキストで使用したことはありません。他の回答を再マージするような残りのケースでは、私の質問の方が適切なので、私はその1つを回答としてマークしました。
ベントラー2013年

Intellijには、まだコミットされていないファイルのみを操作するスコープがあります。たとえば、intellijにファイルをlintするように指示し、それらのファイルを同じメッセージで再コミットできるように、ファイルを非コミットにリセットすると便利です。intellijのスコープの制限により、修正はそのために機能しません。
デビッドマン

5

あなたはgit commit --reset-author -c <commit>、編集と現在の時間でコミットメッセージを再利用することを検討することができます。


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