2

所以我不确定这是否是我的问题的原因,但我不小心做到了:

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.
4

3 回答 3

2

好吧,这是当您尝试推送并且您在文件中所做的更改与 Git 中的最新版本冲突时。

试试这个:

git pull origin facebook

如果出现错误:

git merge
git commit -a -m 'message'
git push origin facebook
于 2013-09-21T00:09:52.190 回答
1

你可以使用这个命令

git pull origin master --allow-unrelated-histories
于 2019-06-23T15:24:53.623 回答
0

您需要解决 2 个问题

1.) 恢复您推送到上游 repo 的“master”分支的不正确的“facebook”提交。

最简单的方法可能是将 repo 从上游再次克隆到新目录中。使用例如 gitk 查看主分支中的错误提交,还原它们并推送它们。现在您的同事很高兴,因为回购中的错误内容已得到纠正。

不要使用 push -f 除非你和你所有的同事都完全理解你在做什么。您可能会丢失数据。还原可能看起来更丑陋,但即使您在第一次尝试时出错,它也是安全的。

2.) 修复你自己的repo,让分支不再混乱。最简单的实际上是忘记旧的 repo 并继续使用新的克隆。但是,如果有重要的 stash 或其他分支尚未推送到任何上游,那么您需要修复旧 repo 的设置。最简单的可能是直接编辑 .git/config 。如果不确定它应该是什么样子,请拿一个没有此类事故的干净回购作为样本。

就个人而言,我经常更git fetch喜欢git pull. 我认为不会git fetch失败。Git pull 在一个命令中执行 fetch 和 merge,有时最好只做一个在远程分支 remotes/origin/branchname 中,您可以在最后一次 fetch 时获得远程仓库中内容的确切快照。它们是只读的,所以你永远不能搞砸它们。(它们被称为远程,但它们不是远程存储的,这经常被误解)您的本地分支是读/写的。如果一个被搞砸了,你甚至可以删除它,然后再次检查它。Git 将从远程分支创建一个新的本地分支。(如果您不想删除包含从未推送过的重要提交的分支)

在对你不完全理解的 repo 进行棘手的操作之前,备份可能是一个好主意,特别是如果你有一些从未被推送过的东西。

我自己只使用git push(没有任何参数),所以这种混淆不会发生。(除了我第一次推送新分支时。)此外,我只使用git fetch而不是git pull所以它总是成功,我可以检查其他人做了什么。(但是如果我为它们维护一个本地分支,我需要合并更改的远程分支,可能会发生类似的混淆,但它仍然只是本地的,可以在不打扰其他人的情况下删除)

另外:Git Pull 中接受的答案不会执行 Git Fetch提供了有关 push/fetch/pull 以及如何(不)使用它们的更多详细信息。

于 2013-09-21T18:18:49.440 回答