web-dev-qa-db-ja.com

GitHubでコミットメッセージを編集する方法はありますか?

GitHubにコミットしてプッシュした後にコミットメッセージを編集する方法はありますか?インラインコメントだけでなく、「メモを追加」もありますが、実際にコミットメッセージを編集することはできません。 gitエクステンションには「コミットの修正」もありますが、それは既存のメッセージを編集しません。

114
Matthew Peters
  1. git rebase -i <commit hash you want to change>^

    これはあなたのデフォルトエディタ(通常 vi )をそれぞれのコミットとアクションのリストと共に開きます。デフォルトでは、アクションはpickです。

  2. メッセージを変更したいコミットがある場合は、pickrewordに変更してください。

  3. 保存して終了します(vi::wq)。

  4. このようなコミットごとに、コミットメッセージを編集するためのエディタが表示されます。あなたが合うようにそれを変えて、保存して、やめてください。

    すべてのコミットメッセージの編集が完了したら、[プロンプト]コマンドに戻って、更新されたメッセージを含む新しいツリーを作成します。

  5. git Push Origin --forceを使ってgithubにアップロードすることができます。

最後のコミットを直したいだけなら、ステップ1から4をgit commit --amendに置き換えることができます。

160
Mureinik

Intellij Ideaでは、とても簡単にできます。

  1. オープンバージョン管理(履歴)
  2. ログタブを選択
  3. コメントを変更するためにコミットを選択
  4. f2(Mac fn + F2)を押して、コミットメッセージを更新する
31
fedrbodr

もしあなたのgit-graphがこんな感じなら...

O   target-commit that you want to change its message [df9c192]
|
O   parent-commit [b7ec061]
|
O

df9c192b7ec061は別々にtarget-commitとparent-commitのコミットハッシュです)

あなただけの次の指示を入力することができます...

git reset --soft b7ec061
git commit -m "your_new_description"
git Push -f

説明:

  1. git reset --soft b7ec061はあなたのファイルの変更を保持し、parent-commitにリセットします(すなわちb7ec061)
  2. git commit -m "..."はローカルで新しいコミットを作成します
  3. git Push -fはあなたの新しいコミットをサーバにプッシュし、古いコミットを置き換えます(すなわちdf9c192)。
2
Alumi Lu

別の選択肢は、エラーを含むコミットオブジェクトを参照する追加の "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 
 
背景色をに変更しました。赤
2
rob_7cc

@ Mureinikの回答 は良いが、初心者には理解できない。

最初の方法:

  1. 最新のコミットメッセージのみを編集する場合は、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
#
  1. ご覧のとおり、pickなどのコマンドのプレフィックスなしでメッセージを一番上にコミットします。これはすでに編集ページであり、 トップメッセージを編集しますおよびsave&quit、例えば:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. 次に、git Push -u Origin master --forceまたは<how you Push normally> --forceを実行します。ここでのキーは--forceです。

2番目の方法:

  1. コミットハッシュはgit logで確認するか、リポジトリのURLから抽出できます。私の場合の例は881129d771219cfa29e6f6c2205851a2994a8835です

  2. その後、git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835またはgit rebase -i HEAD^を実行できます(最新の場合)

  3. あなたは見るでしょう:

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
  1. しかし、noopが表示される場合は、おそらくタイプミスです。最後にgit rebase -i 881129d771219cfa29e6f6c2205851a2994a88が欠落している^を行うと、保存せずにエディターを終了し、理由を把握する方がよいでしょう。
noop

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
  1. noopの問題がない場合、Word pickrewordに変更するだけで、他はそのまま残ります(この時点ではコミットメッセージを編集しません)。
reword <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
#  p, pick = use commit
...
  1. 保存して終了すると、方法#1と同様の編集ページが表示されます。
<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
#
  1. メソッド#1と同じように上部のメッセージを編集し、保存して終了します。例:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. 繰り返しますが、方法#1と同じように、git Push -u Origin master --forceまたは<how you Push normally> --forceを実行します。ここでのキーは--forceです。

詳細については、 ドキュメント を参照してください。

0
林果皞