背景
今天在.gitignore忽略跟踪文件的时候,发现更改.gitignore的内容,再git status还是能看到希望被忽略的文件。这是因为在staged区,这个文件已经被tracked了,所以要将此文件取消tracked,就应该使用这样的命令:
git rm --cached <filename> gid add .
git rm --cached是将该文件从暂存区里移除,然后git add .尝试跟踪所有文件时,会因为gitignore里记录了该文件而不跟踪这个文件。
官方文档
官方的文档里,第一句话就说得很清楚:
A gitignore file specifies intentionally untracked files that Git should ignore. Files already tracked by Git are not affected; see the NOTES below for details.
有关gitignore的在官方地址是这个。
快速了解git管理的三个区域可以看这个地址,看完这篇文章后,你会知道下面这些指令的区别:
git diff --cached,git diff,git diff HEAD,git diff -staged, working tree/index(staged)/repository(HEAD,commit) git diff : index and commit git diff HEAD : working tree and HEAD git diff --cached(--staged) : working tree and index
当你想知道跟踪了哪些文件时,可以用这个指令:
git ls-files
其实没有必要去记这些指令,当你想要用git做什么事的时候再去查文档就可以了,用几次就会了。一般来说我们日常只用git clone / git push /git add . / git commit/git pull这几个指令就够了。
总结
不过呢我也是发现,使用VS的友好界面会让人远离本质,比如说VS里有这样的功能:
你点击之后就会储存这些更改,后续你pull还是push都和这个无关了。当你弹出的时候,又可以将这些更改和更新后的仓库merge一下。这里的Apply就是应用,Pop就是弹出;其实执行的命令就是git stash apply,git stash pop。
最好还是用命令行,这样更接近本质,而且也不至于换一个IDE就不会用了。IDE为我们做的事情太多,比如说VS在运行的时候有一个启动按钮,点击就build and run了。这里拿dotnet程序举例哈,实际上是运行了dotnet run指令。生成按钮就是dotnet build。新建解决方案就是dotnet new sln,新建项目就是dotnet create new console,将项目引入进解决方案就是 dotnet sln add <ProjectName>.csproj。所以为了弄清本质最好还是使用命令行吧,当然了,调试这种事还是IDE更方便点。