繁体   English   中英

为什么对远程存储库进行强制推送是危险的?

[英]Why is it dangerous to do a force-push against a remote repository?

假设我做了一些更改,提交它们,然后将我的提交推送到远程存储库。 然后我决定我忘了充分评论它,或者拼错了一些东西,我想做一个软重置来编辑并重新提交我的更改。

是什么让强制将其推送到远程存储库“危险”?

Git非常努力地不覆盖您的任何更改,因此在您的日常工作中,如果您尝试推送到其 HEAD 引用与本地 HEAD 引用不同的远程存储库,Git 将对此进行调整。

当您使用--force时,Git 会关闭训练轮并假设您知道自己在做什么,即使您不完全理解或欣赏您的行为的后果。

为了说明您的示例,这是您的远程存储库上的内容:

<-- [] <-- [] <-- [HEAD]

...这是您推送之后但在您发现错误之前的本地:

<-- [] <-- [] <-- [HEAD]

当您使用--amend纠正错误时,Git 实际上有两个提交引用了前一个提交,但其中只有一个引用了规范的 HEAD 引用。

<-- [] <-- [] <-- [HEAD]
            \
             \<-- [(old HEAD)] 

您的新 HEAD 引用的 SHA 与远程存储库中的不匹配,因此 Git 将拒绝推送,因为它认为您将丢失数据。

但是,当您强制执行它时,Git 会信任您并将新的 HEAD 作为规范参考。 这样,对旧 HEAD 提交的引用就会丢失。

<-- [] <-- [] <-- [HEAD]

这是危险的,因为:

  • 可能丢失了数据; 如果它是一个简单的--amend ,你可能没有这样做,但它仍然是可能的

  • 任何基于旧 HEAD 参考的工作的其他人现在都必须重新调整他们的工作,这可能会导致很多过度的胃灼热。

沟通可以减轻第二个部分,但第一个部分在强制推动时需要更加谨慎。 只有在您绝对确定您推送的内容不会导致数据或信息丢失时才强制推送。

使用--force push 的主要风险之一是看不到其他人推送的提交,因此,这将丢失!

为了防止这种情况发生,最好的做法是永远不要使用--force而是更喜欢--force-with-lease ,这可以保证您在有意识地忽略它们之前已经获取了存储库中分支的所有提交......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM