提交并推送到 GitHub 后,有没有办法编辑提交消息?我看到有“添加注释”和内联评论,但没有实际编辑提交消息。git 扩展中也有“修改提交”,但这不会编辑现有消息。
答案1
git rebase -i <commit hash you want to change>^
这将打开你的默认编辑器(通常六),其中包含提交列表以及每个提交的操作。默认情况下,操作为
pick
。对于您想要更改消息的任何提交,请更改
pick
为reword
。保存并退出(在 vi 中
:wq
:)。对于每个这样的提交,您将获得一个编辑器来编辑提交消息。根据需要进行更改,保存并退出。
一旦完成编辑所有提交消息,您将返回到命令提示符,并拥有一个包含更新消息的新树。
您现在可以使用将它们上传到 github
git push origin --force
。
如果您只需要修复最后一次提交,则可以将步骤 1-4 替换为git commit --amend
。
答案2
在 Intellij Idea 中您可以轻松完成此操作。
- 开放版本控制(历史)
- 选择日志选项卡
- 选择提交以更改评论
- 按 F2(Mac fn + F2),然后更新您的提交消息
答案3
前提:
如果你的 git-graph 看起来像......
O target-commit that you want to change its message [df9c192]
|
O parent-commit [b7ec061]
|
O
(df9c192
和b7ec061
分别是目标提交和父提交的提交哈希值)
解决方案:
您只需输入以下说明...
git reset --soft b7ec061
git commit -m "your_new_description"
git push -f
解释:
git reset --soft b7ec061
将保留您对文件的更改并重置为父提交(即 b7ec061)git commit -m "..."
将在本地创建新的提交git push -f
将会把你的新提交推送到服务器并替换旧提交(即 df9c192)
答案4
@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
,这已经是編輯頁面你可以直接编辑顶部消息和保存并退出,例如:
<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
。
第二种方法:
你可以通过存储库 URL 查看提交哈希
git log
,或者从中提取,我的例子是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
which missing^
,你最好退出编辑器而不保存并找出原因:
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
...
- 保存并退出将看到編輯頁面与方法#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相同,然后保存并退出,例如:
<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
。
欲了解更多信息,请阅读文档。