如何在Git中获取文件的修订版本

时间:2016-10-27 07:25:20

标签: git version-control

有没有办法在Git中获得文件的修订版(即提交哈希值)?

我知道git log -- <file_path>),但是这给了我所有的提交(如果我git log -1 -- <file_path>,那就是最后的提交),但这不是我想要的。让FILE提交A,B,C,D,E,其中E是HEAD现在我会做这样的事情

git checkout C -- FILE

现在,如果我git status,它会告诉我FILE已修改并需要提交 - 我不想做的事情。 (我的应用程序中有简单的历史记录查看器,需要在结帐后标记文件的修订版。)

有没有办法让Git向我展示当前版本(在这种情况下是提交C)?

SVN可以通过svn info <file_name>执行此操作,但SVN不是Git,并且工作方式不同。

编辑:

SVN中的

svn info FILE // gives me revision E
svn update -r C
svn info File // gives me revision C

EDIT2:真实世界的例子:

$ git log --pretty=format:"%H ... %h ... %s" -- MySQL\ 5_5.txp
131b81c2a203c564c01b4fffa98b7395ebb75bc2 ... 131b81c ... modified MYSql5.5
2640738310efa21f119cdcb252cc5069aade27bd ... 2640738 ... Changed Entity 2     position
bbe9b2474b3f0127da0271b4db74712c201c2c03 ... bbe9b24 ... Changed Entity 3 position
c40c5f74599515d95b17641a58c2864a34b20f06 ... c40c5f7 ... from popup
ac46fa7d4d93e91183a033ce8fffcf93d9f0505d ... ac46fa7 ... from toolbar
248824ec7f4fda13ca28358d7b50a810b2d247f9 ... 248824e ... sdsada
20103e2c1798cee2816eb78967cdb6443bd1f9bf ... 20103e2 ... mysql
e222f54962b9b12745b0c1904b70f1ee9c657d2e ... e222f54 ... ssss
fd8f3b34a86851f54cf2951cb4d3077e4ffa16ba ... fd8f3b3 ... ssss
c979f4cba91564333fa81e62dce328c23c38b739 ... c979f4c ... ccccccccccc
9a5a8e08c016a27b7d818c8e6828dd5dd578a00c ... 9a5a8e0 ... divny commit
61c8146060d1db337888d7bca83db1bacb441158 ... 61c8146 ... edwdewd
d495e292bb917fe730143af5b40c612a6937eaea ... d495e29 ... wqewqe
459d7938df6273bc4b8a4f3aa6a41e0d318a291d ... 459d793 ... wqwewqe
6f993b23ec79350c57f75375e3640d5079d8b873 ... 6f993b2 ... aaaaaaaa
7c9e43cda6ce44d4e614a42637b3334de4813059 ... 7c9e43c ... ddwedwe
ea419227ad22058625aadd08aa7e9227063568ee ... ea41922 ... edwd
2c08393f0696d443ab5ad8b75d74093d59caf76f ... 2c08393 ... mysql

$ git checkout e222f54 MySQL\ 5_5.txp


$ git rev-parse HEAD:MySQL\ 5_5.txp
ba5ee499030a097fbc20eeddde003820d58a5754

我希望有类似的东西:

$ git <some command> [options] MySQL\ 5_5.txp

返回e222f54或fulhash e222f54962b9b12745b0c1904b70f1ee9c657d2e

2 个答案:

答案 0 :(得分:1)

要在提交FILE中查看C的内容而不进行检查:

git show C:FILE

# you can redirect the output to a file on your disk :
git show C:FILE > /tmp/FILE

如果您想查看C的{​​{1}}和HEAD版本之间的差异:

FILE

答案 1 :(得分:1)

这个shell脚本应该可以工作,只需将文件名作为参数传递:

#!/bin/sh

blob=`git hash-object $1`

git log --format=format:%H --follow $1 |
while read commit; do
    if git ls-tree -r $commit | grep -q $blob; then
        echo $commit; break;
    fi
done
  1. git hash-object $1计算当前签出文件$1
  2. 的哈希值
  3. git log --format=format:%H --follow $1列出了对文件$1进行任何更改的所有提交的哈希
  4. git ls-tree -r $commit | grep -q $blob;查找步骤2中的哪个提交文件$1具有与步骤1中计算的相同的哈希