Git版本:1.7.12.3
正如问题所述,这对我来说似乎是一个非常糟糕的主意。没有任何额外的标志或确认git push -f
将强制将所有跟踪分支推送到远程。
如果开发人员有一些过时的分支,即跟踪遥控器,并且他执行该命令,则所有跟踪分支都将回滚到他过时的副本,这会导致有价值的工作丢失。
这可能是意外完成的,也可能是由对 git 不太熟悉的人完成的。看起来 git 在这种危险的情况下应该做更多的事情,并且需要一个额外的标志,或者要求确认。
有没有办法解决这个问题?
Git版本:1.7.12.3
正如问题所述,这对我来说似乎是一个非常糟糕的主意。没有任何额外的标志或确认git push -f
将强制将所有跟踪分支推送到远程。
如果开发人员有一些过时的分支,即跟踪遥控器,并且他执行该命令,则所有跟踪分支都将回滚到他过时的副本,这会导致有价值的工作丢失。
这可能是意外完成的,也可能是由对 git 不太熟悉的人完成的。看起来 git 在这种危险的情况下应该做更多的事情,并且需要一个额外的标志,或者要求确认。
有没有办法解决这个问题?
由于现在是 2016 年 1 月,我想值得为这个问题添加一些更新信息:
git push --force
其行为与正常情况完全相同。git push
git push
推送所有分支或单个分支,这取决于push.default
.gitconfig
应该看起来像:[用户] 名称 = 用户名 电子邮件 = example.mail@gmail.com [推] 默认 = 简单
.gitconfig
在Unix-like OS
做cat ~/.gitconfig
。这篇文章展示了如何在 Windows 上执行此操作。simple
模式)仅在 Git 2.0
(发布于2014-12-17
)中成为默认值。1.7
(或从 更新1.7
)的人将matching
模式作为默认模式(推送所有分支)。如前所述 git push 默认行为是在远程推送具有匹配名称的所有分支。
正如文档所说的 -f/--force:
通常,该命令拒绝更新不是用于覆盖它的本地引用的祖先的远程引用。此标志禁用检查。这可能会导致远程存储库丢失提交;小心使用它。
因此,在 -f 行为中添加额外的检查就像在询问“您确定要删除文件吗?” 然后“你真的确定吗?”
git push 的默认行为将在未来的 git 主要版本(1.9 或 2.0 但肯定不会在 1.8 中)发生变化,仅推送您正在处理的分支。在这种情况下,您可以设置以下选项:
git config remote.origin.push HEAD
但是,如果你使用 -f 并且你在一个过时的分支上,你的担忧仍然存在。
因为git push -f
做什么做什么git push
,只有一个-f
。因为git push
默认配置为在没有分支参数的情况下推送所有匹配的分支。您应该执行git config push.default upstream
或git config push.default simple
更改默认推送行为(git help config
有关此功能的更多信息,请参阅 )。