我使用以下信息创建一个项目和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
我该如何解决这个问题?
答案 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中拥有的任何内容。