branch 用完就删是好习惯,但有的时候,不小心手残删了一个还有用的 branch ,或者把一个 branch 删掉了才想起来它还有用,怎么办?
reflog 是 "reference log" 的缩写,使用它可以查看 Git 仓库中的引用的移动记录。如果不指定引用,它会显示 HEAD 的移动记录。假如你误删了 branch1 这个 branch ,那么你可以查看一下 HEAD 的移动历史:
git reflog
从图中可以看出, HEAD 的最后一次移动行为是「从 branch1 移动到 master 」。而在这之后, branch1 就被删除了。所以它之前的那个 commit 就是 branch1 被删除之前的位置了,也就是第 二行的 c08de9a 。
所以现在就可以切换回 c08de9a ,然后重新创建 branch1 :
git checkout c08de9a
git checkout -b branch1
这样,你刚删除的 branch1 就找回来了。
不再被引用直接或间接指向的 commit s 会在一定时间后被 Git 回收,所以使用 reflog 来找回删除的 branch 的操作一定要及时,不然有可能会由于 commit 被回收而再 也找不回来。
reflog 默认查看 HEAD 的移动历史,除此之外,也可以手动加上名称来查看其他引用的移动历史, 例如某个 branch :
git reflog maste