推后更改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> 

晚会可能会迟到,这里是我在这里没有看到的答案。

步骤1git 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 

你完成了