git push没有目标端合并(拉是获取,因为push是???)

时间:2013-05-06 05:34:29

标签: git

说我有一个回购,我们称之为origin。我将其克隆到另一个仓库working。我做了一些更改(并在本地提交)。我现在想把它们推回origin

我对此的理解是git push会说“不,origin是一个工作副本,这将覆盖它”。我之前使用过选项(在origin中)允许推送覆盖当前工作副本,从而允许推送。有没有办法(有或没有),允许推送添加到提交树,但不更新origin/master或搞乱工作目录?

实际上,git pushgit pull的反转(获取更新并更新工作目录); git fetch(获取更新)的反转是什么?

2 个答案:

答案 0 :(得分:2)

我宁愿将git push视为git fetch的反面。

git pull只是git fetch + git merge

对于推送,最佳做法是使用远程备份,因为如果您正在推送当前由远程非裸仓库检出的分支,则其工作树将不会更新,这意味着推送将被默认拒绝 如“Git push only for bare repositories?”中所述:

  

完全可以推送到非裸存储库中的任何其他分支。

这可能更接近您所寻找的内容:只需按下您的远程(非裸)回购当前未签出的分支。

答案 1 :(得分:1)

  

我对此的理解是git push会说“不,原点是   工作副本,这将覆盖它“。

那是错的。 git push更像是“嗨,我得到了这些改变,你想接受它们吗?”如果遥控器中有未更改或拉到本地仓库的更改,则推送被拒绝。它永远不会在远程端进行合并--Git要求您获取/拉取更改,将它们合并到本地仓库中,然后推送。

git push -f是另一个故事 - 它会覆盖遥控器中可能导致推送失败的任何内容。