希望有人能帮助我,因为我已经尝试了一堆的东西,它似乎我的系统是在一些奇怪的状态。
我运行系统的方式,本质上是在我的本地计算机上运行一个测试环境。我在本地做各种修改等。然后我推到bitbucket,理想地使origin/master成为理想的生产分支。
我使用的生产服务器只从源服务器拉取。在生产服务器上没有进行任何更改,因此没有未推送的提交。
我的本地测试环境和源代码之间的链接和预期的一样。我是通过GitKraken来做的。我可以看到源代码/主机和本地主机,以及其他各种分支,它们都在我预期的位置。
生产服务器出现问题:
当我运行“git pull http://.....bitbucket....git master”时,它会把所有的东西都拉下来,就像是在origin/master的正确提交中一样。
但是,它说它比源/主文件提前26次提交。
我试着运行git branch -a
,它显示了1个本地分支和2个远程分支。但是,应该有4个远程分支,而不是2个。
此外,似乎我可以做任何事情来拉出正确的原点/主位置。它总是认为它在提交26后面。
我试过git reset --hard origin/master,它把我放到了它认为是origin/master的地方,commit 26在它应该在的地方。
我对为什么会发生这种情况的理论如下:
- 它被卡住的提交是上一个开发者的最后一次提交。回购是由这个上一个开发者和他的帐户设置的。我的帐户对回购有管理员权限,但我想知道是否有可能是这里的原因。
- 有一个git命令我没有正确使用,它是为了从源文件中提取信息。
如有任何建议,我们将不胜感激。
编辑:对最近的评论进行了一些澄清。
git fetch, git pull, git fetch origin
都提供以下错误:
fatal: could not read Password for 'https://djprior@bitbucket.org': No such device or address.
我似乎只能得到任何东西通过运行:
git pull https://{username}:{password}@bitbucket.org/{account}/{repo}.git master
我的印象是,如果我的'git pull....'命令正常工作,那么它应该同时运行一个git fetch,正确地更新远程分支。
运行“git reset -hard origin/master”会把我推回到正确提交之后的26次提交。(可能是因为git fetch失败了)
阅读评论后,可能我的git/config有问题。
见下图:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://{username}@bitbucket.org/{account}/mii.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
2条答案
按热度按时间kxe2p93d1#
正如ElpieKay所指出的和matt在评论中所问的,这里的罪魁祸首是您使用了一个原始URL:
在此,请务必记住以下几点:
git pull
=git fetch
+您选择的第二个命令。git fetch
是获取提交并更新 * 远程跟踪名称 * 的对象,如origin/master
。11.要使
git fetch
更新远程跟踪名称,必须为git fetch
* 指定一个类似origin
的 * 远程 * 名称。特别是,如果你给予
git fetch
一个URL,Git * 不会 * 查看.git/config
中的某个remote是否有这个URL。它只会直接连接到 * 那个URL * 的任何答案,并从那里获取提交。因为这里没有涉及到 remote-remote是像origin
这样的 * 名称 *-因为只有一个URL,Git不会更新任何远程跟踪名称(这些名称或多或少2是通过将远程名称origin
推到分支名称前面而形成的,当在URL上回答的任何问题列出它们的分支名称时,git fetch
都可以看到这些分支名称)。最终的结果是,您自己的
origin/master
--您现在看到的“超前”的origin/master
--仍然很遗憾地过时了。运行git fetch origin
* 而不是 *git fetch http://...
将修复它。即使您通过花哨的git pull
两个命令合一个操作调用git fetch
,也是如此。1Git在现代文档中称这些 * 远程跟踪分支名称 *(旧的Git文档没有一致的术语),但它们不是 * 分支 * 名称,所以这就像称汽车为“机械化马车”,因为它模仿了旧的马车。
2对于hysterical reasons来说,这是一个或多或少的问题,因为它与Git中“remotes”和“remote-tracking names”的产生有着曲折的路径。特别是remote上的“refs”需要经过一个或多个 * refspec * 指定的Map。名为 *
R
* 的remote的默认refspec将refs/heads/*text*
转换为refs/remotes/*R*/*text*
。但是您可以构建自己的refspecs,如果您这样做了,Git会遵守它们。egdjgwm82#
首先从远程获取所有更新
git撷取
如果您没有任何本地更改,请运行下面的命令,将本地分支重置为master上的版本
git重置--硬源/主
之后,尝试一个,git pull它会说分支已经是最新的