有什么方法可以撤消所有未推送的提交(我在没有推送的情况下向错误的分支进行了 3 次提交)而不丢失更改?
您可以使用
git reset
返回到之前的提交。
确保使用 --mixed 选项,这样它会保留您的更改但删除提交:
git reset --mixed HEAD~3
在这种情况下,我通常建议是从当前提交创建一个新分支,然后将当前分支硬重置回进行新提交之前的点。
# from master
git branch feature
git reset --hard HEAD~3
上面假设您错误地提交了
master
分支,而您实际上打算在某个 feature
分支上。它还假设您进行了 3 次提交。如果不是 3,请将硬重置命令更改为正确的提交数。
~1
~2
~3
~4
是提交数量
删除最近的提交,保留更改
git reset --soft HEAD~4
删除最近的提交,删除更改
git reset --hard HEAD~4
保留更改但删除提交
git reset --mixed HEAD~4
我想要一种方法来做到这一点,而不总是需要知道要重置多少提交。因此,为了自动获取该数字,我使用了
git cherry -v
,它提供了此类数据:
+ 5863a345c61f9940415899ef1a3d4af61d81c350 fix no color causing broken swatch
+ 4d777fee2e46a49e6d1c7c293246eb0a6e7a9a40 better support for categories without a default color
通过
wc -l
管道获取行数,然后通过 xargs
清理空白并...:
git reset --mixed "HEAD~$(git cherry -v | wc -l | xargs)"