git – GitHub でコミットメッセージを編集する方法はあるの?

git github

コミットして GitHub にプッシュした後にコミットメッセージを編集する方法はありますか?インラインコメントの他に ‘add a note’ という機能があるようですが、実際にコミットメッセージを編集する方法はありません。git extensions には ‘amend commit’ というものがありますが、これは既存のメッセージを編集するものではありません

  140  Matthew Peters  2014-05-09


ベストアンサー

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

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

  2. メッセージを変更したいコミットについては、pickrewordに変更してください

  3. 保存して終了(viでは: :wq)

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

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

  5. これでgit push origin --forceでgithubにアップロードできるようになりました

前回のコミットを修正するだけなら、ステップ1-4をgit commit --amendに置き換えることができます

194  Mureinik  2014-05-10


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

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

35  fedrbodr  2018-06-18


Premise:

git-graphが次のようになっているとします

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

(df9c192b7ec061はtarget-commitとparent-commitのコミットハッシュを別々に表します)

Solution:

以下のように入力すればいいのですが

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

Explanation:

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

3  KY Lu  2019-03-14


もうひとつの方法は、エラーを含むコミットオブジェクトを参照する “errata commit” を追加して (そして push して) 作成することです。errata コミットとは、実質的なコードの変更はないものの、重要なコミットメッセージを含むコミットのことです。これはリベースよりも簡単で安全ですし、真の履歴を変更することもありませんし、ブランチツリーをきれいに保つことができます (最新のコミットを修正するのであれば amend を使うのもいいでしょうが、古いコミットの場合はエラッタコミットを使うのもいいでしょう)。この種のことは滅多に起こらないので、単にミスを文書化するだけで十分です。将来的には、git のログから機能キーワードを探したいときに、元の (誤った) コミットが表示されなくなるかもしれません。以下に例を示します

$ git log
commit 0c28141c68adae276840f17ccd4766542c33cf1d
Author: First Last
Date:   Wed Aug 8 15:55:52 2018 -0600

Errata commit:
This commit has no substantive code change.
THis commit is provided only to document a correction to a previous commit message.
This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1
Original incorrect commit message:
Changed background color to red
Correction (*change highlighted*):
Changed background color to *blue*

commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
Author: First Last
Date:   Wed Aug 8 15:43:16 2018 -0600

Some interim commit message

commit e083a7abd8deb5776cb304fa13731a4182a24be1
Author: First Last
Date:   Wed Aug 8 13:31:32 2018 -0600

Changed background color to red

2  rob_7cc  2018-08-08


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

First method:

  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 です

Second method:

  1. コミットハッシュはgit logで見ることができますし、リポジトリのURLから抽出することもできます

  2. あとはgit rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835git 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. Save&quitすると、メソッド#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と同じように save&quit します
<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  Fruit  2019-08-24


タイトルとURLをコピーしました