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