我有一种情况,我不小心在超级项目中合并了一个子模块。我从超级项目中运行了以下命令,即.gitmodules
的位置git pull submodule_dir/submodule_file
当然,现在来自子模块的每个提交消息都集成在超级项目中。我可以手动删除文件,因为它们只是在一个文件夹中,但是如何删除所有提交(总共大约9个)并且还可以识别。问题是rebase不起作用,因为提交是分散的。例如,对HEAD ^ 9的rebase也会删除一些实际属于超级项目的提交。
git reset
,git rebase
无效。因为否则,我会松开其他提交。
git reset --hard origin/master
是最接近的最佳选择,但它会破坏我已提交的本地更改。
可能是什么解决方案?我从来没有使用樱桃挑选,但我不确定,如果我应该这样做。在试验之前我想问一下,让事情变得更糟。像这样的东西,并删除所有的罪魁祸首提交。
commit latest: this consists of all my local changes and they are precious.
commit
commit
culprit commit
commit
commit
culprit commit
commit
commit
culprit commit
commit
commit
commit
commit
答案 0 :(得分:2)
git reset --soft HEAD~9
会保留您的更改,但会删除提交
根本不触摸索引文件或工作树(但将头重置为,就像所有模式一样)。这将保留所有已更改的文件“要提交的更改”,因为git status会将其设置为。
答案 1 :(得分:0)
您可以使用超级分支的以下命令。
git reset --hard HEAD~9
它将重置最后9次提交并在命令
下运行 git log
您可以看到您的提交已被删除。