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