推送后更改git commit消息(假设没有人从远程拉出)

时间:2012-01-24 01:58:25

标签: git push commit

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

有办法做到这一点吗?

15 个答案:

答案 0 :(得分:1200)

更改历史记录

如果是最近的提交,您只需执行此操作:

git commit --amend

这会使编辑器显示最后一次提交消息,并允许您编辑消息。 (如果要删除旧邮件并使用新邮件,可以使用-m。)

然后当你推动时,执行此操作:

git push --force-with-lease <repository> <branch>

或者您可以使用“+”:

git push <repository> +<branch>

或者您可以使用--force

git push --force <repository> <branch>

使用这些命令时要小心。

  • 如果其他人将更改推送到同一分支,您可能希望避免破坏这些更改。 --force-with-lease选项是最安全的,因为如果有任何上游更改它将中止(

  • 如果您没有明确指定分支,Git将使用默认的推送设置。如果您的默认推送设置为“匹配”,则您可以同时销毁多个分支上的更改。

之后拉/取

任何已经拉过的人现在都会收到一条错误消息,他们需要通过这样的方式更新(假设他们自己没有做任何更改):

git fetch origin
git reset --hard origin/master # Loses local commits

使用reset --hard时要小心。如果您对分支进行了更改,那么这些更改将被销毁。

关于修改历史记录的说明

被破坏的数据实际上只是旧的提交消息,但--force不知道这一点,并且也会愉快地删除其他数据。因此,将--force视为“我想销毁数据,我确切知道哪些数据正在被销毁。”但是,当提交被破坏的数据时,您通常可以从reflog中恢复旧的提交 - 数据实际上是孤立的而不是被销毁(尽管孤立的提交会被定期删除)。

如果您认为自己没有销毁数据,请远离--force ... bad things might happen

这就是--force-with-lease更安全的原因。

答案 1 :(得分:369)

请说:

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

然后

git push --force

答案 2 :(得分:193)

可能会迟到,这是我在这里看不到的答案。

第1步git rebase -i HEAD~n为受影响的最后n次提交做交互式rebase。

git会弹出一个编辑器来处理这些提交,请注意这个命令:# r, reword = use commit, but edit the commit message,这正是我们所需要的。

Step2 :对于要更新msg的提交,请将pick更改为r。 保存并关闭编辑器。

Step3 :在以下提交文件中,根据需要更新提交消息

Step4 :在所有提交后更新msgs。您可能希望git push -f更新遥控器。

答案 3 :(得分:38)

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

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

然后

git push -f

完成:)

答案 4 :(得分:18)

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

  

请注意, - force适用于所有推送的引用,因此使用   将push.default设置为匹配或多次推送   配置了远程。* .push的目的地可能会覆盖其他的refs   比当前分支(包括严格落后的本地裁判)   他们的远程对手)。要强制推送到一个分支,请使用+   在refspec前面推(例如git push origin + master to force   推送到主分公司。)

答案 5 :(得分:11)

如果您要修改较旧的提交,而不是最后一次提交,则需要使用rebase命令,如此处Github help page所述,修改旧版或多个提交消息部分

答案 6 :(得分:8)

命令 1

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

然后,

命令 2

git push origin --force

答案 7 :(得分:3)

git commit --amend

然后编辑然后在当前窗口中更改消息。之后呢

git push --force-with-lease

答案 8 :(得分:2)

另一个选择是创建一个附加的“勘误提交”(并推送),该引用引用包含错误的提交对象-新的勘误提交也提供了更正。勘误提交是指没有实质性代码更改而是重要的提交消息的提交-例如,在自述文件中添加一个空格字符,然后使用重要的提交消息来提交所做的更改,或者使用git选项--allow-empty。它肯定比重定基础更加容易和安全,它不会修改真实的历史记录,并且可以使分支树保持整洁(如果要更正最新的提交,则使用amend也是一个不错的选择,但是可以使用勘误提交是较早提交的一个不错的选择)。这种事情很少发生,仅记录错误就足够了。将来,如果您需要在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

答案 9 :(得分:1)

这对我很有用,

git checkout origin / branchname

如果你已经在分支机构,那么最好做拉或退刀

git pull

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

你已经完成了

答案 10 :(得分:0)

有关相同问题的其他信息(如果您使用的是位桶管道)

编辑您的消息

git commit --amend

推到服务器

git push --force <repository> <branch>

然后将--force添加到管道上的push命令

git ftp push --force

这将删除您先前的提交并推送您当前的提交。

  

在第一次按下后删除--force

我在bitbucket管道上尝试了它,并且工作正常

答案 11 :(得分:0)

我对 Git 有点陌生,但我只是想补充一下我的经验。

<块引用>

git commit --amend -m "新的和正确的消息"

这很好用,但接下来是我的问题。 在更改提交消息之前,我已经推送了提交。 最后,当我尝试推送到遥控器时,它 git 抛出了一个异常。 所以我应该在更新远程分支之前再次下拉。

<块引用>

git pull origin 分支名称

<块引用>

git push origin 分支名称

希望我的小经验对您有所帮助。 谢谢。

答案 12 :(得分:0)

git commit --amend

编辑提交消息 输入键盘

git push --force

答案 13 :(得分:0)

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

git checkout 

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

git checkout branchname

然后

git commit --amend -m "new message"

然后推

git push --force

答案 14 :(得分:-1)

  • 命令 1

    您需要使用下面的命令更改提交消息

    git commit --amend -m "New and correct message"
    
  • 命令 2

    添加一条新消息后执行下面的命令

    git push -f origin <your_branch_name>