在Git中是否有以前版本的文件的简写?

时间:2014-10-16 12:28:08

标签: git

我想要的是什么 -
    git checkout FHEAD~ path/filename

我目前所做的是通过 - 找到文件的先前版本     git log -1 --skip=1 path/filename

然后,
    git checkout <previous-commit-hash> path/filename

1 个答案:

答案 0 :(得分:0)

检索文件先前版本的别名的简单示例。

这里的技巧是使用--format格式化日志输出以仅返回提交哈希

[alias]
    prev    = "!f(){ git checkout $(git log -1 --format="%H" --skip=1 -- ${GIT_PREFIX:-.}/$1) -- ${GIT_PREFIX:-.}/$1; git reset ${GIT_PREFIX:-}/$1; }; f"

使用git log -1可确保git prev始终返回直接父文件。选择下一个父母可能会更复杂。

另请注意,文件一旦签出,就会立即添加到索引中。它未合并到您的现有副本中,并且不会警告覆盖本地更改。我已经包含了对git-reset的调用,以确保checkout out文件仅在工作目录中,而不在索引中。

GIT_PREFIX的使用允许您输入相对路径,但只有相对较新版本的git支持GIT_PREFIX。

编辑..

使用git rev-list一样的东西..一个非常强大的git命令,用于在脚本编写和自动化时遍历git祖先图...

[alias]
    prev    = "!f(){ git checkout $(git rev-list --max-count=1 --skip=1 HEAD --  ${GIT_PREFIX:-.}/$1) -- ${GIT_PREFIX:-.}/$1; git reset ${GIT_PREFIX:-}/$1; }; f"