找到错误来源:git push被拒绝:错误:无法推送一些引用

在其中一个团队中,当使用git时,我们一次又一次遇到“git push被拒绝:错误:未能推送一些引用”

To 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’ To prevent you from
losing history, non-fast-forward updates were rejected Merge the
remote changes (e.g. ‘git pull’) before pushing again. See the ‘Note
about fast-forwards’ section of ‘git push –help’ for details.

当然,我们可以继续使用“-f”作为quick’n’dirty – 而不是真正的解决方案.

但是,我们想知道它的来源或拒绝的原因是什么.

不能git给出关于它拒绝的原因的详细信息,也许是导致冲突的文件?

我们对.gitignore有疑问,导致另一个项目出现类似问题.

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

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

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

被“拒绝”的是,你所提供的“最后”不是来自遥控器之前的“最后”进展,也就是说,你错过了别人投入的一些“前进”.你有:

...--D             <-- master

然后你添加了提交E,F和G.但是当你这样做时,其他人选择了以D结尾的一系列提交并添加了他或她自己的提交H:

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

你建议抛弃H并使提交序列看起来像你的序列:D后跟E-through-G,这就是一切的结束.

Git告诉你分支名称,它具有你要求扔掉的进度,在本例中是master.这取决于你git获取进度然后保留它,也许是通过git merge创建一个合并提交M:

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

或者可能通过在H之上“重新定位”你的一系列提交:

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

(其中E’,F’和G’是“在E,F和G中发生了变化”的版本,只有足够的变化使它们适用于H而不是 – 通常只是提交父母,偶尔会有一点更多的工作涉及).

点赞