我经常发现自己只想签出树中的某些文件但不能,因为我已经在本地修改了它们并且不想尝试找出合并的麻烦(我不想合并任何东西 - 我只想要某些文件的 git 版本) .
那么,如何强制签出这些文件分散在目录结构中的“db-backup *”?
例如
git-parent
- dir1
- db-backup1
- dir2
- db-backupA
谢谢,
河。
我经常发现自己只想签出树中的某些文件但不能,因为我已经在本地修改了它们并且不想尝试找出合并的麻烦(我不想合并任何东西 - 我只想要某些文件的 git 版本) .
那么,如何强制签出这些文件分散在目录结构中的“db-backup *”?
例如
git-parent
- dir1
- db-backup1
- dir2
- db-backupA
谢谢,
河。
有几种可能的解决方案,具体取决于您要做什么
如果要放弃更改,可以使用
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
选项git checkout-index
,尽管这可能被认为是骇客。
高温高压
git checkout <filename>
即使对文件进行了修改,对我来说也可以正常工作。你到底得到了什么错误,你想运行什么命令?这应该可以工作:
find . -name 'db-backup*' | xargs git checkout --
使用 Git 2.23+(2019 年 8 月),最佳实践是使用git restore
而不是令人困惑git checkout
的命令。
结合pathspec,将使用 HEAD 内容恢复工作树(即:unstage)
git restore -s@ :(glob)db-backup*