4

在其中一个团队中,当使用 git 时,我们一次又一次地遇到“git push denied: error: failed to push some refs”

到 git@git.far-mteria.org:ledy/thakres.git ![rejected]
b_stable -> b_stable (non-fast-forward) error: failed to push some refs to 'git@git.far-mteria.org:ledy/thakres.git' 为了防止你丢失历史,非快速-前向更新被拒绝 在再次推送之前合并远程更改(例如“git pull”)。有关详细信息,请参阅“git push --help”的“关于快进的说明”部分。

当然,我们可以继续使用“-f”作为快速'n'dirty - 不是真正的 - 解决方案。

但是,我们想知道这是从哪里来的,或者被拒绝的原因是什么。

git 不能详细说明它拒绝的原因,也许是导致冲突的文件?

我们在 .gitignore 上有一个嫌疑人,它在另一个项目中引起了类似的问题。

4

3 回答 3

1

Git 不会一次推送单个文件,它会推送完整的提交树,例如,“这是整个项目如何看待一个提交,然后在另一个提交时看起来像这样,现在最终看起来像这样” .

绘制为提交图,例如,这是非常线性的:

...--D--E--F--G    <-- master

被“拒绝”的是您提供的“最终”不是遥控器之前的“最终”的“前进进度”,即您错过了其他人输入的一些“前进进度”。你有:

...--D             <-- master

然后你添加了提交E,FG. 但是当你这样做的时候,其他人拿起了一系列以结尾的提交D并添加了他或她自己的提交H

...--D--H          <-- master

您建议丢弃H并使提交序列看起来像您的序列:D后面是E-through- G,这就是一切的结束。

Git 会告诉您具有您建议丢弃的进度的分支名称master,在本例中为. 进度取决于您git fetch,然后保留它,也许通过git merge创建合并提交M

       H------
      /       \
...--D         M   <-- master
      \       /
       E--F--G

或者也许通过“重新定位”您的一系列提交H

...--D--H-E'-F'-G' <-- master

(其中E', F', 和G'是“what changed in E, F, and G” 的版本,只进行了足够的更改以使其适用于其之上H——通常这只是提交亲子关系,偶尔会涉及更多的工作)。

于 2013-11-08T22:42:29.150 回答
1

执行 git pull,然后尝试推送,这就是消息的含义。

于 2013-11-09T01:21:03.637 回答
0

当磁盘不同步或过载、高 iowait 时,这可能是我遇到过几次的一个很难找到的问题。

是否git show-branch --list --all担心分支名称模棱两可:“警告:refname xyz 模棱两可”?

如果是这样,请尝试

$ rm -rf .git/refs/heads/origin/xyz

$ git branch --set-upstream lkgr origin/xyz

于 2013-11-10T18:42:47.927 回答