我想要的是什么 -
git checkout FHEAD~ path/filename
我目前所做的是通过 - 找到文件的先前版本
git log -1 --skip=1 path/filename
然后,
git checkout <previous-commit-hash> path/filename
答案 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"