git pull说最新但git push拒绝非快进

Jak*_*ake 34 git git-pull git-push

我刚刚拉了一个新的分支,做了一些本地的修改,承诺并试图推动.我得到了这个错误:! [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'
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这是如何发生的以及如何解决它?

Ben*_*ine 24

当你拉动分支时,你是否使用了"--track"选项(为了让你的本地分支跟踪远程分支).如果你没有,它可以解释"merge"命令不起作用.

您可以手动进行合并:

git fetch
git merge origin/groups
Run Code Online (Sandbox Code Playgroud)

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

git log --graph --oneline --all --decorate
Run Code Online (Sandbox Code Playgroud)

它将打印项目历史记录树,显示分支标签.因此,您将看到您的分支和原点分支的分歧.

注意:如果要保留线性历史记录而不是"合并",则可以在推送之前对远程控制器上的本地分支执行"rebase":

git rebase origin/groups
git push origin groups
Run Code Online (Sandbox Code Playgroud)

  • 结果我有一个名为origin/groups的本地分支以及一个远程分支. (2认同)

dfr*_*kow 5

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

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

To git@git.machine:repo
 ! [rejected]        master -> master (non-fast-forward)
Run Code Online (Sandbox Code Playgroud)

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

[push]
    default = current
Run Code Online (Sandbox Code Playgroud)