コミットメッセージに間違ったことを書いた。
メッセージを変更するにはどうすればいいですか。コミットはまだプッシュされていません。
git commit --amend
エディターが開き、最新のコミットのコミットメッセージを変更できます。また、次のコマンドラインでコミットメッセージを直接設定できます。
git commit --amend -m "New commit message"
…ただし、これにより、複数行のコミットメッセージや小さな修正を入力するのが面倒になります。
これを行う前に、作業コピーの変更stagedがないことを確認してください。そうしないと、それらもコミットされます。 (Unstaged変更はコミットされません。)
すでにコミットをリモートブランチにプッシュしている場合、 プッシュを強制的にプッシュする必要があります で:
git Push <remote> <branch> --force
# Or
git Push <remote> <branch> -f
警告:強制プッシュは、リモートブランチをローカルブランチの状態で上書きします。ローカルブランチにはないリモートブランチのコミットがある場合、それらのコミットは失われます。
警告:すでに他の人と共有しているコミットの修正には注意してください。コミットの修正は本質的にrewritesそれらは異なる SHA IDを持っているため、他の人があなたが書き直した古いコミットのコピーを持っている場合に問題を引き起こします。古いコミットのコピーを持っている人は、自分の作業を新しく書き直されたコミットと同期する必要がありますが、これは難しい場合があります。完全に。
別のオプションは、インタラクティブなリベースを使用することです。
これにより、最新のメッセージではない場合でも、更新するメッセージを編集できます。
Git squashを実行するには、次の手順を実行します。
// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X
コミットを終了したら、メッセージを編集するためにe/r
を選択します
git rebase -i HEAD~X
を使用すると、X
コミットよりもmoreになる可能性があります。 Gitは最後のX
コミットのすべてのコミットを「収集」し、その範囲内のどこかにマージがあった場合、すべてのコミットも表示されるため、結果はX +になります。
複数のブランチでそれを行う必要があり、コンテンツを修正するときに競合に直面する可能性がある場合は、 git rerere
を設定し、gitにそれらの競合を自動的に解決させます。
git commit --amend -m "your new message"
修正したいコミットが最新のものではない場合:
git rebase --interactive $parent_of_flawed_commit
いくつかの欠陥のあるコミットを修正したい場合は、それらのうち最も古いものの親を渡してください。
あなたが与えたもの以降のすべてのコミットのリストを含むエディタが表示されます。
pick
をreword
(または古いバージョンのGitではedit
)に変更します。reword にしたいコミットごとに、Gitはあなたをエディタに戻します。 edit にしたいコミットごとに、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 このコマンドは、エディタを起動します。最初のコミット(変更したいもの)を「pick」ではなく「edit」としてマークしてから、保存してエディタを終了します。コミットしてから実行したい変更を行います。
git commit --amend
git rebase --continue
注:git commit --amend
によって開かれたエディターからも「必要な変更を加える」ことができます。
すでに述べたように、git commit --amend
は最後のコミットを上書きする方法です。注意: ファイルを上書きしたい の場合、コマンドは次のようになります。
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ツールを使用している場合は、[最後のコミットを修正]というボタンがあります。そのボタンをクリックすると、最後のコミットファイルとメッセージが表示されます。そのメッセージを編集するだけで、新しいコミットメッセージでコミットできます。
またはコンソール/端末からこのコマンドを使用します。
git commit -a --amend -m "My new commit message"
Git rebasing を使うことができます。たとえば、bbc643cdをコミットするように修正したい場合は、次のコマンドを実行します。
$ git rebase bbc643cd^ --interactive
デフォルトのエディタで、コミットを変更したい行の 'pick'を 'edit'に変更します。変更を加えてからステージング
$ git add <filepattern>
今すぐ使えます
$ git commit --amend
コミットを変更し、その後
$ git rebase --continue
直前のヘッドコミットに戻ります。
最後のコミットメッセージだけを修正したい場合は、次のようにします。
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
は、すべての branch と tags が書き換えられることを確認します。
古い参照をバックアップしているため、コマンドを実行する前の状態に簡単に戻ることができます。
あなたのマスターを回復し、ブランチold_master
でアクセスしたいとします。
git checkout -b old_master refs/original/refs/heads/master
つかいます
git commit --amend
それを詳細に理解するために、すばらしい投稿は4. Reit Git Historyです。また、 使用しない場合git commit --amend
についても説明します。
ここにはいくつかの選択肢があります。できるよ
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 -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
移動キーに対応 ←↓↑→3j
3行下に移動i
挿入モードに入ります - あなたがタイプしたテキストはファイルに現れますc
挿入モードを終了して「通常」モードに戻るu
元に戻すにはr
やり直すdd
、 dw
、 dl
行、単語、または文字をそれぞれ削除します。cc
、 cw
、 cl
行、単語、または文字をそれぞれ変更します。 dd
i
)yy
、 yw
、 yl
行、単語、文字をそれぞれコピー( "yank")するp
または P
現在位置の前後にペーストする:w
Enter ファイルを保存(書き込み)する:q!
Enter 保存せずに終了する:wq
Enter または ZZ
保存して終了するテキストをたくさん編集する場合は、Dvorakキーボードレイアウトに切り替えて、タッチタイプを学び、そしてvimを学びましょう。 努力する価値はありますか? はい。
ProTip™:履歴を書き換える「危険な」コマンドを試すことを恐れないでください* - Gitはデフォルトで90日間コミットを削除しません。あなたはそれらをreflogで見つけることができます:
$ git reset @~3 # go back 3 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 GUI をできる限り使用していますが、最後のコミットを修正する選択肢があります。
また、git rebase -i Origin/master
は、マスターの上で行ったコミットを常に表示して、修正、削除、並べ替え、またはスカッシュのオプションを提供する、Niceマントラです。最初にそのハッシュを入手する必要はありません。
うわー、だからこれを行うにはたくさんの方法があります。
これを行うもう1つの方法は、最後のコミットを削除することですが、作業内容を失うことがないようにその変更を保持することです。その後、修正したメッセージを使用して別のコミットを実行できます。これは次のようになります。
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
ファイルの追加や変更を忘れた場合は、必ずこれを行います。
--soft
の代わりに--hard
を指定するにはRememberを使います。そうでなければコミットを完全に失います。
古いメッセージ(つまり、最新のメッセージだけでなく)の編集に役立つWindows/Mac GUIを探している方には、 SourceTree をお勧めします。従うべき手順は以下のとおりです。
まだリモートにプッシュされていないコミットの場合:
Unable to create 'project_path/.git/index.lock': File exists.
で失敗するのを見ました同時。問題が正確に何であるか、またはSourceTreeの将来のバージョンで修正されるかどうかはわかりませんが、これが発生した場合は、一度に1つずつリベースすることをお勧めします(遅くなりますが、より信頼性が高いようです)。...または...すでにプッシュされたコミットの場合:
この回答 の手順に従います。これは上記と似ていますが、コマンドラインからさらにコマンドを実行してブランチを強制プッシュします。すべてを読んで必要な注意を払ってください!
最新のコミットを編集したいだけなら:
git commit --amend
または
git commit --amend -m 'one line message'
しかし、いくつかのコミットを続けて編集したい場合は、代わりにリベースを使用してください。
git rebase -i <hash of one commit before the wrong commit>
上記のようなファイルにedit/eまたは他のオプションの1つを書いて、保存を押して終了します。
さて、あなたは最初の間違ったコミットにいるでしょう。ファイルに変更を加えると、それらは自動的にステージングされます。タイプ
git commit --amend
保存して終了して入力
git rebase --continue
すべての選択が終了するまで次の選択に移動します。
これらのことは、その特定のコミットの後にあなたのすべてのSHAハッシュを変えることに注意してください。
最後のメッセージだけを変更したい場合は、--only
フラグまたはそのショートカット-o
とcommit --amend
を使用する必要があります。
git commit --amend -o -m "New commit message"
これはあなたが誤って段階的なものであなたのコミットを強化しないことを確実にします。もちろん、適切な$EDITOR
設定をするのが最善です。それから-m
オプションを省略することができ、gitはコミットメッセージを古いもので事前に埋めます。このようにして簡単に編集することができます。
最後の間違ったコミットメッセージを1行の新しいコミットメッセージで更新します。
git commit --amend -m "your new commit message"
あるいは、以下のようにgit resetを試してください。
# You can reset your head to n number of commit
# NOT a good idea for changing last commit message
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^
# it will reset you last commit. Now, you
# can re-commit it with new commit message.
git reset
は、1つのコミットを複数のコミットに分割するのにも役立ちます。
# reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (you can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# add and commit your files seperately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
ここであなたは最後のコミットを2つのコミットに分割しました。
この質問に関しては多くの回答がありますが、どれもVIMを使用して古いコミットメッセージを変更する方法を詳細に説明していません。私はこれを自分でやろうとしていたので、ここで私は特にVIMの経験がない人のためにこれをどのようにして行ったか詳細に書き留めます!
私はすでにサーバーにプッシュした5つの最新のコミットを変更したいと思いました。他の誰かがすでにこれから引っ張ってきた場合、コミットメッセージを変更することで混乱する可能性がある場合、これは非常に「危険な」原因です。しかし、あなたがあなた自身の小さなブランチに取り組んでいて、誰もそれを引っ張っていないと確信しているなら、あなたはそれをこのように変えることができます:
最新の5つのコミットを変更したいとしましょう。それから端末にこれを入力します。
git rebase -i HEAD~5
* 5は変更したいコミットメッセージの数です。 (したがって、10回目を最後のコミットに変更したい場合は、10を入力します)
このコマンドはあなたをVIMに導きますあなたはあなたのコミット履歴を '編集'できます。このようにして、最後の5つのコミットが上部に表示されます。
pick <commit hash> commit message
pick
の代わりにreword
を書く必要があります。これをVIMで行うには、i
と入力します。これにより、INSERTモードに入ります。 (一番下の単語「INSERT」で挿入モードになっていることがわかります)コミットの場合は、タイプをreword
ではなくpick
に変更します。
その後、この画面を保存して終了する必要があります。最初にescボタンを押して「コマンドモード」に入ります。 (一番下のWordのINSERTが消えたらコマンドモードであることを確認できます)それから:
と入力することでコマンドを入力できます。保存して終了するコマンドはwq
です。 :wq
と入力しても、正しいことはわかります。
それからVIMあなたが書き換えたいすべてのコミットメッセージに行きます、ここであなたは実際にコミットメッセージを変更することができます。これを行うには、INSERTモードに入り、コミットメッセージを変更し、コマンドモードに入り、保存して終了します。これを5回実行すれば、あなたはVIMから抜け出します。
それから、すでに間違ったコミットをプッシュした場合は、それらを上書きするためにgit Push --force
を実行する必要があります。 git Push --force
は非常に危険なことであることを覚えておいてください。ですから、あなたが間違ったコミットをしたので、だれもサーバーから引っ張らないように注意してください。
コミットメッセージを変更しました。
(ご覧のとおり、私はVIMの経験が少ないので、何が起こっているのかを説明するために間違った「専門用語」を使用した場合は、遠慮なく訂正してください。)
git-rebase-reword を使用できます。
それはcommit --amend
と同じ方法で(最後だけではなく)あらゆるコミットを編集するように設計されています
$ git rebase-reword <commit-or-refname>
それはコミットを修正するための対話式リベースのアクションにちなんで名付けられました: "reword"。 この記事を見る そして man - セクション対話モード -
例:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
recommit (amend)
の代わりにreci
、recm
というエイリアスを追加しました。これでgit recm
または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?
重要な注意: 直接プッシュを使うと、他の開発者が同じブランチに取り組んでいるというコードの問題が発生する可能性があります。そのため、これらの衝突を避けるために、 force Push を作成する前に、ブランチからコードを取得する必要があります。
git commit --amend -m "BRANCH-NAME : your new message"
git pull Origin BRANCH-NAME
git Push -f Origin BRANCH-NAME
コミットメッセージを変更するとき、これがすでにプッシュされている場合はこれがベストプラクティスです。