`git-rebase`vs`git-reset--hard`。。。删除最近的N个提交是否相同?
我知道,一般来说,`git-rebase`vs`git-reset--hard`。。。删除最近的N个提交是否相同?,git,git-rebase,git-reset,Git,Git Rebase,Git Reset,我知道,一般来说,git-rebase-I和git-reset用于非常不同的事情 但是在删除最近的N个提交的上下文中,在我看来它们是(或者可以是)相同的。我甚至做了一个实验(使用我的存储库的两个不同的本地副本),据我所知,它们是相同的。我只是把这个问题贴出来,以防有人能指出我可能遗漏了什么。这就是我所做的 我需要删除最近的11次提交(不管为什么) 我尝试了两种方法,它们看起来完全相同;只是想知道我是否遗漏了什么,因为它们并不完全相同: git-rebase-i头~12 从我不想要的11个提交中
git-rebase-I
和git-reset
用于非常不同的事情
但是在删除最近的N个提交的上下文中,在我看来它们是(或者可以是)相同的。我甚至做了一个实验(使用我的存储库的两个不同的本地副本),据我所知,它们是相同的。我只是把这个问题贴出来,以防有人能指出我可能遗漏了什么。这就是我所做的
我需要删除最近的11次提交(不管为什么)
我尝试了两种方法,它们看起来完全相同;只是想知道我是否遗漏了什么,因为它们并不完全相同:
git-rebase-i头~12
- 从我不想要的11个提交中删除提交行,只保留在它们前面的提交行(位于交互重新基准文件顶部的那一行)
- 重设基址成功
git复位——硬头~12
多谢。我只是想比现在更深入地理解git。一个区别在于他们对脏树的处理方式(文件已修改但未提交)
git reset--hard
将丢弃所说的更改,而git rebase-i
将要求您首先隐藏这些更改。正如12345ieee所指出的,如果存在未提交的更改,则命令的行为会有所不同(在不太可能的情况下,您有未提交的更改,在删除最近的11次提交后仍然适用);但是您可能更感兴趣的是,如果满足了所有先决条件,并且命令都继续移动分支指针,那么最终状态是否有任何差异
在这方面,它们基本上是相同的。回流日志中的条目将记录所发生事件的不同原因,但无论如何,这是一个局部(和临时)问题
还有另一种做同样事情的方法:
git checkout HEAD~12
git branch -f master
git checkout master
(这种方法取决于知道分支名称;这里我假设它是master
),而这不需要进入管道命令-因此实际上还有更多的方法
在git中有多种方法可以获得相同的结果,这并不罕见。你越了解git如何“思考”它存储的对象,就越容易找到它们。重定基址也允许你做其他事情。如果您只是删除所有这些提交(无论是显式的还是删除行),这与重置是一样的。区别在于,对于
git-rebase
,您必须编辑一个文件,如前所述,因此需要更多的键入。