如果我提交然后对文件foo
进行更改,我可以git checkout foo
撤消这些更改。如果我对foo
进行了更改并将其添加到git add foo
,那么git checkout foo
不做任何事情(并且没有说什么)
这背后的原因是什么?
答案 0 :(得分:3)
当你说
时git checkout foo
没有其他参数,您告诉git将您工作树中的foo
替换为索引中的foo
。因此,如果你add
编辑(即,使用 更新索引)所有对foo
的更改,那么当然没有任何内容可用于此checkout
命令。
退出更改的正常过程是首先reset
(从HEAD
提交更新索引)和然后使用checkout
进行更新工作版本。
然后,您可以使用checkout
从先前的提交中获取foo
的版本
git checkout HEAD foo
这也很有效;由于它使用git status
建议的命令进行非暂存和取消更改,因此两步法可能只是更广为人知。
答案 1 :(得分:0)
因为你可以取消它,然后检查出来:)
git reset <file>
git checkout <file>
不检查它们的原因是因为如果您在本地更改文件,然后想要更新到主分支,请覆盖您的工作和暂存文件。
答案 2 :(得分:0)
使用Git 2.23(2019年8月),您现在可以避免使用confusing git checkout
command(处理文件或分支)和新的(仍在试验中的)git restore
command。
您可以同时还原索引和工作树(与使用
return view('page.pages', compact('A2'));
相同)
git-checkout
或更实用但更不易读的缩写形式:
git restore --source=HEAD --staged --worktree hello.c
这将同时恢复工作树和临时区域(缓存)。