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


129

GitHubにコミットしてプッシュした後、コミットメッセージを編集する方法はありますか?「メモを追加」とインラインコメントがありますが、コミットメッセージの実際の編集はありません。git拡張には「コミットの修正」もありますが、既存のメッセージは編集されません。


コミットを元に戻すことができます(このSOの質問のオプションを参照してください:stackoverflow.com/questions/4114095/…)-コメントのためにそれらを失わないように、必ず最初にコードの変更をバックアップしてください!
旅行テックガイ

Gitで誤ったコミットメッセージを編集する方法も参照してくださいスタックオーバーフロー。
アルジャン

回答:


183
  1. git rebase -i <commit hash you want to change>^

    これにより、デフォルトのエディター(通常は)が開き、それぞれのコミットとアクションのリストが表示されます。デフォルトでは、アクションはpickです。

  2. メッセージを変更するコミットについては、に変更pickrewordます。

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

  4. そのようなコミットごとに、コミットメッセージを編集するためのエディターを取得します。必要に応じて変更し、保存して終了します。

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

  5. を使用してgithubにアップロードできますgit push origin --force

最後のコミットを修正する必要がある場合は、手順1〜4をに置き換えることができますgit commit --amend


3
@MatthewPeters方法があるはずだと思いますが、知りません-コマンドラインを直接使用します。
ムレイニック

4
<変更したいコミットハッシュ>を指定できるようではなく、変更したいコミットの前にコミットのハッシュを指定するか、HEAD〜xを使用する必要があります。xはHEADからのコミット数です。変更したいアイテムが存在します。
ssc327

3
@ ssc327私は^そこにいることに注意してください-変更したいコミットの親に基づいてリベースすることを実際に提案しました。
ムレイニック

2
@Murenikあなたは正しいです、私は何らかの形で^を見逃しました
ssc327

1
@deadfish Windowsのコマンドラインを使用して、入力する必要があり^^リテラルを使用してコマンドを終了する^ 例: git rebase -i 2c747b32^^
ウィック

35

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

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

1
すでにリモートにプッシュした場合は機能しません。
18年

8
git push origin --force@Mureinikの回答で示唆されているように、後で実行する必要があります。
ダンマチャック

1
コミットがすでにプッシュされている場合、「reword」オプションは無効になります。
huyz

1
プッシュされたコミットに対してIntellij IDEAでそれを行うには、最初にインタラクティブなリベースから開始する必要があります(Gitのコマンドラインから行う場合と同様)。リベースを行うには、プロジェクト->「Git」メニュー項目->「リポジトリ」->「リベース...」(最後のメニュー項目)を右クリックします。[オント]フィールドで変更するコミットの前にコミットのSHAを挿入し、[リベース]をクリックします。その後、インタラクティブなリベースプロンプトが表示されます。変更するコミットの横のアクションドロップボックスで「reword」を選択し、「リベースの開始」ボタンをクリックします(次のコメントに続く)
jplandrain

1
(続き)変更したいコミットごとにテキストプロンプトが表示されます。ログメッセージが変更された後、さらに変更を適用できます(「reword」オプションがグレー表示されなくなったことに注意してください)。終了したら、変更を強制的にプッシュして、インタラクティブなリベースを完了できます。プロセス全体は、実際にはコマンドラインから実行する@Mureinikの回答とまったく同じです。
jplandrain

3

前提:

あなたのgitグラフが次のように見える場合...

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

説明:

  1. git reset --soft b7ec061 ファイルの変更を保持し、親コミットにリセットします(つまり、b7ec061)
  2. git commit -m "..." ローカルで新しいコミットを作成します
  3. git push -f 新しいコミットをサーバーにプッシュし、古いコミットを置き換えます(つまり、df9c192)

2

別のオプションは、エラーを含むコミットオブジェクトを参照する追加の「エラータコミット」(およびプッシュ)を作成することです。新しいエラータコミットも修正を提供します。エラッタコミットとは、実質的なコードの変更はなく、重要なコミットメッセージがあるコミットです。たとえば、readmeファイルにスペース文字を1つ追加し、その変更を重要なコミットメッセージでコミットするか、gitオプションを使用します--allow-empty。リベースよりも確かに簡単で安全であり、真の履歴を変更せず、ブランチツリーをクリーンに保ちます(使用amendまた、最新のコミットを修正する場合にも適していますが、古いコミットにはエラータコミットが適している場合があります)。この種のことはめったに起こらないので、単に間違いを文書化するだけで十分です。将来、機能キーワードのgitログを検索する必要がある場合、元のコミット(元のタイプミス)で間違ったキーワードが使用されたため、元の(誤った)コミットは表示されない可能性がありますが、キーワードは表示されますエラッタコミットでは、タイプミスがあった元のコミットが示されます。以下に例を示します。

$ git log
コミット0c28141c68adae276840f17ccd4766542c33cf1d
著者:最初の最後 
日付:2018年8月8日水曜日15:55:52 -0600

    エラータのコミット:
    このコミットには実質的なコード変更はありません。
    このコミットは、前のコミットメッセージの修正を文書化するためにのみ提供されています。
    これは、オブジェクトe083a7abd8deb5776cb304fa13731a4182a24be1をコミットすることに関するものです。
    元の不正なコミットメッセージ:
        背景色を赤に変更しました
    修正(*強調表示の変更*):
        背景色を*青*に変更しました

コミット032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
著者:最初の最後 
日付:2018年8月8日水曜日15:43:16 -0600

    暫定的なコミットメッセージ

コミットe083a7abd8deb5776cb304fa13731a4182a24be1
著者:最初の最後 
日付:2018年8月8日(水)13:31:32 -0600

    背景色を赤に変更しました

確かに安全ですが、読むべきテキストがたくさんあります。履歴を書き直すことをお
勧めします

0

@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からコミットハッシュを確認したり、リポジトリの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問題がなければ、単語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、do git push -u origin master --forceまたは<how you push normally> --forceです。ここで重要なのは--forceです。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.