在推送后更改GIT提交消息(假设没有人从远程拉出)

zu0ti5jz  于 2022-09-21  发布在  Git
关注(0)|答案(10)|浏览(157)

我已经做出了一项承诺,并随后进行了推动。我想更改提交消息。如果我理解正确的话,这是不可取的,因为在我进行这样的更改之前,可能已经有人从远程存储库中取出了。如果我知道没有人拔枪呢?

有办法做到这一点吗?

ndh0cuux

ndh0cuux1#

更改历史

如果这是最新的提交,则只需执行以下操作:

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中恢复旧的提交-数据实际上是孤立的而不是被销毁的(尽管孤立的提交被定期删除)。

如果你不认为你在破坏数据,那就远离--forcebad things might happen

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

ybzsozfc

ybzsozfc2#

只要说:

git commit --amend -m "New commit message"
  • 然后**
git push --force
qnzebej0

qnzebej03#

要编辑最近提交以外的提交:

Step1git rebase -i HEAD~n对最后一个受影响的n提交进行交互rebase。(即,如果您想要更改提交消息3提交回,则执行git rebase -i HEAD~3)

Git将弹出一个编辑器来处理这些提交,请注意以下命令:


# r, reword = use commit, but edit the commit message

这正是我们需要的!

Step2:对于需要更新消息的提交,将pick改为r。不必费心更改此处的提交消息,它将被忽略。您将在下一步中做到这一点。保存并关闭该编辑器。

请注意,如果您编辑了rebase‘plan’,但它没有开始允许您重命名文件的过程,请运行:

git rebase --continue

如果您想要更改用于交互会话的文本编辑器(例如,从默认vi更改为Nano),请运行:

GIT_EDITOR=nano git rebase -i HEAD~n

Step3:Git会为您之前放入r的每个版本弹出另一个编辑器。根据需要更新提交消息,然后保存并关闭该编辑器。

Step4:更新完所有提交消息。您可能需要执行git push -f来更新遥控器。

qv7cva1a

qv7cva1a4#

在控制台使用这两个步骤:

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

然后

git push -f

完成:)

ve7v8dk2

ve7v8dk25#

需要注意的是,**如果您使用带有多个引用的push --force,它们将全部被修改。**请务必注意您的git repo被配置为推送到哪里。幸运的是,有一种方法可以稍微保护这个过程,方法是指定一个要更新的分支。请阅读Git手册页:
请注意,--force应用于所有推送的引用,因此将其与PUSING一起使用。默认设置为匹配,或将多个推送目标配置为Remote。*.PUSH可能会覆盖当前分支以外的引用(包括严格位于其远程对应项后面的本地引用)。要强制推送到一个分支,请在refSpec前面使用+进行推送(例如,git推送原点+master可强制推送到主分支)。

nhjlsmyf

nhjlsmyf6#

命令1

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

然后,

命令2

git push origin --force
7y4bm7vi

7y4bm7vi7#

git commit --amend

然后在当前窗口中编辑和更改消息。在那之后就做了

git push --force-with-lease
qv7cva1a

qv7cva1a8#

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

8wtpewkr

8wtpewkr9#

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

git checkout

为了确保您在正确的分支上进行更改,请执行以下操作:

git checkout branchname

然后

git commit --amend -m "new message"

然后按下

git push --force
7eumitmz

7eumitmz10#

  • 只需使用这两个命令即可更改上次推送的提交消息*

1.-$git Commit--Modify-m“New Commit Message。”
1.-$git推送--强制租用

相关问题