我遇到了一些git麻烦。我的设置如下:
[工作站存储库] -origin-> [网络驱动器裸存储库] -origin-> [GitHub]
我刚刚在GitHub上接受了我的第一个拉取请求(此请求),并将其合并为master。现在,我想将其拉到我的工作站上。因此,我先git fetch
在网络驱动器上,然后git pull
在我的工作站上,但是在我的工作站上,git表示“已经是最新的”,并且拒绝合并更改(我检查过,它不在我的工作空间中)。
git branch -vv
网络驱动器上的输出包括以下行:
* master 0fe40e2 [origin/master: behind 2] Some small code improvements
git branch -vv
工作站存储库上的输出包括以下行:
* master 0fe40e2 [origin/master] Some small code improvements
他们应该指向的实际提交是3388641。看起来在网络驱动器的裸仓库中,主分支以某种方式落后于原始服务器/主服务器。我不知道这种情况是如何产生的,或者如何解决。我不能使用,git pull
或者git reset
因为它是一个简单的仓库。
有谁知道我如何确定问题所在以及如何解决?
我不确定这个单独的裸克隆的用途是什么(裸克隆是您所说的那个在网络驱动器上),但是如果它不是镜像克隆,则镜像是一种特殊类型的裸克隆,它具有拥有独立于所有其他Git存储库的分支名称。1因此,如果您希望它何时将自己作为其他Git存储库的从属,则需要告诉它更新任何特定的分支。
我不能使用,
git pull
或者git reset
因为这是一个空的仓库...
的确,您不能使用git pull
,因为它是一个裸仓库,并且git pull
意味着run git fetch
,然后运行第二个Git命令,而第二个Git命令始终是需要工作树的命令。但是,不是不能使用的情况git reset
。您不能做的是混合或硬重置:
$ git reset
fatal: mixed reset is not allowed in a bare repository
$ git reset --hard
fatal: this operation must be run in a work tree
一个--soft
复位,但是,允许:
$ git reset --soft
$
因此,移动本地master
匹配项的一种方法origin/master
是:
$ git reset --soft origin/master
但是,最合适的方法可能是要么完全停止使用此裸存储库,要么使用镜像克隆(请参见脚注1)。
1从技术上讲,即使镜像克隆也有其自己的分支名称。非镜像裸克隆和镜像裸克隆之间的主要区别在于,镜像克隆的所有分支名称都源自其起源。2具体来说,fetch
镜像克隆的配置为:
[remote "origin"]
fetch = +refs/heads/*:refs/heads/*
而不是标准:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
标准的获取设置意味着git fetch
在这样的克隆中运行会更新所有refs/remotes/origin/*
名称,以匹配原始refs/heads/*
名称。非标准的镜像设置意味着git fetch
在镜像克隆中运行会强制更新所有refs/heads/*
名称,立即忘记(并因此丢失仅可从其分支访问的所有提交)其自己的分支名称,而转而使用取回的名称。这是什么使得镜子镜子:它丢弃任何提交了专属自己的分支机构通过更换自己的分公司名义犯了什么它看见了遥控器上的哈希值。
2上面的描述采用标准的远程名称origin
。如果您使用其他名称,则所有内容仍将保留,仅是origin
字符串文字而不是您使用的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句