【发布时间】:2015-02-17 05:10:57
【问题描述】:
是否可以在多个文件上使用 git checkout -- 以放弃更改?
如果是这样,我将如何指定多个文件?
【问题讨论】:
-
git checkout -- .
标签: git git-checkout
是否可以在多个文件上使用 git checkout -- 以放弃更改?
如果是这样,我将如何指定多个文件?
【问题讨论】:
标签: git git-checkout
多次运行命令
git checkout -- path/to/file/one
git checkout -- path/to/file/two
或者在同一行指定多个文件:
git checkout -- path/to/file/one path/to/file/two
您还可以指定将递归到它们下面的所有文件的整个文件夹。
git checkout -- path/to/folder
git checkout -- . # for the current path
【讨论】:
我在用户的 git repo 目录中运行 find,不小心修改了目录中的所有文件。
me@server:/home/me/gitrepo# git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .bashrc
modified: dir/ec2-user.pem
modified: dir/readme.txt
modified: dir/root.pem
modified: dir/ec2-user.pem
modified: dir/readme.txt
modified: dir/root.pem
modified: dir/ec2-user.pem
modified: dir/ec2-user.pem.pub
modified: dir/readme.txt
modified: dir/root.pem
为了纠正我的错误,我运行了类似这样的命令来查找所有修改过的文件并从 master 签出文件。
git status | grep modified | sed 's/^.*modified: //' | xargs git checkout
【讨论】:
可能的选择是:
git status --porcelain | cut -c4- | xargs git checkout
【讨论】:
使用以下命令
git checkout path/to/fileName path/to/fileName2 path/to/fileName3
这将允许您恢复或放弃对文件 fileName、fileName2 和 fileName3 所做的更改
注意:路径名中的空格会导致 git 出现问题。在这种情况下,使用单引号 '' 将路径名括起来。
【讨论】:
列出一个文件中的两个(或更多)文件。
在 Git 2.25(2020 年第一季度)中,更多命令学习了“--pathspec-from-file”命令行选项which I previously mentioned for git commit。
这意味着您可以将old confusing git checkout command 或new command (Git 2.23+) git restore 与文件列表 一起使用(用于签出/恢复),而不是多次重复在不同的文件上使用相同的命令。
参见commit a9aecc7、commit cfd9376、commit 8ea1189、commit 6fdc9ad、commit 1d022bb、commit bebb5d6、commit 21bb308(2019 年 12 月 3 日)Alexandr Miloslavskiy (SyntevoAlex)。
(合并Junio C Hamano -- gitster --commit 135365d,2019 年 12 月 25 日)
checkout, restore:支持--pathspec-from-file选项签字人:Alexandr Miloslavskiy
为简单起见做出的决定:
- 目前,
--pathspec-from-file被声明为与--patch不兼容,即使<file>不是stdin。这样的用例并不是真正预期的。- 不允许在 args 和 file 中传递 pathspec。
you must specify path(s) to restore块已下移,以便能够测试pathspec.nr,因为测试argc不再正确。
git switch不支持新选项,因为它不需要<pathspec>参数。
使用 Git 2.26(2020 年第一季度)增加了更多测试。
参见Alexandr Miloslavskiy (SyntevoAlex)commit f94f7bd(2019 年 12 月 30 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit 96aef8f,2020 年 1 月 30 日)
t:使用 --pathspec-from-file 添加错误条件测试建议人:Phillip Wood 签字人:Alexandr Miloslavskiy 签字人:Junio C Hamano
【讨论】:
除了已经回答的内容之外,我会为当前路径做这样的事情:
git checkout ./*
【讨论】: