Git 为什么对远程存储库进行强制推送是危险的?
假设我做了一些更改,提交了它们,然后将提交推送到远程存储库。然后我决定我忘记对它进行适当的注释,或者拼写错误,我想做一个软重置来编辑和重新提交我的更改 是什么让强制将其推送到远程存储库变得“危险”呢?Git非常努力地不覆盖您的任何更改,因此在您的日常工作中,如果您试图推送到一个头部引用与本地头部引用不同的远程存储库,Git会对此大发雷霆 当您使用Git 为什么对远程存储库进行强制推送是危险的?,git,Git,假设我做了一些更改,提交了它们,然后将提交推送到远程存储库。然后我决定我忘记对它进行适当的注释,或者拼写错误,我想做一个软重置来编辑和重新提交我的更改 是什么让强制将其推送到远程存储库变得“危险”呢?Git非常努力地不覆盖您的任何更改,因此在您的日常工作中,如果您试图推送到一个头部引用与本地头部引用不同的远程存储库,Git会对此大发雷霆 当您使用--force时,Git会将训练轮取下,并假设您知道自己在做什么,即使您不完全理解或理解您的行为的后果 为了说明您的示例,以下是您的远程存储库上的内容:
--force
时,Git会将训练轮取下,并假设您知道自己在做什么,即使您不完全理解或理解您的行为的后果
为了说明您的示例,以下是您的远程存储库上的内容:
<-- [] <-- [] <-- [HEAD]
您的新HEAD引用的SHA与远程存储库中的不匹配,因此Git将拒绝推送,因为它认为您将丢失数据
但是,当您强制它时,Git信任您并将新的头作为规范引用通过此操作,对旧头提交的引用将丢失。
<-- [] <-- [] <-- [HEAD]
使用--force
推送的主要风险之一是看不到其他人推送的提交会丢失
为了防止这种情况发生,最好的做法是永远不要使用--force
,而是更喜欢--force with lease
,这可以保证您在有意识地忽略提交之前已在存储库中获取提交 如果其他人只是拉取了存储库而没有对其进行任何更改,是否存在问题?
<-- [] <-- [] <-- [HEAD]
\
\<-- [(old HEAD)]
<-- [] <-- [] <-- [HEAD]