我在GitHub上设置了一个存储库,我已将其设置为用于在两台PC(家庭和工作)之间同步代码。今天我遇到了一个奇怪的问题。
当我执行git fetch origin
后跟git merge master
时,我会收到消息Already up-to date
。这意味着我的本地副本和远程分支都是镜像,对吧?但问题是两个存储库中的一些文件是不同的,并且让我感到困惑的是没有什么可以提交的(基本上远程存储库更新)。为了测试它,当我做git push origin master
时,我收到错误Updates were rejected because the tip of your current branch is behind
。
后一种情况应该如此,但为什么我无法获取这些更改?请注意,我没有尝试git pull
,因为我听说这是不好的做法。
========更新======
git remote show origin
的输出如下(我的遥控器命名为todoparrot):
* remote todoparrot
Fetch URL: https://github.com/ankush981/todoparrot.git
Push URL: https://github.com/ankush981/todoparrot.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
答案 0 :(得分:1)
当你运行git merge master
时,它假设你正在从master
合并到你当前的分支(也是主分支),这总是无用的“已经是最新的”。
要手动合并,您可以运行:
git merge origin/master
此外,与output here相比,您的本地分支看起来没有“上游分支”集; git remote show origin
通过说你没有“为git pull配置”来证明这一点。设置一个可能是个好主意,因此git
可以推断出正确的行为而无需拼出所有内容。
要设置上游分支,请运行:
git branch --set-upstream=origin/master
此时,您可以手动合并:
git merge
...因为来自git merge docs:
如果未从命令行提供任何提交,请合并当前分支配置为用作上游的远程跟踪分支。另请参见本手册页的配置部分。
作为个人而言,我不认为git pull
是不好的做法,除了它很容易学习git pull
并且永远不会了解幕后发生的事情。这是你经过几次长途跋涉后最好的捷径之一。 This article offers a similar opinion.