GitHub更新被拒绝,因为当前分支的提示落后于其远程对应

时间:2017-05-12 01:24:19

标签: git github git-branch

我想我得到了GitHub的基础知识 - 我理解在本地机器上初始化存储库,提交,推送,拉动,克隆等等。但是当谈到分支等时,我完全迷失了。

现在我正在尝试推送我最新版本的项目,但我不能。以下是真实的:

  1. 网站上的存储库是我的,我是这个项目的唯一合作者;

  2. 这个网站是我的投资组合。我只创建了主分支,但是有一个我没有创建的“开发”分支,但我认为当你在GitHub Pages上创建一个组合时它是默认的。

  3. 我以前曾多次推到这个项目,这一直是个问题。

  4. 正如我所说的,我正试图推动我最近的版本。以下是发生的事情:

    我检查我所在的分支机构,它说我在“主人”。我添加,提交,并尝试通过我的终端。它询问我的用户名和密码,我把它们放入,然后它返回:

    ! [rejected]        master -> master (non-fast-forward)
    error: failed to push some refs to 'https://github.com/...(my portfolio      address)...io.git'
    hint: Updates were rejected because the tip of your current branch is behind
    hint: its remote counterpart. Integrate the remote changes (e.g.
    hint: 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    

    然后我试着拉,并收到了这个:

    There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    See git-pull(1) for details.
    
       git pull <remote> <branch>
    
    If you wish to set tracking information for this branch you can do so with:
    
      git branch --set-upstream-to=origin/<branch> master
    

    我不明白这一点。在分支机构后面究竟是什么意思?我以为我明白了,但显然我没有。即使我得到它,我自己的分支怎么能落后于自己?我从来没有推到任何其他分支!

1 个答案:

答案 0 :(得分:3)

根据评论,听起来你在这里弄得一团糟,你必须以这种或那种方式进行清理。但是,立即解决眼前的问题:

There is no tracking information for the current branch.

是Git告诉你要做的事情:

git branch --set-upstream-to=origin/<branch> master

特别是,您显然希望将origin/master设置为master的上游:

git branch --set-upstream-to=origin/master master

现在所有三个命令 - git pull 1 git mergegit rebase - 都知道您希望master同步与你Git对其他一些Git master的记忆。

你的Git,在某些时候(当你告诉它时),连接到origin,找出他们主人所拥有的,带来需要的任何内容,并设置您的 origin/master来记住这一点。主要联系人是您正在运行git fetchgit fetch origin(如果您忽略了origin,Git会确定您要使用哪个遥控器,或猜测origin是否全部否则失败)。

获得更新的内存后,您可以将您拥有的内容(master)与Git记住的内容(您的origin/master)进行比较。如果是时候这样做,你可以git mergegit rebase你的主人,合并或重新使用(你的记忆)他们的。

您可能会遇到合并冲突!这些是正常的:它们只是意味着在某个文件中改变了某些内容,并且他们(无论他们是谁)在相同的文件中改变了某些内容,并且你们两个都触摸了该文件的相同,但是你和他们在行中做了不同的事情。 Git并不知道你是否比他们更聪明,或者他们比你更聪明,或者更聪明。它只是将两个更改放入您的文件中并使您清理混乱。您现在必须编辑冲突的文件,将正确的行放入其中,然后将它们保存回工作树;然后git addgit commit所有合并的最终结果。

(如果您使用git rebase代替git merge,您仍然会遇到合并冲突,但是一旦解决了这些冲突并git add编辑了文件,就应该运行{{1而不是git rebase --continue。请参阅关于合并和rebase的许多其他SO问题和答案。)

我建议避免使用git commit因为它过多:首先为您运行git pull,然后为您运行git fetch。 (或者,如果您这样说,它会为您而不是git merge运行git rebase。)现在,在git merge之后,您经常想要运行其中一个这两个其他命令......但你不一定要立即运行。而且,你有两个命令可以尝试:你怎么知道你想要哪一个? 如果出现问题 - 他们做了什么 - 你怎么知道哪个命令有助于寻找?如果自己运行合并或变基,你就可以得到所有这些的答案。这就是为什么我说:忘记git fetch,只需坚持使用git pull以及您喜欢的其他第二个命令。