我推拉时Git错误

时间:2016-10-14 05:53:37

标签: git github

我使用以下信息创建一个项目和init git

git config user.name 'name'
git config user.email 'username@gmail.com'

并将代码推送到github,我使用git log,并发现电子邮件地址错误,所以我用以下内容更新

git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "username@gmail.com" ];
then
    GIT_AUTHOR_EMAIL="the.username@gmail.com";
    git commit-tree "$@";
else
    git commit-tree "$@";
fi' -f HEAD

所有提交都被更改,我再次将其推送到github,但它失败并出现错误

! [rejected]        master -> master (non-fast-forward)

然后让我拉,我拉,但它显示另一个错误

* branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

您使用filter-branch重写了存储库历史记录。当您推送到github时,它会注意到您的更改将覆盖旧历史记录。为了防止你意外丢失历史,它拒绝这样做。

通常,当其他人在您之前推送新的更改时,就会发生这种情况。使用您的更改推送历史记录将覆盖其更改。因此,错误消息表明您合并了他们的更改,然后推送组合历史记录。

来自https://help.github.com/articles/dealing-with-non-fast-forward-errors/:     git push origin master到https://github.com/USERNAME/REPOSITORY.git! [拒绝]主人 - > master(非快进)错误:无法将某些引用推送到' https://github.com/USERNAME/REPOSITORY.git'为了防止您丢失历史记录,拒绝非快进更新在再次推送之前合并远程更改(例如' git pull')。请参阅有关快进的说明' &g; git push --help'详情。

但是在您的情况下,建议不适用。您不希望将重写的历史记录与旧历史记录合并。你真的想失去昔日的历史。在这种情况下,您可以使用git push --force origin master告诉Git。

答案 1 :(得分:1)

您已使用filter-branch命令重写了整个历史记录,并且该历史记录与您在GitHub中的历史记录不同。您可以使用git push -f强制推送您的本地提交,它将覆盖您在GitHub中拥有的任何内容。