#1 楼
git rebase -i <commit hash you want to change>^
这将打开默认编辑器(通常为vi),其中包含每个提交和动作的列表。默认情况下,操作为
pick
。对于要更改消息的任何提交,请将
pick
更改为reword
。保存并退出(在vi中:
:wq
)。对于每个这样的提交,您都会得到一个编辑器来编辑提交消息。根据需要进行更改,保存并退出。
完成所有提交消息的编辑后,您将返回到命令提示符,并有一个包含更新消息的新树。
现在,您可以使用
git push origin --force
将它们上传到github。如果只需要修复上一次提交,则可以用
git commit --amend
替换步骤1-4。 评论
@MatthewPeters我认为应该有办法,但是我不知道-我直接使用命令行。
– Mureinik
2014年5月15日15:13
似乎您不能指定<要更改的提交哈希>,而是需要在要更改的提交之前指定提交的哈希,或使用HEAD〜x,其中x是HEAD提交的数量,其中您要更改的项目位于。
– ssc327
18/12/18在21:32
@ ssc327请注意,我在这里^-我确实建议基于要更改的提交的父级。
– Mureinik
18/12/19在5:16
@Murenik你是正确的,我莫名其妙地错过了看到^
– ssc327
18/12/19在11:41
@deadfish使用Windows命令行,您必须输入^^以以文字^结束命令,例如:git rebase -i 2c747b32 ^^
–维克
19年2月15日在0:59
#2 楼
在Intellij Idea中,您可以如此轻松地完成操作。打开版本控制(历史记录)
选择日志选项卡
选择提交以更改注释
按F2 (Mac fn + F2),并更新您的提交消息
评论
如果您已经推送到远程,则无法正常工作。
–收款人
18年5月5日在10:45
然后必须按照@Mureinik的答案中的建议执行git push origin --force。
–丹·麦克(DanMacák)
18年15月15日在8:21
如果已经推送了提交,则禁用“ reword”选项。
–huyz
19年1月10日在12:43
要使用Intellij IDEA对已推送的提交执行此操作,您必须首先从交互式变基开始(就像在Git命令行中所做的那样)。为了进行重新设置,请右键单击您的项目->“ Git”菜单项->“存储库”->“重新设置...”(最后一个菜单项)。在“ Onto”字段中将提交的SHA插入到要修改的SHA之前,然后单击“ Rebase”。然后,您将获得交互式变基提示。在要修改的提交旁边的操作下拉框中选择“ reword”,然后单击“开始重新设置”按钮(在下一条注释中继续)
– jplandrain
19年4月11日在11:52
(续)然后,将向您显示要修改的每个提交的文本提示。修改日志消息后,您可以进行进一步的修改(请注意,现在“ reword”选项不再变为灰色)。完成后,您可以强制推送您的修改以结束交互式变基。整个过程实际上与@Mureinik的答案完全相同,后者是通过命令行执行的。
– jplandrain
19年4月11日在11:52
#3 楼
前提:如果您的git-graph看起来像...
O target-commit that you want to change its message [df9c192]
|
O parent-commit [b7ec061]
|
O
(
df9c192
和b7ec061
是target-commit和父提交,分别)解决方案:
您只需键入以下说明...
git reset --soft b7ec061
git commit -m "your_new_description"
git push -f
说明:
git reset --soft b7ec061
将保留文件更改并重置为父提交(即b7ec061)git commit -m "..."
将在本地创建新文件commit git push -f
会将您的新提交推送到服务器并替换旧提交(即df9c192)评论
它仅更改我的最后提交消息。如果我想在上一次提交消息之前进行更改怎么办?
–Jigar Bhatt
19年11月15日在6:10
你是对的!此方法仅适用于最后的提交消息
–路K
20 Jan 15'7:27
#4 楼
另一个选择是创建一个附加的“勘误提交”(并推送),该引用引用包含错误的提交对象-新的勘误提交也提供了更正。勘误提交是指没有实质性代码更改而是重要的提交消息的提交-例如,在您的自述文件中添加一个空格字符,然后使用重要的提交消息来提交更改,或者使用git选项--allow-empty
。它肯定比重定基础更容易,更安全,它不会修改真实的历史记录,并且可以使分支树保持整洁(如果要更正最新的提交,则使用amend
也是一个不错的选择,但是勘误提交可能是一个不错的选择较旧的提交)。这种事情很少发生,仅记录错误就足够了。将来,如果您需要在git日志中搜索Feature关键字,则可能不会出现原始(错误)提交,因为在该原始提交(原始错字)中使用了错误的关键字-但是,该关键字会出现在勘误提交中,然后将您指向具有错字的原始提交。这是一个示例:$ 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
评论
可以肯定它是安全的,但是要阅读很多文本。我希望重写历史记录:)
– pkalinow
19年5月9日在10:53
#5 楼
@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
...
保存并退出将请参见类似于方法#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
。有关更多信息,请阅读文档。
#6 楼
如果需要在Git中编辑错误的提交消息,则可以使用git commit --amend
而不对索引进行任何更改;如果有人喜欢,Git仍然允许编辑该提交消息,或者可以使用-m
选项提供新消息,例如git commit --amend -m "COMMIT MESSAGE"
这仍然需要替换最后的提交,因为消息文本是提交的一部分;新提交将具有与上一个提交相同的内容(指向同一棵树)。
这是GitHub更改提交消息的指南
重写最新的提交消息
提交尚未在线进行
修改较旧或多个提交消息
重要说明
如果您已在提交消息中包含敏感信息,则强制
使用修订的提交推送提交可能不会从GitHub上删除原始的
提交。旧提交不会成为后续
克隆的一部分;但是,它仍然可以缓存在GitHub上,并且可以通过
提交ID进行访问。您必须使用旧的提交ID与GitHub支持或GitHub高级支持联系,以将其从远程存储库中清除。
评论
您可以尝试还原提交(请参见此SO问题中的某些选项:stackoverflow.com/questions/4114095/…)-仅确保您首先备份任何代码更改,以免因评论而丢失这些更改!另请参阅如何在Git中编辑错误的提交消息?在堆栈溢出上。