如何摆脱存储库所有文件中的所有更改?
假设我在一个分支中,我做了一些更改。 git status
在“未暂存以进行提交的更改”中返回一组文件,我注意到我想摆脱所有文件中的所有这些更改。如何使用单个命令执行此操作?
我知道我可以执行以下操作来仅签出一个文件:
git checkout -- <file>
我注意到仅 git checkout --
会返回所有未提交文件的列表。但是,我找不到一种方法来检查所有这些,例如 git checkout --all
。
我检查了 man git checkout
并找不到任何东西。我也看到了 Git: Checkout all files except one 并尝试了 git checkout .
,但也没有用。
我是否必须通过循环 git checkout --
输出以编程方式执行此操作?
如果您位于工作目录的根目录,则可以执行 git checkout -- .
以检出当前 HEAD 中的所有文件并替换您的本地文件。
您还可以执行 git reset --hard
来重置您的工作目录并替换所有更改(包括索引)。
我发现有用的其他方法是:
git checkout <wildcard>
例子:
git checkout *.html
更普遍:
git checkout <branch> <filename/wildcard>
git checkout \*
或 git checkout '*'
。
git checkout <branch> <filename/wildcard>
会将 head
移动到 branch
但将第二个参数中的文件放入本地文件状态而不是分支状态?
git checkout *.html
这不适用于大多数设置的子目录。
git checkout *
将递归检出,但对于运行 BASH 的 linux 机器则不能这样说。
当然你可以使用硬重置:
git reset --hard
此外,我正在使用允许指定模式的简单方法:
git checkout `git ls-files -m | grep "some pattern"`
所以这里的“一些模式”可能是文件夹或文件名或文件扩展名。
如果您想在“任何地方”签出所有文件
git checkout -- $(git rev-parse --show-toplevel)
如果您位于跟踪文件的基本目录位置,则 git checkout 。将起作用,否则将不起作用
不定期副业成功案例分享
git checkout -- .
只会重置对索引状态的更改。因此,如果您已经将文件添加到索引中,它将重置为。另一方面,git reset --hard
也会丢弃索引,例如,如果您将未跟踪的文件添加到索引中(开始跟踪它们),它们也会被删除。git checkout
还允许您通过传递一个非常有用的更具体的路径来仅部分恢复工作目录。git checkout --force
、git reset --hard