签出已在工作树中移动的多个文件

时间:2012-02-19 01:36:34

标签: git

我已将文件从Project移至Project/src。 Git的印象是我从Project删除了文件,并在Project/src中创建了新文件。

此外,我在工作树中有多个其他更改,我希望提交。我的git status


 $ git  status
# On branch feature/cmake
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#   new file:   .gitignore
#   new file:   CMakeLists.txt
#   deleted:    Wasa.xcodeproj/project.pbxproj
#   deleted:    Wasa/Wasa.1
#   renamed:    Wasa/main.cpp -> main.cpp
#   new file:   src/CMakeLists.txt  
#  Lots of new files listed here
#
# Changes not staged for commit:
#   (use "git add/rm ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#   modified:   CMakeLists.txt
#   deleted:    IODevice.h
#  Lots of deleted files listed here.

我想取消暂存源文件 - *.{cpp,h}。我知道如何取消暂停(例如,链接here是有帮助的)。我希望避免做的是输入大量git checkout <filename>

我不想结帐HEAD,因为工作树中的一些更改我想保留。我尝试过git checkout *.{cpp,h},它提供了以下内容:


$ git checkout *.{cpp,h}
zsh: no matches found: *.cpp

因为工作树中当前不存在文件,所以我无法检查它们,因为*.{cpp,h}与任何文件都不匹配。

这些文件都在Project/src;可能有一个正则表达式或者我可以用ls src输出git checkout命令运行的东西,但是我想知道git是否可以自己为我做这个。有没有办法可以用git做到这一点?

2 个答案:

答案 0 :(得分:28)

逃离*

$ git checkout \*.{cpp,h}

答案 1 :(得分:2)

用于签出多个文件。我刚刚实现了通配符,它​​对我来说效果很好。 对于特定文件,我们可能需要不同的技巧。

我用过:

git checkout -- *.*

在我的Git Bash中。并且我工作区中的所有修改过的文件都被回购中的文件替换。

我希望它有所帮助,谢谢。

相关问题