git 如何做一个修正提交的修正提交和自动压缩它?

zujrkrfu  于 2023-09-29  发布在  Git
关注(0)|答案(1)|浏览(113)

场景

我有一个仓库,它有自己的master分支。

* abcdef012 2023-09-24 somebody (HEAD -> master, origin/master) some commit

我的同事(叫dev1)开了一个特性分支。

* 012345678 2023-09-25 dev1     (origin/feat/dev1) first feat commit
* abcdef012 2023-09-24 somebody (HEAD -> master, origin/master) some commit

我打开了一个修复分支来改进feat分支,并创建了一个 fixup commit

* 000000000 2023-09-26 me       (HEAD -> fix/dev1) fixup! first feat commit
* 012345678 2023-09-25 dev1     (feat/dev1, origin/feat/dev1) first feat commit
* abcdef012 2023-09-24 somebody (master, origin/master) some commit

问题

现在我意识到我需要 fixup 我的 *fixup提交 *;在我的工作结束时,我想交付一个 * 干净的分支 *,只有一个修正提交。
所以我尝试对我之前的 *fixup提交 * 进行 *fixup提交 *(就像我对其他提交所做的那样)……
git commit --fixup=000000000

* 111111111 2023-09-26 me       (HEAD -> fix/dev1) fixup! fixup! first feat commit
* 000000000 2023-09-26 me       fixup! first feat commit
* 012345678 2023-09-25 dev1     (feat/dev1, origin/feat/dev1) first feat commit
* abcdef012 2023-09-24 somebody (master, origin/master) some commit

我试着把它自动压扁
git rebase --autosquash feat/dev1
...期待以下结果...

* 222222222 2023-09-26 me       (HEAD -> fix/dev1) fixup! first feat commit
* 012345678 2023-09-25 dev1     (feat/dev1, origin/feat/dev1) first feat commit
* abcdef012 2023-09-24 somebody (master, origin/master) some commit

而相反,X1 M5 N1 X命令使提交树保持不变(即,如git commit --fixup=000000000命令之后)。:(

提问

我想实现的目标是否可以通过 fixup/autosquash git功能来实现?
我知道要达到同一个目标还有很多很多的路要走;我正在寻找的是一种只通过两个命令行来完成它的方法,就像我通常对 fixup 我的**non fixup 提交所做的那样:这两个命令之前说。

jdzmm42g

jdzmm42g1#

存在两个问题:
首先,git rebase --autosquash feat/dev1将忽略--autosquash。您必须请求交互式变基操作:

git rebase -i --autosquash feat/dev1

其次,有特殊处理,认识到一个双“修复!fixup!”提交实际上指向一个较早的常规“fixup!“commit想要修复。要使其工作,要修复的提交也必须在重新定基的提交中。然而,在你的情况下,这并不是因为你在历史上的基础不够远。在这种情况下,修正链断开,并且不记录修正。
您必须通过将todo-sheet中的第二个pick命令更改为fixup来手动请求修正。

相关问题