7656

コミットメッセージに間違ったことを書きました。

メッセージを変更するにはどうすればよいですか?コミットはまだプッシュされていません。

4

27 に答える 27

17479

最新のコミットメッセージを修正する

git commit --amend

エディターが開き、最新のコミットのコミットメッセージを変更できるようになります。さらに、次のコマンドラインでコミットメッセージを直接設定できます。

git commit --amend -m "New commit message"

…ただし、これにより、複数行のコミットメッセージや小さな修正を入力するのがより面倒になる可能性があります。

これを行う前に、作業コピーの変更がステージングされていないことを確認してください。そうしないと、変更もコミットされます。(ステージングされていない変更はコミットされません。)

すでにリモートブランチにプッシュしたコミットのメッセージを変更する

すでにコミットをリモートブランチにプッシュしている場合は、(上記のように)ローカルでコミットを修正した後、次のコマンドでコミットを強制的にプッシュする必要もあります。

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

警告:強制的に押すと、リモートブランチがローカルブランチの状態で上書きされます。ローカルブランチにないコミットがリモートブランチにある場合、それらのコミット失われます。

警告:すでに他の人と共有しているコミットの修正には注意してください。コミットを修正すると、基本的にそれらが異なるSHA IDを持つように書き換えられます。これは、あなたが書き換えた古いコミットのコピーを他の人が持っている場合に問題になります。古いコミットのコピーを持っている人は、自分の作業を新しく書き直したコミットと同期する必要がありますが、これは難しい場合があります。共有コミット履歴を書き直そうとするときは、他の人と調整するか、共有コミットの書き直しを避けてください。完全に。


インタラクティブなリベースを実行する

別のオプションは、インタラクティブなリベースを使用することです。これにより、最新のメッセージでなくても、更新するメッセージを編集できます。

Gitスカッシュを実行するには、次の手順に従います。

// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n

コミットを潰したらe/r、メッセージを編集するためにを選択します。

コミットの編集中の端末のスクリーンショット

インタラクティブリベースに関する重要な注意

使用する場合、nを超えるコミットgit rebase -i HEAD~n存在する可能性があります。Gitは最後のn個のコミットのすべてのコミットを「収集」し、その範囲のどこかにマージがあった場合は、すべてのコミットも表示されるため、結果はn+になります。

良いヒント:

複数のブランチに対してそれを行う必要があり、コンテンツを修正するときに競合が発生する可能性がある場合は、git rerereGitにそれらの競合を自動的に解決させるように設定してください。


ドキュメンテーション

于 2008-10-07T15:50:34.630 に答える
2606
git commit --amend -m "your new message"
于 2010-02-08T04:26:11.333 に答える
2445

修正したいコミットが最新のものでない場合:

  1. git rebase --interactive $parent_of_flawed_commit

    いくつかの欠陥のあるコミットを修正したい場合は、そのうちの最も古いコミットの親を渡します。

  2. エディターが表示され、指定したコミット以降のすべてのコミットのリストが表示されます。

    1. 修正したいコミットの前に(または Git の古いバージョンでは に)変更pickします。rewordedit
    2. 保存すると、Git はリストされたコミットを再生します。

  3. rewordしたいコミットごとに、Git はあなたをエディターに戻します。編集するコミットごとに、Git はシェルにドロップします。シェルを使用している場合:

    1. 好きなようにコミットを変更します。
    2. git commit --amend
    3. git rebase --continue

このシーケンスのほとんどは、さまざまなコマンドの出力によって説明されます。それは非常に簡単です; git rebase --interactiveそれを記憶する必要はありません。どれだけ前のコミットでも修正できることを覚えておいてください。


すでにプッシュしたコミットを変更したくないことに注意してください。または、そうするかもしれませんが、その場合、コミットをプルしてその上で作業を行った可能性のあるすべての人と通信するように細心の注意を払う必要があります。誰かがリベースまたはリセットを発行済みブランチにプッシュした後、どうすれば回復/再同期できますか?

于 2008-10-07T19:52:21.803 に答える
810

以前のコミットを修正するには、必要な変更を行い、それらの変更をステージングしてから実行します

git commit --amend

これにより、新しいコミット メッセージを表すファイルがテキスト エディターで開きます。古いコミット メッセージのテキストが入力されます。必要に応じてコミット メッセージを変更し、ファイルを保存してエディターを終了して終了します。

以前のコミットを修正し、同じログ メッセージを保持するには、次を実行します。

git commit --amend -C HEAD

以前のコミットを完全に削除して修正するには、次を実行します。

git reset --hard HEAD^

複数のコミット メッセージを編集する場合は、次を実行します。

git rebase -i HEAD~commit_count

( commit_countを、編集するコミットの数に置き換えます。) このコマンドは、エディターを起動します。最初のコミット (変更したいもの) を「選択」ではなく「編集」としてマークし、保存してエディターを終了します。コミットしたい変更を加えてから実行します

git commit --amend
git rebase --continue

注:によって開かれたエディターから「必要な変更を加える」こともできますgit commit --amend

于 2011-08-15T21:20:49.540 に答える
409

すでに述べgit commit --amendたように、最後のコミットを上書きする方法です。1 つの注意: ファイルも上書きする場合、コマンドは次のようになります。

git commit -a --amend -m "My new commit message"
于 2011-06-06T21:16:18.283 に答える
366

そのためにも使用できますgit filter-branch

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

些細なことほど簡単ではありませんgit commit --amendが、誤ったコミットメッセージの後にすでにいくつかのマージがある場合は特に便利です。

これは、と欠陥のあるコミットの間のすべてHEADのコミットを書き直そうとするので、コマンドを非常に賢明に選択する必要があることに注意してくださいmsg-filter;-)

于 2012-09-01T20:35:29.813 に答える
333

私はこの方法を好みます:

git commit --amend -c <commit ID>

そうしないと、新しいコミット ID を持つ新しいコミットが作成されます。

于 2013-01-10T14:23:28.703 に答える
316

Git GUI ツールを使用している場合は、Amend last commitという名前のボタンがあります。そのボタンをクリックすると、最後のコミット ファイルとメッセージが表示されます。そのメッセージを編集するだけで、新しいコミット メッセージでコミットできます。

または、コンソール/端末から次のコマンドを使用します。

git commit -a --amend -m "My new commit message"
于 2012-11-08T03:51:46.947 に答える
290

Git リベースを使用できます。たとえば、bbc643cd をコミットするように変更したい場合は、次を実行します。

$ git rebase bbc643cd^ --interactive

デフォルトのエディターで、コミットを変更したい行の「pick」を「edit」に変更します。変更を加えてからステージングします

$ git add <filepattern>

今、あなたは使用することができます

$ git commit --amend

コミットを変更し、その後

$ git rebase --continue

前の head コミットに戻ります。

于 2013-01-22T17:23:19.293 に答える
282
  1. 最後のコミット メッセージのみを変更する場合は、次のようにします。

    git commit --amend
    

これにより、テキスト エディターが表示され、最後のコミット メッセージを変更できます。

  1. 最後の 3 つのコミット メッセージ、またはその時点までのコミット メッセージのいずれかを変更する場合は、次HEAD~3git rebase -iコマンドを指定します。

    git rebase -i HEAD~3
    
于 2012-10-22T11:22:13.827 に答える
266

複数のブランチで古いコミット メッセージを変更する必要がある場合 (つまり、誤ったメッセージを含むコミットが複数のブランチに存在する場合)、次のコマンドを使用できます。

git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all

Git は書き換え用の一時ディレクトリを作成し、さらに古い参照を にバックアップしrefs/original/ます。

  • -f操作の実行を強制します。これは、一時ディレクトリがすでに存在する場合、または に格納されている参照がすでに存在する場合に必要ですrefs/original。そうでない場合は、このフラグを削除できます。

  • --フィルター分岐オプションをリビジョン オプションから分離します。

  • --allすべてのブランチタグが確実に書き換えられます。

古い参照のバックアップにより、コマンドを実行する前の状態に簡単に戻ることができます。

たとえば、master を復元して branch でアクセスしたいとしますold_master

git checkout -b old_master refs/original/refs/heads/master
于 2012-11-15T09:29:35.820 に答える
229

使用する

git commit --amend

詳細を理解するには、 4. Rewriting Git Historyが優れた投稿です。を使用しない場合 についても説明しますgit commit --amend

于 2013-03-27T20:43:50.643 に答える
226

それが最後のコミットである場合は、コミットを修正してください。

git commit --amend -o -m "New commit message"

( -o( --only) フラグを使用して、コミット メッセージのみを変更するようにします)


埋められたコミットの場合は、素晴らしいインタラクティブなリベースを使用してください:

git rebase -i @~9   # Show the last 9 commits in a text editor

目的のコミットを見つけて( ) に変更pickし、ファイルを保存して閉じます。終わり!rreword



ミニチュア Vim のチュートリアル (または、わずか 8 回のキーストロークでリベースする方法3jcwrEscZZ):

  • vimtutor時間があれば走る
  • hjkl移動キーに対応←</kbd>↓</kbd>↑</kbd>→</kbd>
  • すべてのコマンドには「範囲」を前に付けることができます。たとえば、3j3 行下に移動します。
  • i挿入モードに入る - 入力したテキストがファイルに表示されます
  • EscまたはCtrlc挿入モードを終了して「通常」モードに戻る
  • u元に戻すには
  • Ctrlrやり直す
  • dddwdl行、単語、または文字をそれぞれ削除します
  • cccwcl行、単語、または文字をそれぞれ変更する ( と同じddi)
  • yyywyl行、単語、または文字をそれぞれコピー (「ヤンク」) する
  • pまたはP、それぞれ現在の位置の後または前に貼り付けます
  • :wEnterファイルを保存 (書き込み) する
  • :q!Enter保存せずに終了する
  • :wqEnterまたはZZ保存して終了する

テキストを頻繁に編集する場合は、Dvorak キーボード レイアウトに切り替え、タッチタイピングを学び、Vim を学びます。努力する価値はありますか?はい。



ProTip™: 履歴を書き換える「危険な」コマンドを試すことを恐れないでください* — Git はデフォルトで 90 日間コミットを削除しません。それらはreflogで見つけることができます:

$ git reset @~3   # Go back three commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started

*や などのオプションに注意してください — これらはデータを破棄する可能性があります。--hard--force * また、共同作業しているブランチの履歴を書き換えないでください。

于 2015-02-10T00:01:01.093 に答える
201

改める

ここにはいくつかのオプションがあります。できるよ

git commit --amend

それがあなたの最後のコミットである限り。

インタラクティブなリベース

それ以外の場合、それが最後のコミットでない場合は、インタラクティブなリベースを実行できます。

git rebase -i [branched_from] [hash before commit]

次に、インタラクティブなリベース内で、そのコミットに編集を追加するだけです。表示されたらgit commit --amend、コミットメッセージを実行して変更します。git reflogそのコミット ポイントの前にロールバックする場合は、そのコミットを使用して削除することもできます。次に、git commitもう一度実行します。

于 2013-01-18T01:45:12.053 に答える
186

Git GUI を使用している場合は、プッシュされていない最後のコミットを次のように修正できます。

Commit/Amend Last Commit
于 2012-12-01T05:03:58.357 に答える
130

最新のコミットを編集するだけの場合は、次を使用します。

git commit --amend

また

git commit --amend -m 'one line message'

ただし、複数のコミットを続けて編集したい場合は、代わりにリベースを使用する必要があります。

git rebase -i <hash of one commit before the wrong commit>

Git リベース編集

上記のようなファイルで、書き込みedit/eまたは他のオプションのいずれかを選択し、保存して終了します。

これで、最初の間違ったコミットになります。ファイルに変更を加えると、自動的にステージングされます。タイプ

git commit --amend

それを保存して終了し、入力します

git rebase --continue

すべての選択が完了するまで、次の選択に移動します。

これらのことは、その特定のコミット後にすべての SHA ハッシュを変更することに注意してください。

于 2014-01-06T22:03:35.997 に答える
128

最後のメッセージのみを変更したい場合は、--onlyフラグまたはそのショートカット-ocommit --amend次のように使用する必要があります。

git commit --amend -o -m "New commit message"

これにより、ステージングされたもので誤ってコミットを強化することがなくなります。もちろん、適切な$EDITOR構成を持つことが最善です。その後、-mオプションを省略できます。Git はコミット メッセージに古いメッセージを事前に入力します。このように簡単に編集できます。

于 2014-05-23T08:40:05.847 に答える
90

この質問には多くの回答がありますが、 Vimを使用して古いコミットメッセージを変更する方法を詳細に説明しているものはありません。私はこれを自分でやろうとして立ち往生したので、ここでは、特に Vim の経験がない人のために、これをどのように行ったかを詳細に書き留めます!

既にサーバーにプッシュした 5 つの最新のコミットを変更したかったのです。これは非常に「危険」です。なぜなら、他の誰かがすでにこれをやめている場合、コミット メッセージを変更することで混乱を招く可能性があるからです。ただし、独自の小さなブランチで作業していて、誰もプルしていないことが確実な場合は、次のように変更できます。

最近の 5 つのコミットを変更したい場合、ターミナルで次のように入力します。

git rebase -i HEAD~5

*5 は、変更するコミット メッセージの数です (つまり、10 番目を最後のコミットに変更する場合は、10 を入力します)。

このコマンドで Vim に入り、コミット履歴を「編集」できます。次のように、最後の 5 つのコミットが上部に表示されます。

pick <commit hash> commit message

代わりに、pick書く必要がありますreword。と入力することで、Vim でこれを行うことができますi。これで挿入モードに入ります。(下部にあるINSERTという単語によって挿入モードになっていることがわかります。) 変更するコミットについては、 のreword代わりにin を入力しpickます。

次に、この画面を保存して終了する必要があります。これを行うには、最初にボタンを押して「コマンド モード」に入ります (下部のINSERTという単語が消えているEsc場合は、コマンド モードになっていることを確認できます)。次に、 と入力してコマンドを入力できます。保存して終了するコマンドは. したがって、入力すると、正しい軌道に乗っています。:wq:wq

次に、Vim は、書き換えたいすべてのコミット メッセージを確認します。ここで、実際にコミット メッセージを変更できます。これを行うには、挿入モードに入り、コミット メッセージを変更し、コマンド モードに入り、保存して終了します。これを 5 回実行すると、Vim が終了します。

次に、間違ったコミットをすでにプッシュしている場合は、git push --forceそれらを上書きする必要があります。これは非常に危険な行為であることを忘れないでgit push --forceください。間違ったコミットをプッシュしたため、誰もサーバーからプルしないようにしてください。

これで、コミット メッセージが変更されました。

(ご覧のとおり、私は Vim の経験が豊富ではないので、何が起こっているのかを説明するために間違った「専門用語」を使用した場合は、遠慮なく修正してください!)

于 2014-08-07T09:18:35.723 に答える
80

git-rebase-rewordを使用できます

と同じ方法で(最後だけでなく)任意のコミットを編集するように設計されていますcommit --amend

$ git rebase-reword <commit-or-refname>

コミットを修正するためのインタラクティブなリベースのアクションにちなんで名付けられました:「reword」。この投稿man -section interactive mode-を参照してください

例:

$ git rebase-reword b68f560
$ git rebase-reword HEAD^
于 2015-02-21T12:21:22.373 に答える
80

エイリアスを追加しreciましrecmrecommit (amend)。今、私はgit recmorでそれを行うことができますgit recm -m:

$ vim ~/.gitconfig

[alias]

    ......
    cm = commit
    reci = commit --amend
    recm = commit --amend
    ......
于 2014-01-06T07:24:14.737 に答える
58

タイプミスのあるコミットをプッシュしたことに気付きました。元に戻すために、次のことを行いました。

git commit --amend -m "T-1000, advanced prototype"
git push --force

警告:変更を強制的にプッシュすると、リモート ブランチがローカル ブランチで上書きされます。保持したいものを上書きしないようにしてください。また、他の誰かがあなたとブランチを共有している場合、修正された (書き換えられた) コミットを強制的にプッシュすることにも注意してください。

于 2014-07-19T17:27:29.153 に答える
53

私は以下を使用するのが好きです:

  1. git status
  2. git add --all
  3. git commit -am "message goes here about the change"
  4. git pull <origin master>
  5. git push <origin master>
于 2014-09-08T09:14:03.843 に答える
47

コードをリモート ブランチ ( GitHub / Bitbucket ) にプッシュしていない場合は、以下のようにコマンド ラインでコミット メッセージを変更できます。

 git commit --amend -m "Your new message"

特定のブランチで作業している場合は、次のようにします。

git commit --amend -m "BRANCH-NAME: new message"

間違ったメッセージでコードを既にプッシュしている場合、メッセージを変更するときは注意が必要です。つまり、コミット メッセージを変更して再度プッシュしようとすると、問題が発生します。スムーズにするには、次の手順に従います。

それを行う前に、私の回答全体を読んでください。

git commit --amend -m "BRANCH-NAME : your new message"

git push -f origin BRANCH-NAME                # Not a best practice. Read below why?

重要な注意事項:強制プッシュを直接使用すると、他の開発者が同じブランチで作業しているというコードの問題が発生する可能性があります。したがって、これらの競合を回避するには、強制プッシュを行う前にブランチからコードをプルする必要があります。

 git commit --amend -m "BRANCH-NAME : your new message"
 git pull origin BRANCH-NAME
 git push -f origin BRANCH-NAME

これは、コミット メッセージが既にプッシュされている場合に変更する場合のベスト プラクティスです。

于 2015-01-13T07:03:07.230 に答える