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

wor*_*bin 6 git

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

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

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

Dav*_*ave 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"
Run Code Online (Sandbox Code Playgroud)

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

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

使用 允许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"
Run Code Online (Sandbox Code Playgroud)