我想我得到了GitHub的基础知识 - 我理解在本地机器上初始化存储库,提交,推送,拉动,克隆等等。但是当谈到分支等时,我完全迷失了。
现在我正在尝试推送我最新版本的项目,但我不能。以下是真实的:
网站上的存储库是我的,我是这个项目的唯一合作者;
这个网站是我的投资组合。我只创建了主分支,但是有一个我没有创建的“开发”分支,但我认为当你在GitHub Pages上创建一个组合时它是默认的。
我以前曾多次推到这个项目,这一直是个问题。
正如我所说的,我正试图推动我最近的版本。以下是发生的事情:
我检查我所在的分支机构,它说我在“主人”。我添加,提交,并尝试通过我的终端。它询问我的用户名和密码,我把它们放入,然后它返回:
! [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
我不明白这一点。在分支机构后面究竟是什么意思?我以为我明白了,但显然我没有。即使我得到它,我自己的分支怎么能落后于自己?我从来没有推到任何其他分支!
答案 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 merge
和git rebase
- 都知道您希望master
同步与你Git对其他一些Git master
的记忆。
你的Git,在某些时候(当你告诉它时),连接到origin
,找出他们主人所拥有的,带来需要的任何内容,并设置您的 origin/master
来记住这一点。主要联系人是您正在运行git fetch
或git fetch origin
(如果您忽略了origin
,Git会确定您要使用哪个遥控器,或猜测origin
是否全部否则失败)。
获得更新的内存后,您可以将您拥有的内容(master
)与Git记住的内容(您的origin/master
)进行比较。如果是时候这样做,你可以git merge
或git rebase
你的主人,合并或重新使用(你的记忆)他们的。
您可能会遇到合并冲突!这些是正常的:它们只是意味着你在某个文件中改变了某些内容,并且他们(无论他们是谁)在相同的文件中改变了某些内容,并且你们两个都触摸了该文件的相同行,但是你和他们在行中做了不同的事情。 Git并不知道你是否比他们更聪明,或者他们比你更聪明,或者更聪明。它只是将两个更改放入您的文件中并使您清理混乱。您现在必须编辑冲突的文件,将正确的行放入其中,然后将它们保存回工作树;然后git add
和git 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
以及您喜欢的其他第二个命令。