Git版本:1.7.12.3
正如问题所述,这对我来说似乎是一个非常糟糕的想法。在没有任何附加标志或确认的情况下,git push -f
将强制推送所有跟踪分支到远程。
如果开发人员有几个过时的分支正在跟踪远程,并且执行该命令,则所有跟踪分支都会回滚到他过时的副本,这会导致有价值的工作丢失。
这可能是意外的,也可能是由于某些不太熟练的git用户而造成的。在这种危险情况下,Git似乎应该做更多的辅助工作,并要求使用附加标志或询问确认。
这个问题有解决方法吗?
Git版本:1.7.12.3
正如问题所述,这对我来说似乎是一个非常糟糕的想法。在没有任何附加标志或确认的情况下,git push -f
将强制推送所有跟踪分支到远程。
如果开发人员有几个过时的分支正在跟踪远程,并且执行该命令,则所有跟踪分支都会回滚到他过时的副本,这会导致有价值的工作丢失。
这可能是意外的,也可能是由于某些不太熟练的git用户而造成的。在这种危险情况下,Git似乎应该做更多的辅助工作,并要求使用附加标志或询问确认。
这个问题有解决方法吗?
git push --force
在推送当前或所有更改的分支方面与普通的git push
是完全相同的。
2. git push
会根据push.default
的配置来推送所有分支或单个分支。
3. 更多细节请参见此帖子,但要仅推送当前分支,您的.gitconfig
应如下所示:
[user] name = 用户名 email = example.mail@gmail.com [push] default = simple4. 要在类Unix操作系统中查看您的
.gitconfig
,只需执行cat ~/.gitconfig
即可。这个帖子展示了如何在Windows上完成此操作。
5. 仅推送当前分支(simple
模式)成为Git 2.0
(发布于2014-12-17
)中的默认选项。
6. 那些使用Git 1.7
的人(或从1.7
更新的人),其默认模式为matching
模式(推送所有分支)。git config remote.origin.push HEAD
git push -f
和git push
的作用相同,只是多了一个-f
选项。而且如果没有指定分支参数,git push
默认会推送所有匹配的分支。你应该执行git config push.default upstream
或git config push.default simple
来改变默认的推送行为(更多信息请参见git help config
)。