您给出的命令序列将很接近,但它不会为 rebase + 本地更改创建单个提交。首先,您不妨 fetch,下面的图表将假设您已将远程 refs 与远程 repo 保持同步。所以,如果有什么东西你还没有拿到,那就去拿吧。那么:
听起来你有
A --- B --- C <--(develop)(origin/develop)
\
X1 --- X2 --- X3 <--(branch_x)
接下来你从branch_x 重新定位到开发(...所以希望没有远程branch_x?),并且其他人推动了更改以开发:
A --- B --- C --- D <--(origin/develop)
\
X1' --- X2' --- X3' <--(develop)
您还对本地的develop 进行了一些更改。
(您建议的命令列表以add 和commit 开头,所以我认为这些命令甚至还没有在本地上演...):
A --- B --- C --- D <--(origin/develop)
\
X1' --- X2' --- X3' <--(develop)
\
o <--WORKING TREE
所以您想将X1'、X2'、X3' 和o 组合成一个父级为D 的提交,对吧?
好吧,开始提交您的本地更改。
git add --update
git commit
(不知道你为什么使用--update,但只要你不打算添加新文件就可以了。)
A --- B --- C --- D <--(origin/develop)
\
X1' --- X2' --- X3' --- Y <--(develop)
现在你说你不能做squash,但我不清楚为什么会这样。在我看来,从这里最简单的事情就是
git checkout origin/develop
git merge --squash develop
# handle conflicts
git commit -m "rebase + my changes"
git branch -f develop
给你
A --- B --- C --- D <--(origin/develop)
\
X1X2X3Y <--(develop)
现在你可以推送了。