Git系列之系列之Refs与与Reflog
Git是一切关于commit的艺术:你暂存commit,提交commit,浏览以往的commit,在不同的仓库切换commit,这一切使用不
同的命令来实现。这些命令中大部分以各种形式操作commit,一些可以接受commit作为参数。例如,你可以使用 git
checkout 命令来查看以往的commit,只需要传入该commit的哈希即可,抑或传入分支名在不同分支间切换。
通过理解这些使用commit的不同方式,将使得这些命令变得更加强大。本章,我将通过探究commit引用的多种方式来阐述常
见命令的内部工作原理,这些常见命令包括 git checkout , git branch 和 git push 。
我们也将学到怎样去恢复看似“丢失”的命令,通过Git的reflog机制来访问到它们。
哈希
引用commit最直接的方式就是通过它的SHA-1哈希。这是每个commit独一无二的ID。在 git log 的输出中你可以找到每个
commit的哈希。
commit 0c708fdec272bc4446c6cabea4f0022c2b616eba
Author: Mary Johnson <mary@example.com>
Date: Wed Jul 9 16:37:42 2014 -0500
Some commit message
当你向其他命令传commit时,你只需要输入足够的字符来标明这个独一无二的提交即可(译注:即你不需要将40位的哈希都
输入)例如,你可以查看某个commit通过像下面这样运行 git show 命令:
git show 0c708f
工作中有时需要将一个分支(branch),标签(tag)或其他间接引用解析成相应的commit哈希时。此时你需要使用 git rev-
parse 命令。以下命令执行后将显示主分支当前commit的哈希。
git rev-parse master
这在编写接受commit引用的自定义脚本时非常有用。你可以使用 git rev-parse 命令来使你的输入规范化,而非手动编译你的
commit引用。