2

首先,我了解推送到非裸 git 遥控器的相关性,包括使用 git config 选项receive.denyCurrentBranch和其他解决方法,所以我不是在寻找诸如这里的答案:

这更像是一个 git 实现/表示/哲学问题。

为什么git push <remote>非裸遥控器的 a 不能是双重的或与遥控器的 a 基本相同git fetch <source>?这样,我在遥控器上的本地工作目录可能已经过时(落后于新内容),我什至可能有本地更改(提前提交,甚至暂存/未暂存/隐藏/其他),但该工作目录完全不受推送操作影响?如果确实如此,那么一旦在遥控器上,我就可以合并或变基或任何必要的东西。事实上,这正是kernel.org git faq entry所声称的。

这样做的动机与其他提出“如何”问题的人一样:由于{firewall,nat,security}原因,我没有任何方法可以轻松地从远程访问推送的“源”。

可能我缺少一些关于 git 如何真正跟踪“如果我只理解 XXXX ”的基本知识,我就会知道答案;请赐教。

4

1 回答 1

0

问题是 push 会重写 refs。 HEAD是最新签出的同义词,重写 ref 会默默地使工作树和索引无效——该 repo 中的提交将丢失推送的更改,没有任何迹象表明发生了这种情况。拒绝推送是最简单的解决方案。如果git pull在目的地做不是一个选择,那么推到一次性并修复参考:

git push origin master:fakemaster
cd $origindir
git checkout -B master fakemaster
git branch -D fakemaster
于 2015-07-05T21:15:20.133 回答