我已经提交了git并随后推送。我想更改提交消息。如果我理解正确,这是不可取的,因为在我进行此类更改之前,可能有人从远程存储库中删除了内容。如果我知道没人拉过呢?

有办法做到这一点吗?


当前回答

只要说:

git commit --amend -m "New commit message"

然后

git push --force

其他回答

另一个选项是创建一个额外的“勘误表提交”(和推送),它引用包含错误的提交对象——新的勘误表提交也提供了更正。勘误表提交是一种没有实质性代码更改的提交,但有一条重要的提交消息——例如,在自述文件中添加一个空格字符,并使用重要的提交信息提交更改,或者使用git选项——allow empty。它肯定比重定基更容易、更安全,它不会修改真实的历史记录,并且保持了分支树的干净(如果您正在更正最近的提交,那么使用modify也是一个不错的选择,但对于较旧的提交,错误提交可能是一个不错选择)。这种情况很少发生,因此简单地记录错误就足够了。将来,如果您需要在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

需要注意的是,如果您对多个引用使用push-force,那么它们都将被修改。确保注意git repo的配置位置。幸运的是,通过指定要更新的单个分支,有一种方法可以稍微保护这个过程。阅读git手册页:

注意--力应用于所有被推动的ref,因此使用它具有push.default设置为匹配或多个push使用remote.*.push配置的目标可能会覆盖其他引用比当前分支(包括严格落后的本地引用它们的远程对应物)。要强制推送仅一个分支,请使用+在refspec前面推送(例如git推送原点+主推送强制推到主分支)。

这对我来说很好,

git签出原点/分支名称

如果您已经在分支中,那么最好进行拉入或重入

git pull

or

git -c core.quotepath=false fetch origin --progress --prune

稍后您可以简单地使用

git commit --amend -m "Your message here"

或者如果您想打开文本编辑器,请使用

git commit --amend

如果你有很多评论,我更喜欢使用文本编辑器。您可以使用命令设置首选文本编辑器

git config --global core.editor your_preffered_editor_here

无论如何,当您更改完提交消息后,保存并退出

然后运行

git push --force

你已经完成了

确保在正确的分支上进行更改

git checkout 

#确保您在正确的分支上进行更改只是为了确定:

git checkout branchname

Then

git commit --amend -m "new message"

然后按下

git push --force

在控制台中使用以下两个步骤:

git commit --amend -m "new commit message"

然后

git push -f

完成时间:)