git 问题 - commit 自动脱离
1.在a分支,提交commit 01。
2.签出到b分支,把a合并过来。
3.签出到a分支,查看b的历史记录,
关键来了:在a分支,查看b的历史记录,
然后,(重点)在b的历史记录界面,删除commit 01
发现:!!!!!
b的提交记录没变化,因为没有签出到b分支,无法对b分支进行任何更改!
但是:a分支的commit 01,不见了……………………
总结:vs2017的误区。
其实不是bug
。
1.在b的历史记录删除commit 01,其实真正的操作是:在当前分支,删除commit 01(根据哈希值来操作的)
2.所以,如果在b的历史记录删除一个a分支没有的commit ,是失败的。
刚刚测试了一下…………真神奇,分支b的新commit不但没删掉,反而出现在了a分支……
总结:绝对不要不要在visual studio 2017中, git 的历史记录里,非当前分支下,进行任何删除操作。
如果不小心删掉了,那么丢失的 commit ,其实是还在的,只不过已经不存在于任何分支里了。
那么如何找回来?
如果有这个commit的哈希值,那好办,直接
git branch 新分支名字 哈希值
就根据该哈希值,创建了一个分支,然后你再合并回去就行了。
(参考:打一个标记,从标记签出,修改,提交。那么此提交就是不绑定任何分支的commit了。)
如果没有这个commit的哈希值…………我目前也没办法了……
抢救性方法:打开.git / logs / HEAD 文件,里面保存有 HEAD 指针记录,如果你的某个 COMMIT 还在,那就复制哈希值,然后
git branch newBranchName HashValue
就行啦~~ 美滋滋
注意:这个文件是本地的,并不会上传到 git 的托管服务器。