协慌网

登录 贡献 社区

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

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

有没有办法做到这一点?

答案

改变历史

如果它是最近的提交,您可以简单地执行此操作:

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更安全一些。

说啊 :

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

然后

git push --force

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

Step1git rebase -i HEAD~n为受影响的最后n提交做交互式 rebase。

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

步骤 2 :将pick更改为r以查找要更新 msg 的提交。保存并关闭编辑器。

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

Step4 :在所有提交后更新 msgs。你可能想做git push -f来更新遥控器。