假设我已经做了一些更改,提交了它们,然后将我的提交推送到远程代码库。然后我意识到我忘记了充分注释它,或者拼错了什么,我想软重置以编辑并重新提交我的更改。
强制推送这个修改到远程代码库为什么会“危险”?
强制推送这个修改到远程代码库为什么会“危险”?
<-- [] <-- [] <-- [HEAD]
这是你推送之后,但在发现错误之前的本地代码:
<-- [] <-- [] <-- [HEAD]
--amend
来更正错误时,Git实际上有两个提交与先前的提交相关,但只有一个提交与规范的HEAD引用相关。<-- [] <-- [] <-- [HEAD]
\
\<-- [(old HEAD)]
你的新HEAD引用的SHA与远程仓库上的不匹配,因此Git会拒绝推送,因为它认为你将会丢失数据。
但是,当你使用force选项时,Git会信任你并将新的HEAD作为规范引用。通过这种方式,旧HEAD提交的引用将被丢失。
<-- [] <-- [] <-- [HEAD]
这是危险的,因为:
如果使用--amend
指令,你可能会丢失数据;但实际上很可能不会出现问题。
任何以旧的HEAD引用为基础的人现在必须重新定义他们的工作,这会让他们感到很烦恼。
沟通可以减轻第二个问题,但在强制推送时需要更加谨慎,只有在确定你要推送的内容不会导致数据或信息丢失时才进行强制推送。
使用--force
推送的主要风险是可能看不到其他人推送的提交,从而导致提交丢失!
为了防止这种情况发生,良好的做法是永远不要使用--force
,而是更喜欢--force-with-lease
,它保证在有意忽略它们之前,在您的存储库中获取了分支的所有提交...