我做了一个git commit和随后的推送。 我想更改提交消息。 如果我理解正确,那么这是不可取的,因为有人在进行此类更改之前可能已经从远程存储库中拉出了。 如果我知道没人拉怎么办?
有没有办法做到这一点?
#1楼
说啊 :
git commit --amend -m "New commit message"
然后
git push --force
#2楼
应该注意的是, 如果您将push --force
与多个引用一起使用,则它们将全部被修改。 确保注意配置git repo的位置。 幸运的是,有一种方法可以通过指定要更新的单个分支来稍微保护该过程。 从git手册页中读取:
请注意--force适用于所有推送的ref,因此将push.default设置为match或将其与配置了remote的多个推送目标一起使用。*。push可能会覆盖当前分支以外的其他ref(包括本地ref严格落后于他们的远程对等对象)。 要强制只推送到一个分支,请在refspec前面使用+进行推送(例如git push origin + master强制推送到master分支)。
#3楼
如果您要修改较旧的提交而不是最后一个,则需要使用rebase
命令,如“ Github帮助页面 ”中的“修改较旧的或多条提交的消息”部分中所述。
#4楼
要编辑最近提交以外的提交:
步骤1 : git rebase -i HEAD~n
HEAD〜n对受影响的最后n
提交进行交互式变基。 (即,如果您想更改3次提交的提交消息,请执行git rebase -i HEAD~3
)
git将弹出一个编辑器来处理这些提交,请注意以下命令:
# r, reword = use commit, but edit the commit message
那正是我们所需要的!
第二步 :更改pick
到r
你要更新的消息,对于那些提交。 请勿在此处更改提交消息,它将被忽略。 您将在下一步中进行操作。 保存并关闭编辑器。
请注意,如果您编辑了变基“计划”,但它没有开始让您重命名文件的过程,请运行:
git rebase --continue
如果要更改用于交互式会话的文本编辑器(例如,从默认的vi更改为nano),请运行:
GIT_EDITOR=nano git rebase -i HEAD~n
第三步 :Git会弹出你把每一个修改其他编辑器r
之前。 根据需要更新提交消息,然后保存并关闭编辑器。
步骤4 :在更新所有提交消息之后。 您可能需要执行git push -f
来更新遥控器。
#5楼
命令1 。
git commit --amend -m "New and correct message"
然后,
命令2 。
git push origin --force
#6楼
这对我来说很好
git checkout来源/分支名称
如果您已经在分支中,那么最好进行拉动或变基
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
你完成了
#7楼
在控制台中使用以下两个步骤:
git commit --amend -m "new commit message"
然后
git push -f
完成:)
#8楼
git commit --amend
然后在当前窗口中编辑和更改消息。 在那之后
git push --force-with-lease
#9楼
另一个选择是创建一个附加的“勘误提交”(并推送),该引用引用包含错误的提交对象-新的勘误提交也提供了更正。 勘误提交是指没有实质性代码更改而是重要的提交消息的提交-例如,在您的自述文件中添加一个空格字符,然后使用重要的提交消息进行更改,或者使用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
#10楼
如果您使用位桶管道,则针对同一问题的其他信息
编辑您的讯息
git commit --amend
推到服务器
git push --force <repository> <branch>
然后将--force添加到管道上的push命令中
git ftp push --force
这将删除您以前的提交并推送您当前的提交。
第一次推动后移除--force
我在bitbucket管道上尝试过它并且工作正常
#11楼
改变历史
如果这是最新的提交,则可以执行以下操作:
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
…… 可能会发生不好的事情 。
这就是为什么--force-with-lease
更安全。