我经常发现自己想要只检查树中的某些文件,但因为我在本地修改了它们并且不想尝试找出合并的麻烦(我不想合并任何东西 - 我只想要git版本的某些文件)。
那么如何强制结帐,例如“db-backup *”,这些文件分散在目录结构中?
e.g
git-parent
- dir1
- db-backup1
- dir2
- db-backupA
感谢,
河
答案 0 :(得分:8)
根据您的目的,有几种可能的解决方案
如果您想放弃更改,可以使用
git checkout -f <paths>...
如果您想稍后保存更改,但暂时不用担心,可以隐藏更改,然后执行结帐:
git stash
git checkout <paths>...
要恢复更改,请使用git stash pop
(或git stash apply
)。
如果您只想查看文件的Git版本(可能将其保存在临时文件中或其他名称下),您可以使用git show
:
git show <file>
如果您想结帐某些目录或其他地方的文件子集,您可以按照“示例”中的说明使用git archive
“git-archive主页的部分:
git archive --format=tar --prefix=subdir/ HEAD:subdir |
(cd /var/tmp/ && tar xf -)
请注意,它将使用HEAD(最后一次提交)中的版本,而不是来自索引,但通常没有区别。
实现这一目标的另一种方法是使用--temp
的{{1}}选项,但这可以被视为hackery。
HTH
答案 1 :(得分:0)
git checkout <filename>
即使对文件进行了修改也能正常工作。你究竟得到了什么错误,以及你想要运行什么命令?这应该可行:
find . -name 'db-backup*' | xargs git checkout --
答案 2 :(得分:0)
在Git 2.23+(2019年8月)中,最佳实践是使用git restore
而不是confusing git checkout
命令。
与pathspec结合使用,可以恢复带有HEAD内容的工作树(即:unstage)
git restore -s@ :(glob)db-backup*