コミットメッセージに間違ったことを書きました。
メッセージを変更するにはどうすればよいですか?コミットはまだプッシュされていません。
コミットメッセージに間違ったことを書きました。
メッセージを変更するにはどうすればよいですか?コミットはまだプッシュされていません。
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 rerere
Gitにそれらの競合を自動的に解決させるように設定してください。
git commit --amend -m "your new message"
修正したいコミットが最新のものでない場合:
git rebase --interactive $parent_of_flawed_commit
いくつかの欠陥のあるコミットを修正したい場合は、そのうちの最も古いコミットの親を渡します。
エディターが表示され、指定したコミット以降のすべてのコミットのリストが表示されます。
pick
します。reword
edit
rewordしたいコミットごとに、Git はあなたをエディターに戻します。編集するコミットごとに、Git はシェルにドロップします。シェルを使用している場合:
git commit --amend
git rebase --continue
このシーケンスのほとんどは、さまざまなコマンドの出力によって説明されます。それは非常に簡単です; git rebase --interactive
それを記憶する必要はありません。どれだけ前のコミットでも修正できることを覚えておいてください。
すでにプッシュしたコミットを変更したくないことに注意してください。または、そうするかもしれませんが、その場合、コミットをプルしてその上で作業を行った可能性のあるすべての人と通信するように細心の注意を払う必要があります。誰かがリベースまたはリセットを発行済みブランチにプッシュした後、どうすれば回復/再同期できますか?
以前のコミットを修正するには、必要な変更を行い、それらの変更をステージングしてから実行します
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
すでに述べgit commit --amend
たように、最後のコミットを上書きする方法です。1 つの注意: ファイルも上書きする場合、コマンドは次のようになります。
git commit -a --amend -m "My new commit message"
そのためにも使用できますgit filter-branch
。
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
些細なことほど簡単ではありませんgit commit --amend
が、誤ったコミットメッセージの後にすでにいくつかのマージがある場合は特に便利です。
これは、と欠陥のあるコミットの間のすべてHEAD
のコミットを書き直そうとするので、コマンドを非常に賢明に選択する必要があることに注意してくださいmsg-filter
;-)
私はこの方法を好みます:
git commit --amend -c <commit ID>
そうしないと、新しいコミット ID を持つ新しいコミットが作成されます。
Git GUI ツールを使用している場合は、Amend last commitという名前のボタンがあります。そのボタンをクリックすると、最後のコミット ファイルとメッセージが表示されます。そのメッセージを編集するだけで、新しいコミット メッセージでコミットできます。
または、コンソール/端末から次のコマンドを使用します。
git commit -a --amend -m "My new commit message"
Git リベースを使用できます。たとえば、bbc643cd をコミットするように変更したい場合は、次を実行します。
$ git rebase bbc643cd^ --interactive
デフォルトのエディターで、コミットを変更したい行の「pick」を「edit」に変更します。変更を加えてからステージングします
$ git add <filepattern>
今、あなたは使用することができます
$ git commit --amend
コミットを変更し、その後
$ git rebase --continue
前の head コミットに戻ります。
最後のコミット メッセージのみを変更する場合は、次のようにします。
git commit --amend
これにより、テキスト エディターが表示され、最後のコミット メッセージを変更できます。
最後の 3 つのコミット メッセージ、またはその時点までのコミット メッセージのいずれかを変更する場合は、次HEAD~3
のgit rebase -i
コマンドを指定します。
git rebase -i HEAD~3
複数のブランチで古いコミット メッセージを変更する必要がある場合 (つまり、誤ったメッセージを含むコミットが複数のブランチに存在する場合)、次のコマンドを使用できます。
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
使用する
git commit --amend
詳細を理解するには、 4. Rewriting Git Historyが優れた投稿です。を使用しない場合 についても説明しますgit commit --amend
。
それが最後のコミットである場合は、コミットを修正してください。
git commit --amend -o -m "New commit message"
( -o
( --only
) フラグを使用して、コミット メッセージのみを変更するようにします)
埋められたコミットの場合は、素晴らしいインタラクティブなリベースを使用してください:
git rebase -i @~9 # Show the last 9 commits in a text editor
目的のコミットを見つけて( ) に変更pick
し、ファイルを保存して閉じます。終わり!r
reword
ミニチュア Vim のチュートリアル (または、わずか 8 回のキーストロークでリベースする方法3j
cw
r
EscZZ
):
vimtutor
時間があれば走るh
j
k
l
移動キーに対応←</kbd>↓</kbd>↑</kbd>→</kbd>3j
3 行下に移動します。i
挿入モードに入る - 入力したテキストがファイルに表示されますc
挿入モードを終了して「通常」モードに戻るu
元に戻すにはr
やり直すdd
、dw
、dl
行、単語、または文字をそれぞれ削除しますcc
、cw
、cl
行、単語、または文字をそれぞれ変更する ( と同じdd
i
)yy
、yw
、yl
行、単語、または文字をそれぞれコピー (「ヤンク」) するp
またはP
、それぞれ現在の位置の後または前に貼り付けます:w
Enterファイルを保存 (書き込み) する:q!
Enter保存せずに終了する:wq
Enterまたは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
* また、共同作業しているブランチの履歴を書き換えないでください。
ここにはいくつかのオプションがあります。できるよ
git commit --amend
それがあなたの最後のコミットである限り。
それ以外の場合、それが最後のコミットでない場合は、インタラクティブなリベースを実行できます。
git rebase -i [branched_from] [hash before commit]
次に、インタラクティブなリベース内で、そのコミットに編集を追加するだけです。表示されたらgit commit --amend
、コミットメッセージを実行して変更します。git reflog
そのコミット ポイントの前にロールバックする場合は、そのコミットを使用して削除することもできます。次に、git commit
もう一度実行します。
Git GUI を使用している場合は、プッシュされていない最後のコミットを次のように修正できます。
Commit/Amend Last Commit
最新のコミットを編集するだけの場合は、次を使用します。
git commit --amend
また
git commit --amend -m 'one line message'
ただし、複数のコミットを続けて編集したい場合は、代わりにリベースを使用する必要があります。
git rebase -i <hash of one commit before the wrong commit>
上記のようなファイルで、書き込みedit/e
または他のオプションのいずれかを選択し、保存して終了します。
これで、最初の間違ったコミットになります。ファイルに変更を加えると、自動的にステージングされます。タイプ
git commit --amend
それを保存して終了し、入力します
git rebase --continue
すべての選択が完了するまで、次の選択に移動します。
これらのことは、その特定のコミット後にすべての SHA ハッシュを変更することに注意してください。
最後のメッセージのみを変更したい場合は、--only
フラグまたはそのショートカット-o
をcommit --amend
次のように使用する必要があります。
git commit --amend -o -m "New commit message"
これにより、ステージングされたもので誤ってコミットを強化することがなくなります。もちろん、適切な$EDITOR
構成を持つことが最善です。その後、-m
オプションを省略できます。Git はコミット メッセージに古いメッセージを事前に入力します。このように簡単に編集できます。
この質問には多くの回答がありますが、 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 の経験が豊富ではないので、何が起こっているのかを説明するために間違った「専門用語」を使用した場合は、遠慮なく修正してください!)
git-rebase-rewordを使用できます
と同じ方法で(最後だけでなく)任意のコミットを編集するように設計されていますcommit --amend
$ git rebase-reword <commit-or-refname>
コミットを修正するためのインタラクティブなリベースのアクションにちなんで名付けられました:「reword」。この投稿とman -section interactive mode-を参照してください
例:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
エイリアスを追加しreci
ましrecm
たrecommit (amend)
。今、私はgit recm
orでそれを行うことができますgit recm -m
:
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
タイプミスのあるコミットをプッシュしたことに気付きました。元に戻すために、次のことを行いました。
git commit --amend -m "T-1000, advanced prototype"
git push --force
警告:変更を強制的にプッシュすると、リモート ブランチがローカル ブランチで上書きされます。保持したいものを上書きしないようにしてください。また、他の誰かがあなたとブランチを共有している場合、修正された (書き換えられた) コミットを強制的にプッシュすることにも注意してください。
私は以下を使用するのが好きです:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
コードをリモート ブランチ ( 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
これは、コミット メッセージが既にプッシュされている場合に変更する場合のベスト プラクティスです。