我有一个branch2
从另一个分支而来的分支branch1
,没有额外的提交,branch1
所以分支树实际上是线性的。
现在我发现 中的最后一次提交branch1
实际上应该是 的第一次提交branch2
。所以我认为应该是 保存到 命令git reset --hard HEAD~
。在文档中,我们发现 之后的提交丢失了,但我认为因为我们有branch2
,所以在给定场景中情况并非如此。
如果有多个提交,我可以git reset --hard hash
使用所需提交的哈希值来命令,对吗?
为确保万无一失,我希望听取社区的意见。
你是对的,什么都没有丢失。要理解原因,有必要了解一下 git 的工作原理:
abc123
在branch1
”实际上意味着“如果您从引用的提交开始branch1
,并向后跟随“父”指针,那么您将在某个时候到达提交abc123
”。所做
git reset --hard
的(以及丢弃未提交的更改,这是永久性的)是将命名引用更改为指向不同的提交。警告是,这可能会导致上一次提交“无法访问” - 即不存在于任何命名分支或标签的历史记录中。定期地,无法访问的提交会被“垃圾收集”,并从数据库中删除。在此之前,如果您知道它们的哈希值,或者在类似的地方找到它,仍然可以访问它们
git reflog
就您而言,从 可访问的所有提交
branch1
也从 可访问,因此不会有任何内容变得无法访问。branch2
您正在改变这样的历史:
对于这样的人: