Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 签出已在工作树中移动的多个文件_Git - Fatal编程技术网

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

Git 签出已在工作树中移动的多个文件,git,Git,我已将文件从Project移动到Project/src。Git的印象是我已经从Project中删除了文件,并在Project/src中创建了新文件 此外,我还希望提交工作树中的多个其他更改。我的git状态: $ git status # On branch feature/cmake # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # new file: .gitignore # ne

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

此外,我还希望提交工作树中的多个其他更改。我的
git状态


 $ 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

我不想签出
HEAD
,因为我想保留工作树中的一些更改。我尝试过执行
git checkout*{cpp,h}
,它给出了以下内容:


$ git checkout *.{cpp,h}
zsh: no matches found: *.cpp
因为这些文件当前不存在于工作树中,所以我无法签出它们,因为
*。{cpp,h}
与任何文件都不匹配


这些文件都在
项目/src
中;可能有一个regex或者我可以运行的东西,
ls src
的输出通过管道传输到
git checkout
命令中,但是我想知道git是否可以自己完成这项工作。在git中有什么方法可以做到这一点吗

退出
*

$ git checkout \*.{cpp,h}

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

我用过:

git签出--*.

在我的Git Bash中。我工作区中所有修改过的文件都替换为repo中的文件


我希望有帮助,谢谢

如果文件存在于目录中,git(或者shell,我不确定是哪个)接受
*。{cpp,h}
并将其扩展到所有匹配的文件。我的问题是我没有匹配的文件;他们已经转移到
src/*.{cpp,h}
了,我正试图找到一种懒散的方法来签出文件,而不必键入
git checkout
git checkout
等等。如果你逃出了星星,它在shell中就不会匹配。试试看:-)嘿。我的错;完全看错了你写的东西。这很有效-非常感谢。很抱歉成为一个noob,但是完整的命令会有所帮助。感谢
$git checkout\*.{cpp,h}
将在存储库中检出与shell glob模式
*.{cpp,h}
匹配的所有文件。如果没有反斜杠,它将匹配(并扩展到)当前目录中的文件。问题正是在接受的答案中指出的,
*
由shell(bash,zsh…)扩展到所有匹配的文件,如果您移动/删除了这些文件,这些文件可能没有。而在此上下文中,
\*
通过
git
扩展到git跟踪的文件,即,
git add
已应用于这些文件。即使文件被移动/删除
git checkout\*
也会扩展到这些文件名,直到您提交移动/删除它们。事实上,要提交对
file.end
的删除,您必须执行
git commit file.end
,但该文件甚至不在那里(但对git来说是这样)。这是非常正确的。谢谢你,乔纳坦。对不起,没有人