如何修改现有提交中的特定单词? [复制]

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”中的提交消息步骤? [复制]

如何 git 还原一个特定文件的更改,而我的提交更改也涉及其他文件? [复制]

如何修改旧的 Git 提交? [复制]

如何从特定修订版更改 GIT 中提交的作者 [重复]