Git 删除提交,但保留更改

Git 删除提交,但保留更改,git,Git,假设我有这样的提交历史记录: commit 1 - The first commit commit 2 - The commit I want to revert, but keep the changes of commit 3 - The third commit commit 4 - The fourth commit [uncommited work] 如果我还没有推送任何内容(或者只推送到提交1),我如何删除提交2,但将提交2中所做的更改应用到当前未受限制的工作 我所能找到的只是关于

假设我有这样的提交历史记录:

commit 1 - The first commit
commit 2 - The commit I want to revert, but keep the changes of
commit 3 - The third commit
commit 4 - The fourth commit
[uncommited work]
如果我还没有推送任何内容(或者只推送到提交1),我如何删除提交2,但将提交2中所做的更改应用到当前未受限制的工作


我所能找到的只是关于如何删除提交及其更改或重置为该提交,这将(据我所知)从历史记录中删除所有提交。

我将按照您想要的方式重新排列修订,然后选择提交2,隐藏弹出,然后将头指针设置为“重建”提交4:

git stash save "will come back"
git checkout commit1
git cherry-pick commit2..commit4
git cherry-pick  commit2
git stash pop
git reset --soft HEAD~1

这应该可以

我相信git-rebase-I HEAD~3应该可以做到这一点


然后您可以选择commit 2进行编辑,更改commit的内容或已更改的文件,然后git将在已编辑的commit 2上“重播”commit 3和commit 4。我想删除一个特定的提交,但保留所做的更改(现在)。你是对的,应该这样做。但我想可能只有一个命令,所以如果其他人有这样的命令,我会接受这个答案。也许@Pandelis-answer也能起作用,但我还不确定。听起来不太悲观,但我不认为git社区不能为可能出现的每种情况提供单独的git命令。通过使用git已经提供的命令,您所暴露的情况恰好是(某种程度上)“易于解决的”。是的,这非常有意义。我只是想我可能错过了一个选择。我也没意识到你可以像那样摘樱桃,所以谢谢你!但我不想编辑提交2,并在此基础上应用提交3和4。也许我甚至认为当前的更改和提交2中所做的更改都是无用的,所以我将它们全部删除。