【问题标题】: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 中做一些小改动,这只是一个单词替换。 我需要编辑第三次提交而不产生额外的提交。 有办法吗?还是可以接受?

【问题讨论】:

  • 其他人是否在使用您推送到的同一存储库?

标签: git rebase


【解决方案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

    【讨论】:

    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 2012-02-08
    • 2017-11-19
    • 2011-12-08
    • 2021-04-27
    • 2013-12-19
    • 2021-11-02
    • 2014-10-19
    相关资源
    最近更新 更多