如果我一个人在做一个项目,使用 "git push --force" 会有危险吗?

Is there a danger of using "git push --force" if I am working on a project alone?

如果我一个人在做一个项目,使用 git push --force 会有危险吗?我知道当我和团队一起工作时会有危险。但是如果我一个人怎么办?

使用 git push --force 时的主要危险确实是由其他开发人员推送的。所以这不应该发生。

但是您仍然可能会错误地丢失自己的提交...

正如@Prihex 在评论中正确提到的那样,在这种特定情况下,如果您错误地丢失了自己的提交之一,您仍然可以通过查看分支的 git reflog 来检索它你 git push --force

PS:另外,请注意,最佳做法是使用 git push --force-with-leasegit push --force-if-includes 来降低意外松散提交的可能性(参见 documentation

正如 Philippe 所提到的,你很好,虽然你可能会丢失自己的提交(例如,通过 git rebase 或之后 git reset HEAD~git push --force),但并不是所有的事情都会丢失所以记住这一点。

如果您通知用户(如果您有的话),在相对较小的用户群中仍然很容易维护。用户群越大,它就越痛苦,因为 git pull --force 不是自动的,来自普通 git pull 的消息对于初学者来说可能看起来很神秘。

最好在 git push --force 之前先尝试 git fetch 并查看树是否未被更改(由其他人或您在另一台机器上更改)以防止意外删除了远程仓库上的新提交。

请注意,除非你 trim 之后的回购,否则提交 仍然存在 因此你可以通过记住(或有日志)轻松恢复以前的状态在你的 console/gui/screenshot/...) HEAD 提交(7 个字符大部分就足够了,在小型回购中我什至可以逃脱 3 或 2 个)或 simply at least one commit from the tree 你删除并简单地

git checkout <hash>
git checkout -b my-restored-branch
git push -u origin my-restored-branch

但是,一旦您 trim 存储库(或者由于 size/configuration 而自动 trimmed),事情就会变得非常复杂,并且需要像使用原始 git 个对象(据我所知)。

如果强制推送到已经部署的分支(例如 master 或 main),不仅您可能会丢失自己的工作,而且还存在不知道发布了哪些代码的风险。这将使在生产中发现问题变得非常困难。

所以不要强行推送你用于发布的分支。当您是唯一的开发者时也不例外。

大多数 git 托管可以阻止对特殊分支的强制推送。建议启用它以防止这种危险。