删除一个git提交但保留更改。
在Git中,有时候我们会提交一些错误的更改或者不必要的更改,这时候我们就需要撤销或删除这些提交,但是又不想丢失其他的更改。解决这个问题的方法是使用Git的reset命令。
具体的解决方法如下:
1. 首先,我们可以使用git reset --soft HEAD~2
命令将HEAD分支回退到之前的某个提交(最近的一个你想保留的提交)。
2. 然后,只需再次运行git commit
命令,并添加你想要保留的更新提交的文件。
3. 如果需要更详细的信息,可以参考下面的链接:Git-Reset Demystified
通过以上步骤,我们可以删除不必要的提交,同时保留其他的更改,避免丢失重要的代码。
删除一个git提交但保留更改的问题出现的原因是想要删除最后两个提交并保留更改。解决方法是使用git reset HEAD~2
来删除提交。然后,可以对最老的提交进行修改,以包括提交1和提交2的更改:git add --all
然后git commit --amend
。如果重置两个提交然后修改而不仅仅提交,那么在历史记录中会多出一个提交并影响提交3
的父提交。至于one commit too far
和impact commit 3 parent
的含义,是指如果我们使用git reset HEAD~3
而不是2,就会发生这种情况。如果我们只是做一个新的提交,那么它将是提交3,新提交
而不是提交3
仅包含所有的更改。首先,reset
回退2个提交,所以此时HEAD
指向提交3
。然后,git commit --amend
意味着重新做以前的提交,即提交3
的父提交。git commit --amend
重新做的是当前的提交。我不确定重新做上一个提交会如何工作(因为这样会影响当前的提交),所以每次--amend
都会修改2个提交。我在这里检查了一下oreilly.com/library/view/git-pocket-guide/9781449327507/…,它根本不会影响父提交,我想你可能在某个地方读到了错误的关于previous commit
的理解,这里的previous commit
指的是last commit
,而不是last
提交的previous
。不,但我猜你可能误解了我的评论。当你使用--amend
时,你不是在当前提交的基础上提交,而是重新做并替换它。你可以读任何你想读的东西,但这是一个错误的答案。是的,它是在重新做和替换它,所以它将是一个新的提交,但它不会影响父提交,新提交的父提交将与替换的提交的父提交相同。这是否意味着没有办法保留包含所有更改的提交3
?所以要么像这个答案那样替换提交3
,要么在提交3
之后建立一个新的提交,就像下面的答案一样。