什么时候`git push --force`合适吗?

时间:2012-09-14 20:26:44

标签: git

我曾经看到过“重复敲打”的一件事情,那就是永远不会 git push --force,但肯定有时候它是合适的?

什么时候使用--force?

我目前的例子:

  1. 创建分支并进行一些更改。
  2. 将分支“live”推送到显示代码。
  3. 重新定位原点,在此过程中更改/重写历史记录。
  4. 我的代码现在偏离了我自己的远程代码。
  5. 推出 - 强制适当的解决方案吗?

4 个答案:

答案 0 :(得分:2)

在这种情况下,假设您是唯一一个在该分支上工作的人,或者当您强行推送并重写该功能分支的历史记录时,其他人理解其含义。

答案 1 :(得分:2)

如果您需要从错误推送的仓库中删除一些敏感数据,

push -f变得非常必要。在这种情况下,您需要执行git filter-branchgit push -fThis article解释了这个过程。

另外,当一个初级开发人员对回购做了一些愚蠢的事情时,我遇到了你需要做push -f的情况。无论如何,一个人不应该首先给予他们权利或给予他们足够的培训。

答案 2 :(得分:1)

对于那些根据您的分支撤回您的回购并进行自己更改的人来说,重写历史将是一件令人头疼的事。当您重写远程历史记录并且下游人员将其拉出时,他们的更改将最终在不知名的地方徘徊。 (查看git rebase文档中的从上游rebase恢复部分。)

这就是为什么如果其他人使用你的回购,通常最好将来自origin的更改合并到live并推送合并。它不像rebase那么干净,但下游没有人需要做一些时髦的事情来跟上你的重写:

git checkout live
git merge --no-ff origin/whatever
git push origin live

当您准备好将live中的更改提取回主分支时,您可以随时进行变基。

另一方面,如果您是唯一一个使用您的仓库的人,或者下游人员可以通过修复远程历史记录重写,--force远离。

答案 3 :(得分:-1)

我通常push -f在最初推动之后,当我知道还没有人提取我的更改,或者当我是唯一一个参与该项目的人时。 否则,只要您重写历史记录,就应该避免强制推送。