从意外合并中删除提交

时间:2017-09-08 07:06:44

标签: git

我有一种情况,我不小心在超级项目中合并了一个子模块。我从超级项目中运行了以下命令,即.gitmodules

的位置
git pull submodule_dir/submodule_file

当然,现在来自子模块的每个提交消息都集成在超级项目中。我可以手动删除文件,因为它们只是在一个文件夹中,但是如何删除所有提交(总共大约9个)并且还可以识别。问题是rebase不起作用,因为提交是分散的。例如,对HEAD ^ 9的rebase也会删除一些实际属于超级项目的提交。

git resetgit 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

2 个答案:

答案 0 :(得分:2)

git reset --soft HEAD~9会保留您的更改,但会删除提交

  

根本不触摸索引文件或工作树(但将头重置为,就像所有模式一样)。这将保留所有已更改的文件“要提交的更改”,因为git status会将其设置为。

Source

答案 1 :(得分:0)

您可以使用超级分支的以下命令。

    git reset --hard HEAD~9

它将重置最后9次提交并在命令

下运行
    git log

您可以看到您的提交已被删除。