Git大师超前起源/大师怪异问题

6qqygrtg  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(117)

希望有人能帮助我,因为我已经尝试了一堆的东西,它似乎我的系统是在一些奇怪的状态。
我运行系统的方式,本质上是在我的本地计算机上运行一个测试环境。我在本地做各种修改等。然后我推到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
kxe2p93d

kxe2p93d1#

正如ElpieKay所指出的和matt在评论中所问的,这里的罪魁祸首是您使用了一个原始URL:

git pull http://.......bitbucket....git master

在此,请务必记住以下几点:

  1. git pull = git fetch+您选择的第二个命令。
  2. git fetch是获取提交并更新 * 远程跟踪名称 * 的对象,如origin/master。1
    1.要使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会遵守它们。
egdjgwm8

egdjgwm82#

首先从远程获取所有更新

git撷取

如果您没有任何本地更改,请运行下面的命令,将本地分支重置为master上的版本

git重置--硬源/主

之后,尝试一个,git pull它会说分支已经是最新的

相关问题