git checkout -- filename的作用是把filename文件在工作区的修改撤销到最近一次git add 或 git commit时的内容
例如,工作区的check.txt文件,初始时里面放一行内容“one”,然后进行git add,随后git commit
此时,编辑check.txt再加入一行内容"two",此时check.txt尚未被add也未被commit
调用cat check.txt会看见,check.txt的文件内容确实已被更改
此时调用git checkout -- check.txt
调用结束后,check.txt内容重新回到只有一行内容的时候,因为最近一次关于check.txt的操作是commit操作!所以工作区的check.txt内容被撤销到了最近一次commit操作时check.txt的内容。
现在继续测试
重新编辑check.txt文件,再次加入一行“two”,然后执行git add check.txt命令
然后再次编辑check.txt文件,再加入一行"three"
此时调用cat check.txt会看见工作区的check.txt文件中共有3行内容
调用git checkout -- check.txt命令
调用结束后,cat check.txt会发现内容为两行。因为最近一次关于check.txt的操作是add操作,执行add操作时的check.txt文件为两行内容,所以工作区的check.txt内容被撤销到了最近一次add操作时check.txt的内容。