在gitlog中更改了提交消息,但在github中没有

时间:2011-12-31 14:10:40

标签: git github

我按照Change old commit message on Git中的步骤操作,确认在git log中更新了提交消息。但是,当我单击Github中的“提交历史记录”选项卡时,我仍然会看到旧消息和旧的SHA-1。

所以,我盲目地尝试了git push origin master,但是失败了:

To git@github.com:foobar.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:foobar.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.

错误告诉我“在再次推送之前合并远程更改”,但这似乎是错误的做法:将新内容合并到修改后的提交中(来自较旧的基础)。我很困惑。

我如何提交修改后的信息?

2 个答案:

答案 0 :(得分:3)

如果您要重写历史记录,则需要致电:

git push --force

答案 1 :(得分:1)

正如@xsace所说,你在这里重写历史。

git中的提交与以下几点相关联:

  • 提交元数据(作者,提交者,时间戳,提交消息);
  • 父提交(如果是合并,则为commit_s_);
  • 树。

如果您更改了其中任何一项,并且您在此处(您更改了提交消息),则您的历史记录和github(或任何其他远程用户)会发生分歧:

[parent]----[master@github]
    \
     \------[your local master]

在这里,您希望将yourlocalmaster推送到github,但这不是快进,即github上的当前主头不是您提交的直接父级。因此,你需要强行推动。

这也可以使用git push github +master完成。