在提交并推送到GitHub后,是否可以编辑提交消息?我看到有一个“添加注释”以及内联注释,但是没有实际编辑提交消息。git扩展中也有“修改提交”,但这不会编辑现有消息。
在提交并推送到GitHub后,是否可以编辑提交消息?我看到有一个“添加注释”以及内联注释,但是没有实际编辑提交消息。git扩展中也有“修改提交”,但这不会编辑现有消息。
Answers:
git rebase -i <commit hash you want to change>^
这将打开您的默认编辑器(通常为vi),其中包含每个提交和操作的列表。默认情况下,操作为pick
。
对于您希望更改消息的任何提交,请更改pick
为reword
。
保存并退出(在vi中:):wq
。
对于每个这样的提交,您都会得到一个编辑器来编辑提交消息。根据需要进行更改,保存并退出。
完成所有提交消息的编辑后,将返回到命令提示符,并使用更新后的消息创建一棵新树。
您现在可以使用将它们上传到github git push origin --force
。
如果您只需要更正最后一次提交,则可以用替换步骤1-4 git commit --amend
。
^
那儿-我确实建议基于要更改的提交的父级。
^^
以文本结尾的命令,^
例如: git rebase -i 2c747b32^^
在Intellij Idea中,您可以轻松做到。
git push origin --force
按照@Mureinik的答案中的建议执行。
如果你的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
git reset --soft b7ec061
将保留您对文件的更改并重置为父提交(即b7ec061)git commit -m "..."
将在本地创建一个新的提交git push -f
会将您的新提交推送到服务器并替换旧提交(即df9c192)另一个选择是创建一个附加的“勘误提交”(并推送),该引用引用包含错误的提交对象-新的勘误提交也提供了更正。勘误提交是指没有实质性代码更改而是重要的提交消息的提交-例如,在您的自述文件中添加一个空格字符,然后使用重要的提交消息来提交更改,或者使用git选项--allow-empty
。它肯定比重定基础更加容易和安全,它不会修改真实的历史记录,并且可以使分支树保持干净(使用amend
如果您要更正最新的提交,它也是一个不错的选择,但是对于较早的提交,勘误提交可能是一个不错的选择。这种事情很少发生,仅记录错误就足够了。将来,如果您需要在git日志中搜索功能关键字,则可能不会出现原始(错误)提交,因为该原始提交(原始错字)使用了错误的关键字-但是,该关键字会出现在勘误提交中,然后将您指向具有错字的原始提交。这是一个例子:
$ git日志 提交0c28141c68adae276840f17ccd4766542c33cf1d 作者:先到后 日期:2018年8月8日星期三15:55:52 2018-06-06 勘误提交: 该提交没有实质性的代码更改。 仅提供此提交是为了记录对先前提交消息的更正。 这涉及提交对象e083a7abd8deb5776cb304fa13731a4182a24be1 原始不正确的提交消息: 将背景色更改为红色 校正(*更改突出显示*): 将背景色更改为*蓝色* 提交032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 作者:先到后 日期:2018年8月8日星期三15:43:16 -0600 一些临时提交消息 提交e083a7abd8deb5776cb304fa13731a4182a24be1 作者:先到后 日期:2018年8月8日星期三13:31:32 2018-0600 将背景色更改为红色
@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
。第二种方法:
您可以查看git log
存储库URL或从中提取提交哈希,在我的例子中是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
最后遗漏^
了该错误,则最好退出编辑器而不保存并找出原因: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
...
<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
#
<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
。有关更多信息,请阅读文档。