所以我不确定这是否是我的问题的原因,但我不小心做了:
git push -u origin master
而不是:
git push -u origin facebook
当我在facebook
分行时。它回答说:
Branch master set up to track remote branch master from origin.
现在我试图推动:
To git@git.url.com:url.git
! [rejected] facebook -> facebook (non-fast-forward)
error: failed to push some refs to 'git@git.url.com:url.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'Note about
fast-forwards' section of 'git push --help' for details.
我不能拉:
You asked me to pull without telling me which branch you
want to merge with, and 'branch.facebook.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "facebook"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
答案 0 :(得分:2)
这就是当你尝试推送时,你的文件中的更改与Git中最新的版本冲突。
试试这个:
git pull origin facebook
如果出现错误:
git merge
git commit -a -m 'message'
git push origin facebook
答案 1 :(得分:0)
您需要解决2个问题
1。)将您推送到上游仓库的“主”分支的错误“facebook”提交恢复。
最简单的方法可能是将repo从上游再次克隆到新目录中。使用例如gitk看看master分支中的错误提交是什么,还原它们并推送它们。现在你的同事很高兴,因为回购中的错误东西得到纠正。
除非你和你的所有同事完全理解你在做什么,否则不要使用push -f。您可能会丢失数据。恢复可能看起来更丑,但即使你在第一次尝试时弄错了它也是安全的。
2。)修复你自己的回购,这样分支就不再混淆了。最简单的实际上是忘记旧的回购并继续使用新的克隆。但是,如果有重要的藏匿处或其他分支未被推送到任何上游,那么您需要修复旧回购的设置。最简单的方法是直接编辑.git / config。如果不确定它应该是什么样子,请拿一个没有这样的事故的清洁回购。
我个人更喜欢git fetch
而不是git pull
。我认为git fetch
可能会失败。
Git pull在一个命令中进行提取和合并,有时候只做一个就更好
在远程分支remotes / origin / branchname中,您可以获得上次提取时远程仓库中的内容的精确快照。它们是只读的,因此您永远不会搞砸它们。 (它们被称为远程,但它们不是远程存储的,经常被误解)您的本地分支是可读/写的。如果一个人搞砸了你甚至可以删除它,然后再检查一下。 Git将从远程分支创建一个新的本地分支。 (如果当然你不想删除一个分支,如果它包含从未被推过的重要提交)
在对你的repo进行棘手的操作之前,你还没有完全理解,备份可能是一个好主意,特别是如果你有一些从未被推过的东西。
我自己只使用git push
(没有任何参数),所以这种混淆不会发生。 (除了我第一次推新分支。)另外我只使用git fetch
而不是git pull
所以它总是成功,我可以检查其他人做了什么。 (但是我需要合并远程分支,如果我为他们维护一个本地的分支,可能会发生类似的混乱,但它仍然只是本地的,可以删除而不会打扰其他人)
添加:Git Pull Doesn't Do A Git Fetch中接受的答案提供了有关推/取/拉以及如何(不)使用它们的更多详细信息。
答案 2 :(得分:0)
您可以使用此命令
git pull origin master --allow-unrelated-histories