tl; dr:提交某事,推送该内容,修改该提交并尝试再次推送而不使用--force
失败。当我尝试更改“已发布的提交”时,如何设置 Git 以便告诉它?
我使用 Git 已经有一段时间了,它仍然是我遇到过的最好的事情之一(软件方面):它完全支持我开箱即用的方式。就在昨天,我做了一件愚蠢的事情:我提交了一些东西,将其推送到我的遥控器,离开了几分钟,当我回来时,我注意到我在添加后更改了其中一个文件,因此提交是不完整。像往常一样,我曾经git commit --amend
解决这个小问题。
我工作了几个小时,并决定是时候再做一个了git push
。令我沮丧的是,git 拒绝这样做并阅读消息,向后滚动几千行我看到了我所做的并且知道发生了什么。远程基本上只不过是一个私人的异地备份,没有其他人使用它来推送或拉取。所以我没有遇到任何人使用git push --force
. 由于我不希望在多用户环境中发生这种情况(清理我的历史记录或强制推送),我考虑了如何在未来防止这种情况发生:Git 可以发出清晰可见的警告,甚至可能要求我输入某物。我会注意到并可能决定不修改。
所以,问题是:我如何配置 Git 来警告我修改已经推送的提交?或更笼统地说:如何配置 Git 以警告我更改已发布的历史记录?
编辑#1(约 6 小时后):不幸的是,我没有足够的信心尝试自己实现这一点,但也许它可以帮助某人帮助我:) 我认为由于--amend
只影响最新的提交,这就足够了有一个预提交挂钩来检查我正在尝试修改的提交的哈希值,并将当前/最新提交推送到远程。例如,目前我b45025a...
在本地机器上获得了对 master 的最新提交,我推送了它并cat .git/refs/remotes/<remote-name>/master
给出了b45025a...
。那么,检查相应的远程分支是否与我现在尝试修改的提交相同?
在写这篇文章之前,我问了谷歌并简要查看了我在这里找到的问题,但似乎没有什么适合(选择):