在提交并推送到GitHub后,是否可以编辑提交消息?我看到有一个“添加注释”以及内联注释,但是没有实际编辑提交消息。 git扩展中也有“修改提交”,但不会编辑现有消息。

评论

您可以尝试还原提交(请参见此SO问题中的某些选项:stackoverflow.com/questions/4114095/…)-仅确保您首先备份任何代码更改,以免因评论而丢失这些更改!

另请参阅如何在Git中编辑错误的提交消息?在堆栈溢出上。

#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


df9c192b7ec061是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 881129d771219cfa29e6f6c2205851a2994a8835git 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高级支持联系,以将其从远程存储库中清除。