误解一:暂存区,知识临时存储文件?
暂存区中不是没有该文件,应该说成没有该文件的修改! 其实如果暂存区中没有该文件的修改,则意味着暂存区中的该文件对应的版本是和master中的版本一致,“继续向上找”这种说法有待讨论,暂存区中就是最新的版本。 很多人理解暂存区只是暂存一些内容,其实commit操作只是让暂存区和分支(master)版本保持一致,是同步操作,而不是移动操作。
2.撤销工作区的修改符合就近原则:
工作区 < - 缓冲区 <- 版本库
撤销工作区修改,如果缓冲区有该文件,则checkout -- file 会将缓冲区的内容覆盖到工作区,此时工作区和缓冲区文件内容相同,因此工作区是干净的,并没有未add的文件。
撤销工作区修改,如果缓冲区没有该文件,则checkout -- file命令会继续向上找,找到版本库中的该文件,此时使用版本库中的文件覆盖工作区,工作区不干净,因为有未提交的文件(从版本库中覆盖修改的文件)。
2.1.撤销缓冲区
2.2,撤销缓冲区,直接丢弃缓冲区中的相应内容,只剩下工作区的版本。缓冲区中内容并没有覆盖到工作区,而是直接清除。
3
对于文件 myfile.txt
① 修改后 未add(添加到暂存区) 需要撤销修改时:
git checkout -- myfile.txt 或 手动删除工作区修改
工作区 : clean 暂存区: clean
② 修改后 add了(未commit) 再次修改文件 要撤销第二次修改时:
git checkout -- myfile.txt (将暂存区恢复到工作区)
暂存区有第一次的修改需要commit
③ 修改后 add了(未commit),需要撤销修改时:
git reset HEAD myfile.txt (将暂存区修改删除)
此时工作区的修改还未撤销
git checkout -- myfile.txt (撤销工作区修改)
④ 修改后 add并commit了,需要撤销修改时:
git reset --hard HEAD^ (版本回退)**
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!