Git - 何时使用强制推送

12

GIT - 强制推送

请问有人能够举例说明何时使用 git push 和何时使用 git push -f 吗?


你能告诉我们你目前面临的情况吗?关于何时强制或不强制的一般回答有点宽泛。 - Tim Biegeleisen
2
通常情况下,当您必须更改分支的git历史记录时,您会强制推送git push -f。例如,当您将本地分支与另一个分支进行变基时,您必须强制推送。当您的本地分支具有与远程分支相同的历史记录(即本地分支与远程分支+新提交相同)时,请使用git push - Dat Nguyen
7
一般来说,如果你是一个 Git 初学者,我强烈建议在完全理解后再决定使用 git force。Stack Overflow 上有太多这样的问题得到了过于随意和欣喜的回答:“啊,只需使用强制推送”,然后同一个人不久之后又会发出新问题“求救!我丢失了提交”。换句话说,不要学习何时使用强制推送,而是先学习强制推送的作用,然后自行决定何时使用才明智。 - Lasse V. Karlsen
2
然而,这里还有另外一件事。如果你从远程拉取代码并开始工作,同时你的同事也在工作、提交和推送,然后你尝试推送,但是收到了一个消息,说在推送之前需要先拉取,那么这是因为你的历史记录与远程历史记录不匹配。如果你现在强制推送,将会删除你的同事所做的提交。 - Lasse V. Karlsen
1
@rajkeviv 在将一个分支重新基于其他内容后,您需要强制推送到远程。这是我能想到的最大的完全合法使用强制推送的情况。但正如Lasse所提到的,大多数情况下使用强制推送都有一种不好的味道。 - Tim Biegeleisen
显示剩余7条评论
1个回答

23

对于初学者来说,有时候使用 push --force 是有道理的,尤其是当你更新一个拉取请求时。

所谓拉取请求:

  • 你在 GitHub 上 fork 了某个 repo
  • 将它克隆到本地
  • 建立一个新分支并添加一些补丁/新提交
  • 将该分支推送到你自己的 fork 中
  • 触发一个拉取请求,通知原始 repo 的所有者你想要将你的 PR 分支合并。

但是:如果原始 repo 自己也已经有了新的提交,你就需要在最新的“上游”repo上进行变基(rebase)操作,将你的提交重新应用到最新的版本上。

git remote add upstream /url/original/repo
git checkout my_pr_branch
git rebase upstream/master
# test everything is still working

通过变基,您正在更改新提交的SHA1:需要用重新基于的提交替换PR分支的已发布(已推送)提交:

git push --force

这将更新现有拉取请求,考虑到这些提交的新版本。
由于您正在向自己的仓库(分叉)和自己的分支(PR分支)进行强制推送,因此可以随意使用--force


我在2013年介绍了force-with-lease,作为检测要强制推送的远程仓库是否发生任何变化的方法。
请注意,它最近与Git 2.13一起变得更加健壮


好的,谢谢。我已经修复了拼写错误。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接