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

时间:2012-03-08 10:35:58

标签: git github

我的环境:

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

我们只有主分支。

重现问题:

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

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

  3. 如何更改推送信息?

  4. 修改 对我来说很重要的是,我的错误信息不会遗留任何历史。

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

2 个答案:

答案 0 :(得分:7)

<强> TL; DR

git commit -v --amend
git push -f

这将允许您编辑最后一次提交消息,并用编辑替换遥控器上的提交。

<强>无论其

你最好只是推动修正。

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

git add changed # example, add changed to the commit
git commit -v --amend # launch editor, edit commit message

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

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

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

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

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

      

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

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

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

答案 1 :(得分:3)

如果还没有其他人使用错误消息进行提交,您可以将HEAD指针重置为进行提交之前的状态:

git reset --soft HEAD^

这将撤消您上次提交并将该提交中的文件放入暂存状态,您可以使用新消息再次提交。请注意,您必须使用--force进行推送,因为实际上您正在覆盖服务器上的历史记录:

git commit -m 'new and correct message goes here'
git push --force origin master