Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得Git中文件的修订版本_Git_Version Control - Fatal编程技术网

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

如何获得Git中文件的修订版本,git,version-control,Git,Version Control,是否有任何方法可以在Git中获取文件的修订版(即提交哈希) 我知道git log--),但这会给我所有的提交(如果我执行git log-1--,则是最后一次提交),但这不是我想要的。让我们用提交A,B,C,D,E的文件,其中E是头,现在我将这样做 git checkout C -- FILE 现在,如果我执行了git status,它会显示文件已被修改,需要提交—这是我不想做的。(我的应用程序中有简单的历史查看器,需要在签出后标记文件的修订版) 有没有办法让Git显示当前版本(在本例中是com

是否有任何方法可以在Git中获取文件的修订版(即提交哈希)

我知道
git log--
),但这会给我所有的提交(如果我执行
git log-1--
,则是最后一次提交),但这不是我想要的。让我们用提交A,B,C,D,E的文件,其中E是头,现在我将这样做

git checkout C -- FILE
现在,如果我执行了git status,它会显示文件已被修改,需要提交—这是我不想做的。(我的应用程序中有简单的历史查看器,需要在签出后标记文件的修订版)

有没有办法让Git显示当前版本(在本例中是commit C)

SVN可以通过
SVN info
实现这一点,但SVN不是Git,工作方式不同

编辑:

在SVN中:

svn info FILE // gives me revision E
svn update -r C
svn info File // gives me revision C
编辑2:真实世界示例:

$ 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
$git[options]MySQL\5_5.txp

要返回
e222f54
或fulhash
e222f54962b9b12745b0c1904b70f1ee9c657d2e
在提交
C
中查看
文件的内容而不签出它,请执行以下操作:

git show C:FILE

# you can redirect the output to a file on your disk :
git show C:FILE > /tmp/FILE
如果要查看
C
HEAD
版本的
文件
之间的差异:

git diff C -- FILE

# you can ask git to open a graphical diff viewer :
git difftool C -- FILE

要在提交
C
中查看
文件
的内容而不将其签出,请执行以下操作:

git show C:FILE

# you can redirect the output to a file on your disk :
git show C:FILE > /tmp/FILE
如果要查看
C
HEAD
版本的
文件
之间的差异:

git diff C -- FILE

# you can ask git to open a graphical diff viewer :
git difftool C -- FILE

此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
  • git hash object$1
    计算当前签出文件的哈希值
    $1
  • git log--format=format:%H--follow$1
    列出所有提交的哈希值,这些提交对文件
    $1
  • gitls-tree-r$commit | grep-q$blob查找步骤2中哪个提交文件的哈希值与步骤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
    
  • git hash object$1
    计算当前签出文件的哈希值
    $1
  • git log--format=format:%H--follow$1
    列出所有提交的哈希值,这些提交对文件
    $1
  • gitls-tree-r$commit | grep-q$blob查找步骤2中哪个提交文件的哈希值与步骤1中计算的哈希值相同

  • git show C:
    。我想知道
    git rev parse HEAD:file
    是否足够。它会在head中显示给定文件的sha1。
    svn info
    提供了比一个版本更多的信息-您想查找哪个版本?最有可能是“修订版”或“上次修订版”?你到底想要实现什么?您的签出只会获取C版中文件的内容,而不会更改存储库的状态(正如
    svn update-rc
    所做的那样)。是否要查找更改文件的最后一次提交?Konrad“Zergis”:这不起作用。添加了有问题的真实示例。当前提交是
    ,而
    git rev parse HEAD
    为您提供其ID。工作树和索引中的文件没有提交ID(只有提交ID),但可以匹配一些现有的提交;根据您接受的答案,这似乎就是您想要的:提交的ID,其中包含任何文件,其内容与给定文件(路径)名称的工作树中的内容匹配。当然,如果您通过运行
    git checkout--
    获得这些内容,您可以记住这一点,然后运行
    git rev parse
    以获得原始提交哈希,这会更快。
    git show C:
    。我想知道
    git rev parse HEAD:file
    是否不够。它会在head中显示给定文件的sha1。
    svn info
    提供了比一个版本更多的信息-您想查找哪个版本?最有可能是“修订版”或“上次修订版”?你到底想要实现什么?您的签出只会获取C版中文件的内容,而不会更改存储库的状态(正如
    svn update-rc
    所做的那样)。是否要查找更改文件的最后一次提交?Konrad“Zergis”:这不起作用。添加了有问题的真实示例。当前提交是
    ,而
    git rev parse HEAD
    为您提供其ID。工作树和索引中的文件没有提交ID(只有提交ID),但可以匹配一些现有的提交;根据您接受的答案,这似乎就是您想要的:提交的ID,其中包含任何文件,其内容与给定文件(路径)名称的工作树中的内容匹配。当然,如果您通过运行
    git checkout--
    获得这些内容,您可以记住这一点,然后运行
    git rev parse
    以获得原始提交哈希,这将更快。我不需要文件的差异或内容,但需要文件的提交方式(在本例中为C)。更新了问题。我不需要文件的差异或内容,但需要提交文件的内容(在本例中为C)。更新了问题。就这样!!!谢谢!接受和+1。现在只将它添加到我的应用程序中。就这样!!!谢谢!接受和+1。现在只将其添加到我的应用程序中。