コミットして GitHub にプッシュした後にコミットメッセージを編集する方法はありますか?インラインコメントの他に ‘add a note’ という機能があるようですが、実際にコミットメッセージを編集する方法はありません。git extensions には ‘amend commit’ というものがありますが、これは既存のメッセージを編集するものではありません
140 Matthew Peters 2014-05-09
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
に置き換えることができます
194 Mureinik 2014-05-10
Intellij Ideaでは、とても簡単にできます
- オープンバージョン管理(履歴)
- ログタブを選択
- コメントを変更するにはコミットを選択します
- 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
(df9c192
とb7ec061
はtarget-commitとparent-commitのコミットハッシュを別々に表します)
Solution:
以下のように入力すればいいのですが
git reset --soft b7ec061
git commit -m "your_new_description"
git push -f
Explanation:
git reset --soft b7ec061
はファイルの変更を保持し、親コミット(つまりb7ec061)にリセットしますgit commit -m "..."
はローカルに新しいコミットを作成します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:
- 最新のコミットメッセージを編集したいだけならば、
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
です
Second method:
コミットハッシュは
git log
で見ることができますし、リポジトリのURLから抽出することもできますあとは
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
の問題がなければ、pick
をreword
に変更してください
reword <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
- 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と同じように 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
です
詳細については、文書をご覧ください
0 Fruit 2019-08-24