为什么我必须在更改提交消息后强制推送?

MD *_* XF 7 git push git-push

我读到有关如何修改提交消息的内容.接受的答案是:

如果您已经将提交推送到远程分支,那么您需要强制推送提交git push <remote> <branch> --force.

这是我的理解(也来自已接受的答案)git push --force将覆盖远程分支上的所有数据与本地数据.

为什么在更改提交消息后强制推送是必要的?如果我修改提交消息并试图在没有-f或者推送的情况下会发生什么--force

Von*_*onC 11

通过修改提交,您正在更改其SHA1,这意味着本地和远程历史不再相同.

如果要用(修改的)本地替换远程历史记录,则需要强制推送.
如果你不这样做,Git将拒绝推送,并要求你拉(在这种情况下,这是没有用的,因为你将合并相同的内容,但不同的提交消息)

强制推动可能是危险的,因为它迫使其他合作者将他们自己的本地历史重置为新的(强制推送).

如评论所述,--force-with-lease更安全(如果您正在更改的远程分支自上次拉动后本身已更改,意味着其他人正在积极使用它并将其推回,则强制推送被拒绝).
再加上一个明智的拉政策(你总是衍合你还没有推什么),并力推变得不那么需要的.

  • @ccarton它是Git设计的核心*,它关于数据*完整性*(我在这里提到:http://stackoverflow.com/a/27440678/6309)它通过一致性检查实现了这一点:http: //stackoverflow.com/a/28792805/6309.如果没有更改所有仓库的SHA1,可能无法改变. (5认同)
  • 对我来说似乎是糟糕的设计。修改提交消息应该是可以安全完成的事情,不管人们对实践的看法如何。 (2认同)
  • 是的,这是我的观点.在不威胁"数据完整性"的情况下,您无法安全地修改提交消息这一事实对我来说似乎是短视设计.我接受git,因为它今天可能无法改变以支持这一点,但这不是重点. (2认同)
  • @ccarton这是一个很好的设计,即使有时候有不便也会带来很多好处.如果你真的**需要,也许你应该使用'git notes'. (2认同)
  • @ccarton请注意,您可以修改本地仓库中的提交,直到将它们推送到远程仓库,远程仓库本身应该是一个决策点,而不仅仅是一个自动操作. (2认同)