场景
我有一个仓库,它有自己的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 提交所做的那样:这两个命令之前说。
1条答案
按热度按时间jdzmm42g1#
存在两个问题:
首先,
git rebase --autosquash feat/dev1
将忽略--autosquash
。您必须请求交互式变基操作:其次,有特殊处理,认识到一个双“修复!fixup!”提交实际上指向一个较早的常规“fixup!“commit想要修复。要使其工作,要修复的提交也必须在重新定基的提交中。然而,在你的情况下,这并不是因为你在历史上的基础不够远。在这种情况下,修正链断开,并且不记录修正。
您必须通过将todo-sheet中的第二个
pick
命令更改为fixup
来手动请求修正。