我将文件从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}
。我知道如何取消暂存(例如,这里的链接)很有帮助。我想要避免的是输入大量的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中有什么方法可以做到这一点吗?
*.{cpp,h}
并将其扩展为所有匹配的文件。我的问题是我没有匹配的文件;它们已经移动到了src/*.{cpp,h}
,我正在尝试找到一种懒惰的方法来检出这些文件,而不必键入git checkout <filename1>
,git checkout <filename2>
等等。 - simont$ git checkout \*.{cpp,h}
将检出与 shell glob 模式*.{cpp,h}
匹配的任何文件 在代码库中。如果没有反斜杠,它将匹配(并展开为)当前目录中的文件。 - Irfy