我已经看过这些以前的问题:
但它们并没有完全解决特定问题 - 索引中还有其他变化!运行rebase
命令时,git 抱怨:Cannot rebase: You have unstaged changes.
设想:
最后一个提交之前的提交(我是否将其称为“2 HEADs ago”?)是重构提交。我目前在索引中有许多未暂存的更改,但只有一些我想添加到上一个到最后一个提交中。
我想象这样做的方法是:
stash
我当前的所有更改rebase -i
到上一个到最后一个提交(更改索引和移动 Head,对吗?)- 在不更改 Head 的情况下将存储加载到我的索引中(如何?)
- 使用
add -p
并commit --amend
有选择地修改这个旧的提交 rebase --continue
完成(更新孩子,将头移回我开始的地方,索引会发生什么?)- 然后弹出/清除存储(索引回到我开始的位置)。
它是否正确?如果是,我该如何执行第 3 步?如果不是,我应该怎么做?
另外,请注意,我仍在学习 git 并且仍然不能 100% 确定我是否正确引用了 git 中的内容(头、索引、存储等)。
解决方案:
对于其他任何人,这可能会有所帮助,这些是我实际采取的步骤:
git stash
我当前的所有更改git rebase -i <ID>
到前一个到最后一个提交的父级,更改索引并移动 Headgit stash apply
在不更改 Head 的情况下将存储加载到我的索引中- 如果您有冲突,
git reset HEAD <file>
卸载文件暂存。确保分期清晰。
- 如果您有冲突,
- 使用
add -p
和commit --amend
选择性地暂存更改并提交它们 git reset --hard
丢弃索引,使其与 Head 匹配git rebase --continue
完成。更新孩子,移动头回到最开始,但有变化- 历史现在分为两个版本。另一个分支在之前隐藏的 WIP 处结束
- 然后弹出存储以将索引带回我开始的位置。另一个分支也被清除。