【发布时间】:2021-05-11 05:41:18
【问题描述】:
如果我独自从事一个项目,使用git push --force 是否有危险?我知道与团队合作时存在危险。但是如果我一个人呢?
【问题讨论】:
-
就像我在问题中所说的,我一个人。谁想成为我的情人?
标签: git git-commit git-push
如果我独自从事一个项目,使用git push --force 是否有危险?我知道与团队合作时存在危险。但是如果我一个人呢?
【问题讨论】:
标签: git git-commit git-push
使用git push --force 时的主要危险确实是被其他开发人员松动。所以它不应该发生。
但是你仍然可以错误地丢失自己的提交......
正如@Prihex 在 cmets 中正确提到的那样,在这种特定情况下,您错误地丢失了自己的一个提交,您仍然可以通过查看您 @987654324 的分支的 git reflog 来检索它@
PS:另外,请注意,最好使用git push --force-with-lease 或git push --force-if-includes 来降低意外松散提交的可能性(请参阅documentation)
【讨论】:
git reflog 恢复。随意。
如果你强制推送到已经部署的分支,例如 master 或 main,你不仅可能会丢失自己的工作,而且还有可能不知道发布了哪些代码。这将使在生产中发现问题变得非常困难。
所以不要强行推送你用于发布的分支。当你是唯一的开发者时也不会。
大多数 git 托管可以阻止对特殊分支的强制推送。建议启用它以防止这种危险。
【讨论】:
正如 Philippe 所提到的,尽管您可能会丢失自己的提交(例如,git rebase 或之后只是 git reset HEAD~ 和 git push --force),但您还不错,但并非所有内容都会丢失,因此请记住这一点。
如果您通知用户(如果有的话),在相对较小的用户群中维护仍然很容易。用户群越大,越痛苦,因为git pull --force 不是自动发送的,来自普通git pull 的消息对于初学者来说可能看起来很神秘。
最好在git push --force 之前先尝试git fetch 并查看树是否未更改(由其他人或您在另一台机器上)以防止意外删除已经新的提交在远程仓库上。
请注意,除非您在之后修剪 repo,否则提交仍然存在因此您只需记住(或在控制台/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
但是,一旦您修剪了 repo(或由于大小/配置而自动修剪),事情就会变得非常复杂,并且需要像处理原始 git 对象一样需要手动注意(据我所知)。
【讨论】: