3

我经常发现自己只想签出树中的某些文件但不能,因为我已经在本地修改了它们并且不想尝试找出合并的麻烦(我不想合并任何东西 - 我只想要某些文件的 git 版本) .

那么,如何强制签出这些文件分散在目录结构中的“db-backup *”?

例如

git-parent
  - dir1
    - db-backup1
  - dir2
    - db-backupA

谢谢,

河。

4

3 回答 3

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选项git checkout-index,尽管这可能被认为是骇客。

高温高压

于 2010-09-25T08:59:53.680 回答
0

git checkout <filename>即使对文件进行了修改,对我来说也可以正常工作。你到底得到了什么错误,你想运行什么命令?这应该可以工作:

find . -name 'db-backup*' | xargs git checkout --
于 2010-09-25T00:10:03.603 回答
0

使用 Git 2.23+(2019 年 8 月),最佳实践是使用git restore而不是令人困惑git checkout的命令。

结合pathspec,将使用 HEAD 内容恢复工作树(即:unstage)

git restore -s@ :(glob)db-backup*
于 2020-01-11T23:02:17.057 回答