git Restore --staged some-file 和 git checkout --some-file 之间有什么区别?

djv*_*oli 3 git

我正在探索可能的选项来撤消使用 git 完成的操作。我看到这篇文章,发现有 3 个选项git resetgit checkout并且git restore

我想我有点理解 git reset 的作用(不完全理解,但我认为这是一个单独的问题),但是我不明白运行git checkout -- some_filegit restore --staged some_file

这两个命令更改工作目录中的文件的方式有区别吗?

Von*_*onC 5

总结托雷克的回答:

Torek 坚持认为这个事实git restore --source <aCommit> --worktree -- somefile是新的(无法通过签出完成):能够在不触及索引的情况下恢复工作树中的文件。


Darren Ng在评论中补充道:

现在我可以使用single git restore --staged --worktree -- FILE, 而不是 2-step git restore --staged FILE+放弃分阶段更改git checkout FILE

确实如此,但 Git 2.41(2023 年第 2 季度)明确表示,在同时使用--staged --worktree.

虽然“ git restoreman支持这样的选项--ours仅在冲突合并期间才有意义,但这些选项仅在更新工作树文件时才有意义。当“ ”和“ ”同时生效
时,这些选项被标记为不兼容。--staged--worktree

请参阅Andy Koppe ( )提交的 ee8a888(2023 年 2 月 26 日)。(由Junio C Hamano 合并 -- --提交67076b8,2023年 3 月 19 日)akoppe
gitster

restore--staged --worktree合并选项错误

签署人:Andy Koppe

当与 组合时,“restore”命令已经拒绝--merge--conflict和选项,但在添加时也接受--ours它们。--theirs--staged--worktree

不幸的是,这似乎没有做任何有用的事情。当同时给出and时, and
选项似乎会被忽略,而对于or ,该命令具有与不存在该选项相同的效果。--ours--theirs--staged--worktree--merge--conflict--staged

--staged --worktree因此,也用“”拒绝这些选项,用于opts->accept_ref区分恢复和结帐。

--staged添加“ ”和“ ”的测试--staged --worktree

  • @DarrenNg 没错。应该不再需要“git checkout”命令了。简短版本:`git Restore -SW -- aFile` (2认同)