GitHubにコミットしてプッシュした後にコミットメッセージを編集する方法はありますか?インラインコメントだけでなく、「メモを追加」もありますが、実際にコミットメッセージを編集することはできません。 gitエクステンションには「コミットの修正」もありますが、それは既存のメッセージを編集しません。
git rebase -i <commit hash you want to change>^
これはあなたのデフォルトエディタ(通常 vi )をそれぞれのコミットとアクションのリストと共に開きます。デフォルトでは、アクションはpick
です。
メッセージを変更したいコミットがある場合は、pick
をreword
に変更してください。
保存して終了します(vi::wq
)。
このようなコミットごとに、コミットメッセージを編集するためのエディタが表示されます。あなたが合うようにそれを変えて、保存して、やめてください。
すべてのコミットメッセージの編集が完了したら、[プロンプト]コマンドに戻って、更新されたメッセージを含む新しいツリーを作成します。
git Push Origin --force
を使ってgithubにアップロードすることができます。
最後のコミットを直したいだけなら、ステップ1から4をgit commit --amend
に置き換えることができます。
Intellij Ideaでは、とても簡単にできます。
もしあなたのgit-graphがこんな感じなら...
O target-commit that you want to change its message [df9c192]
|
O parent-commit [b7ec061]
|
O
(df9c192
とb7ec061
は別々にtarget-commitとparent-commitのコミットハッシュです)
あなただけの次の指示を入力することができます...
git reset --soft b7ec061
git commit -m "your_new_description"
git Push -f
説明:
git reset --soft b7ec061
はあなたのファイルの変更を保持し、parent-commitにリセットします(すなわちb7ec061)git commit -m "..."
はローカルで新しいコミットを作成しますgit Push -f
はあなたの新しいコミットをサーバにプッシュし、古いコミットを置き換えます(すなわちdf9c192)。別の選択肢は、エラーを含むコミットオブジェクトを参照する追加の "errata commit"(およびPush)を作成することです - 新しいerrata commitも訂正を提供します。エラータコミットとは、実質的なコードの変更はしないが重要なコミットメッセージを含むコミットです。たとえば、readmeファイルに空白文字を1つ追加し、その変更を重要なコミットメッセージでコミットするか、gitオプション--allow-empty
を使用します。これは、リベースよりも確実に簡単で安全で、真の履歴を変更することはなく、ブランチツリーをきれいに保ちます(最新のコミットを修正する場合はamend
を使用するのも良い選択ですが、errataコミットは良い選択です)。より古いコミット)このようなことが起こることはめったにありませんが、単に間違いを文書化するだけで十分です。将来、gitログで機能キーワードを検索する必要がある場合、その元のコミットで間違ったキーワードが使用されていたため(元のタイプミス)、元の(誤った)コミットが表示されない可能性があります。次に、errata commitで、タイプミスがあった元のコミットをあなたに示します。これが例です:
$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d 作成者:First Last 作成日:水8月8日15時55分52秒2018年-0600 Errata commit: このコミットは実質的なコードの変更はありません。 このコミットは前回のコミットメッセージの修正を文書化する目的でのみ提供されています。 これはコミットオブジェクトに関連しますe083a7abd8deb5777cb304fa13731a4182a24be1元の不正確なコミットメッセージ: 背景色を赤に変更しました 訂正(*ハイライト表示*): 背景色を*青*に変更しました [ commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 作成者:First Last 日付:Wed Aug 8 15:43:16 2018年-0600 いくつかの中間コミットメッセージ ] commit e083a7abd8deb5776cb304fa13731a4182a24be1 作者:最初の最後の 日付:Wed Aug 8 13:31:32 2018 -0600 背景色をに変更しました。赤
@ Mureinikの回答 は良いが、初心者には理解できない。
最初の方法:
git commit --amend
のみが必要です。次のように表示されます。<your existing commit mesage foo bar>
# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# On branch is up to date with 'Origin/master'.
#
# changes to be committed:
# modified: foo.py
#
pick
などのコマンドのプレフィックスなしでメッセージを一番上にコミットします。これはすでに編集ページであり、 トップメッセージを編集しますおよびsave&quit、例えば:<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
git Push -u Origin master --force
または<how you Push normally> --force
を実行します。ここでのキーは--force
です。2番目の方法:
コミットハッシュはgit log
で確認するか、リポジトリのURLから抽出できます。私の場合の例は881129d771219cfa29e6f6c2205851a2994a8835
です
その後、git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
またはgit rebase -i HEAD^
を実行できます(最新の場合)
あなたは見るでしょう:
pick <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using Shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
noop
が表示される場合は、おそらくタイプミスです。最後にgit rebase -i 881129d771219cfa29e6f6c2205851a2994a88
が欠落している^
を行うと、保存せずにエディターを終了し、理由を把握する方がよいでしょう。noop
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
noop
の問題がない場合、Word pick
をreword
に変更するだけで、他はそのまま残ります(この時点ではコミットメッセージを編集しません)。reword <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
<your existing commit mesage foo bar>
# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# interactive rebase in progress; onto b057371
# Last command done (1 command done):
# reword d996ffb <existing commit message foo bar>
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'b057371'.
#
# changes to be committed:
# modified: foo.py
#
<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
git Push -u Origin master --force
または<how you Push normally> --force
を実行します。ここでのキーは--force
です。詳細については、 ドキュメント を参照してください。