尽管发生冲突,git checkout某些文件

时间:2010-09-24 23:47:54

标签: git merge git-checkout

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

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

e.g

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

感谢,

3 个答案:

答案 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*