【发布时间】:2016-01-19 08:14:44
【问题描述】:
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...。那么,检查相应的远程分支是否与我现在尝试修改的那个提交相同?
在写这篇文章之前,我问了谷歌,还简要查看了我在这里找到的问题,但似乎没有合适的问题(选择):
【问题讨论】:
标签: git warnings git-commit git-amend