如何在github中更改我的1推送的git消息?

Yos*_*sef 3 git github

我的环境:

我正在与github私有存储库上的团队合作.

我们只有主分公司.

重现问题:

  1. 我做了改变(我谈论单一而不是muilticase)并添加+ commit + push到github私有存储库.

  2. 我推后在github上看到了这条消息 - 我错了,我想改变.

  3. 如何更改推送信息?

编辑: 对我来说很重要的是,我的错误信息不会遗留任何历史记录.

Edit2: 已经推送的文件位于github存储库中,而不仅仅是在我的本地存储库中

AD7*_*six 7

TL; DR

git commit -v --amend
git push -f
Run Code Online (Sandbox Code Playgroud)

这将允许您编辑上次提交消息,并使用您的编辑替换远程提交.

然而

你最好只是推动修正.

更改现有提交的唯一方法是:

git add changed # example, add changed to the commit
git commit -v --amend # launch editor, edit commit message
Run Code Online (Sandbox Code Playgroud)

这将允许您轻松编辑上次提交(内容或提交消息)

你会发现你不能推到遥控器,当你尝试它时会被拒绝并发出如下警告:

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:xxx/xxx.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

这给你两个选择:

  1. 先拉,然后再推
  2. 强制推动(git push -f)

如果您先拉 - 您将未编辑的提交放回历史记录中,它仍然存在,但您可以毫无困难地推送到您的远程分支.原始提交将在历史记录中显示为合并.

如果强制推送,则实际上是强制远程分支接受本地历史记录并覆盖远程分支的历史记录.

来自git自己的帮助的说明可能最好用于描述为什么强制推送通常是一个坏主意:

通常,该命令拒绝更新远程ref,该远程ref不是用于覆盖它的本地ref的祖先.此标志禁用检查.这可能导致远程存储库丢失提交 ; 小心使用它.

在上下文中,"丢失的提交"将是您编辑的提交的旧版本 - 但它也可能包括同事在您的第一次推送和强制推送之间推送的更改.出于这个原因,这是一个冒险的策略.

如果您需要它可以完成 - 但要么快速行动(以便没有人下载borked-commit),要么知道您将导致任何其他开发人员拉动并推送到该分支的问题.