1

假设我有一个回购,我们称之为origin。我将它克隆到另一个 repo 中,working. 我做了一些更改(并在本地提交)。我现在想把他们推回origin.

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

实际上,git pushgit pull(获取更新和更新工作目录)的逆;git fetch(获取更新)的倒数是什么?

4

2 回答 2

2

我宁愿git push考虑git fetch.

git pull只是git fetch+ git merge

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

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

这可能更接近您正在寻找的内容:只需推送一个当前不是您的远程(非裸)repo 签出的分支。

于 2013-05-06T05:57:36.643 回答
1

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

那是错误的。git push更像是“您好,我收到了这些更改,您要接受吗?” 如果远程中的更改尚未获取或拉到您的本地存储库,则推送将被拒绝。它永远不会在远程端进行合并——Git 要求您获取/拉取更改,将它们合并到本地存储库中,然后推送。

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

于 2013-05-06T05:39:19.743 回答