【发布时间】:2018-06-14 04:13:01
【问题描述】:
我的更改已被推送。 这在最近的 2 次提交之前。 我的树看起来很像,
git log
ac123d commit 1
vr43de commit 2
q6ade6 commit 3
我必须在提交 3 中做一些小改动,这只是一个单词替换。 我需要编辑第三次提交而不产生额外的提交。 有办法吗?还是可以接受?
【问题讨论】:
-
其他人是否在使用您推送到的同一存储库?
我的更改已被推送。 这在最近的 2 次提交之前。 我的树看起来很像,
git log
ac123d commit 1
vr43de commit 2
q6ade6 commit 3
我必须在提交 3 中做一些小改动,这只是一个单词替换。 我需要编辑第三次提交而不产生额外的提交。 有办法吗?还是可以接受?
【问题讨论】:
问题的症结(强调)
我需要编辑第三次提交而不产生额外的提交。有什么办法吗?
不,这是不可能的。不能以任何方式更改提交。提交的 ID 的计算方式是,对提交内容的任何更改都会更改该提交的 ID,并且每个提交都来自它,如果您“更改”提交的 ID,这实际上意味着您正在创建一个新的提交 (虽然可能与原版非常相似)。
可能的选择是:
1) 在下一次提交中修复问题,并接受历史将始终包含这些先前提交中的错误单词
2) 重写历史记录,需要清理已将现有提交推送到的所有远程克隆副本
【讨论】:
尝试:
git rebase -i <sha or tag before the commit you wish to update>
这将打开一个编辑器,您可以在其中指定要执行的操作 然后在提交 3 上你可以更新提交
git commit --amend 然后git rebase --continue 将重新启动rebase 过程。那么你将使用
git push -f
更新服务器端(注意这有一些缺点,主要是如果其他开发者拉了这个分支)
我建议你首先创建一个分支并在分支上练习。
【讨论】:
--force-with-lease 而不是 -f/--force 以防止覆盖远程上较新的提交。 developer.atlassian.com/blog/2015/04/force-with-lease