【问题标题】:git pull says up-to-date but git push rejects non-fast forwardgit pull 说最新但 git push 拒绝非快进
【发布时间】:2011-05-17 18:11:49
【问题描述】:

我刚刚拉出一个新分支,进行了一些本地更改,提交并尝试推送。我收到了这个错误:! [rejected] groups -> groups (non-fast forward) 所以我尝试拉,但被告知Already up-to-date.

这就是我拉然后推的东西。

~/dev$ git pull origin groups
Already up-to-date.
~/dev$ git push origin groups
To /mnt/ebs/git/repo.git
 ! [rejected]        groups -> groups (non-fast forward)
error: failed to push some refs to '/mnt/ebs/git/repo.git'

谁能解释这是怎么发生的以及我该如何解决它?

【问题讨论】:

  • @dan: -v 除了 repo 的路径之外不再提供任何输出。 Pushing to /mnt/ebs/git/repo.git
  • 我会查看两个存储库中组头的哈希值,它们应该匹配,但如果他们不匹配,那将是正确的错误,如果他们不匹配并且遥控器不是本地前缀
  • 解决此问题的绝对最佳方法是查看 gitk (gitk groups origin/groups) 中的本地和远程分支,并亲眼看看它们是如何分歧的。您可以直接看到我们必须尝试从您的问题中推断出的历史记录。
  • 为了让事情变得更棘手,这是在我通过 SSH 访问的服务器上。我认为这意味着 gitk 是不可能的。
  • 在我的情况下,我试图将我的 namedbranch 推送到另一个远程的 master 分支,正确的语法是 git push myremote namedbranch:master;如果您没有指定localbranch:remotebranch,或者更确切地说,如果您只指定远程分支名称,它会尝试推送您的本地分支,命名为我期望的远程分支名称。

标签: git git-push git-pull


【解决方案1】:

当你拉出分支时,你是否使用了“--track”选项(为了让你的本地分支跟踪远程分支)。如果没有,可以说明“合并”命令不起作用。

您可以手动进行合并:

git fetch
git merge origin/groups

为了比较本地和远程仓库,我建议你这个命令(添加它的别名,这很有用):

git log --graph --oneline --all --decorate

它将打印项目历史树,显示分支标签。所以你会看到你的分支和原始分支在哪里分歧。

注意:如果您想保留线性历史记录,而不是“合并”,您可以在推送之前对远程本地分支进行“rebase”:

git rebase origin/groups
git push origin groups

【讨论】:

  • 我从来没有使用过 --graph,据我所知,我有最新版本的 git,但它说这是一个无法识别的参数。
  • 原来我有一个名为 origin/groups 的本地分支以及一个远程分支。
【解决方案2】:

我带着不同的问题来到这里。

我的 git 设置为推送所有分支。我在一个分支 FOO 上,但它也在尝试推送 master,这不是最新的。诀窍是注意到它试图推动主人:

To git@git.machine:repo
 ! [rejected]        master -> master (non-fast-forward)

我在我的 .gitconfig 中添加了以下内容,默认情况下只推送当前分支:

[push]
    default = current

【讨论】:

    【解决方案3】:

    这不是对所提问题的回答。对于相同的错误消息,我遇到了不同的问题。

    我的本​​地分支没有远程分支来从正确配置的 [git pull] 中提取更改。这从git remote show origin 的 o/p 中可以明显看出。所以,我不得不使用git pull origin <branch_name> 而不是git pull 来拉取更改。

    【讨论】:

    • 嗨 Garnet,这似乎和我的问题一样。我想知道用远程映射我当前分支的解决方案是什么......
    • 嗨 Mukesh,我没有尝试添加映射。我刚刚指定了远程仓库别名'origin'并按照答案中提到的那样执行了 git pull:git pull origin <branch_name> 而不是git pull 来拉取更改。
    • 感谢石榴石的回复。该解决方案似乎对我有用。但是,我需要一个命令来为没有来源的 git pull 配置它。它应该像以前一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多