git 修改旧提交而不创建新提交

w6mmgewl  于 2023-08-01  发布在  Git
关注(0)|答案(1)|浏览(119)

我在用Git做实验。我有一个文件 a.txt 在仓库和4提交在我的主分支目前。git log:

* aabe7d0 (HEAD -> master, origin/master, origin/HEAD) Updated goats
* 57694cf (tag: customerY_release) Updated sheep
* 791b4cb (tag: customerX_release) Updated cows
* e96a52b Added init contents..'

字符串
我想修改一个较旧的提交,即在提交 791b4cb 中更改文件 a.txt 中的一行。“cats=10”到“cats=100”。然后这个变化应该反映在所有的提交中 791b4cb,57694cf,aabe7d0,并且在这个过程中不应该创建新的提交,树应该在最后看起来一样。
我尝试了以下引用:https://stackoverflow.com/questions/8824971/how-to-amend-older-git-commit

git rebase -i HEAD~3   // HEAD~2 did not list the commit 791b4cb...


然后将打开的文本编辑器中的行更改为:

edit 791b4cb
pick 57694cf 
pick aabe7d0


保存...然后在a.txt中进行所需的更改“cats=10”到“cats=100”...然后承诺。

git add a.txt
git commit --amend --no-edit
git rebase --continue


但是上面的过程导致了一个不同的树,添加了新的提交。

* f55fdd4 (HEAD -> master) Updated goats
* 59c850d Updated sheep
* 7aee3ea Updated cows
| * aabe7d0 (origin/master, origin/HEAD) Updated goats
| * 57694cf (tag: customerY_release) Updated sheep
| * 791b4cb (tag: customerX_release) Updated cows
|/
* e96a52b Added init contents..'


这不是我的本意我希望树从一开始看起来就像所有现有的提交一样:791b4cb,57694cf,aabe7d0 得到合并和修改,在 a.txt 中发生的更改在 791b4cb...在Git中可以做到这一点吗?

whlutmcx

whlutmcx1#

你的要求毫无意义。
在Git中,每个提交都是文件系统树的一个记录和一个指向其父提交的指针。如果你改变了一个提交的父提交,你实际上是在构造一个 * 不同的 * 提交。然后你复制下一个提交,这也和原始提交类似,但是有不同的父提交。诸如此类。
如果你推送(使用--force-with-lease选项),那么上游树将再次看起来像你的本地树。不过,请注意不要使用强制推送来让其他开发人员感到惊讶。

相关问题