2010-09-24 58 views
2

我经常发现自己希望仅检出某棵树中的某些文件,但由于我在本地修改了它们而不想尝试弄清合并的麻烦(我不想合并任何东西 - 我只想要某些文件的git版本)。git签出某些文件尽管存在冲突

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

e.g

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

感谢,

回答

8

有几个可能的解决方案,这取决于你想要做

  • 如果你想放弃更改什么,你可以使用

    git checkout -f <paths>... 
    
  • 如果您想保存更改以备后用,但暂时不担心它们,您可以存储您的更改ES然后做一个结账:

    git stash 
    git checkout <paths>... 
    

    恢复所做的更改,使用git stash pop(或git stash apply)。

  • 如果要将文件的根本视图的Git版本(也许它保存在临时文件中,或者在其他的名字),你可以使用git show为:

    git show <file> 
    
  • 如果您要结账一些目录或文件的子集在其他一些地方,您可以使用git archive在“示例”混帐档案主页的部分描述:

    git archive --format=tar --prefix=subdir/ HEAD:subdir | 
        (cd /var/tmp/ && tar xf -) 
    

    请注意,它会使用来自HEAD(上次提交)的版本,而不是来自索引,尽管通常不会有任何区别。

    另一种实现方法是使用--temp选项git checkout-index,虽然这可以被认为是hackery。

HTH

0

git checkout <filename>即使对文件进行了修改,也能正常工作。你究竟发生了什么错误,你试图运行什么命令?这或许应该工作:

find . -name 'db-backup*' | xargs git checkout --