我做了一个 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
聚会可能会迟到,这是我在这里看不到的答案。
Step1 : git 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
来更新遥控器。