推后更改git commit消息(因为没有人从远程拉出)
我做了一个git commit和随后的推送。 我想更改提交消息。 如果我理解正确,这是不可取的,因为有人可能在我做出这样的更改之前从远程存储库中取出。 如果我知道没有人拉扯什么?
有没有办法做到这一点?
改变历史
如果它是最近的提交,你可以简单地这样做:
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
时要小心 - reset --hard
。 如果您对分支有更改,这些更改将被破坏。
关于修改历史记录的说明
被破坏的数据实际上只是旧的提交信息,但--force
不知道,并且会高兴地删除其他数据。 因此认为--force
为“我要销毁数据,我知道肯定被破坏的数据。” 但是当被销毁的数据被提交时,通常可以从reflog中恢复旧的提交 - 数据实际上是孤立的而不是被销毁的(尽管孤立的提交被定期删除)。
如果你不认为你在破坏数据,那么远离 - --force
......可能会发生不好的事情。
这就是为什么--force-with-lease
更安全一些。
说啊 :
git commit --amend -m "New commit message"
接着
git push --force origin <BRANCH-NAME>
可能会迟到派对,这里是我在这里没有看到的答案。
第1步 : git rebase -i HEAD~n
HEAD〜n为受影响的最后n
提交进行交互式重新分配。
git会弹出一个编辑器来处理这些提交,注意这个命令: # r, reword = use commit, but edit the commit message
,这正是我们需要的。
步骤2 :将pick
改为r
以表示您想要更新信息的提交。 保存并关闭编辑器。
第3步 :在以下提交文件中,根据需要更新提交消息
第4步 :在所有提交消息更新后。 你可能想要做git push -f
来更新远程。
上一篇: Changing git commit message after push (given that no one pulled from remote)
下一篇: How to revert a merge commit that's already pushed to remote branch?