推后更改git提交消息(鉴于没有人从远程拉)
我做了一个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
时要小心 – reset --hard
。 如果您对分支有更改,这些更改将被破坏。
有关修改历史logging的说明
被破坏的数据实际上只是旧的提交消息,但是--force
不知道,并且也乐意删除其他数据。 所以想一想,“我想销毁数据,而且我知道数据被破坏了”。 但是,当被销毁的数据被提交时,通常可以从reflog中恢复旧的提交 – 数据实际上是孤立的而不是被销毁的(尽pipe孤立提交被定期删除)。
如果你不认为你正在破坏数据,那么远离--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为所有受影响的提交进行交互式转化。
git会popup一个编辑器来处理这些提交,注意这个命令: # r, reword = use commit, but edit the commit message
,这正是我们需要的。
第二步 :将pick
改为r
用于那些你想更新味精的提交。 保存并closures编辑器。
第三步 :在以下提交文件中,根据需要更新提交消息
第4步 :在所有提交信息更新后。 你可能想要做git push -f
来更新远程。
在控制台中使用这两个步骤:
git commit --amend -m "new commit message"
接着
git push -f
完成:)
需要注意的是, 如果你使用多重引用的push --force
,它们将被全部修改。 确保注意你的git仓库configuration推到哪里。 幸运的是,通过指定一个分支来更新,有一种方法可以保护这个过程。 从git手册页读取:
请注意,–force适用于所有被推送的ref,因此在push.default设置为匹配的情况下使用它,或者使用与多个推送目的地configuration的远程。*。push可以覆盖除当前分支以外的ref(包括本地ref严格落后于对方)。 要强制推送到一个分支,使用refspec前面的+推(例如git push origin + master强制推送到主分支)。
如果要修改较旧的提交,而不是最后一个,则需要使用rebase
命令,如Github帮助页面中所述, 修改旧的或多个提交消息的消息部分
命令1 。
git commit --amend -m "New and correct message"
然后,
命令2 。
git push origin --force
这对我来说很好,
git checkout origin / branchname
如果你已经在分支机构,那么最好做拉或重新绑定
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
你完成了