进一步理解git的‘工作区’,暂存区‘和’版本库‘ 关系

误解一:暂存区,知识临时存储文件?


暂存区中不是没有该文件,应该说成没有该文件的修改! 其实如果暂存区中没有该文件的修改,则意味着暂存区中的该文件对应的版本是和master中的版本一致,“继续向上找”这种说法有待讨论,暂存区中就是最新的版本。 很多人理解暂存区只是暂存一些内容,其实commit操作只是让暂存区和分支(master)版本保持一致,是同步操作,而不是移动操作。


2.撤销工作区的修改符合就近原则:

工作区 < - 缓冲区 <- 版本库

  • 撤销工作区修改,如果缓冲区有该文件,则checkout -- file 会将缓冲区的内容覆盖到工作区,此时工作区和缓冲区文件内容相同,因此工作区是干净的,并没有未add的文件。

  • 撤销工作区修改,如果缓冲区没有该文件,则checkout -- file命令会继续向上找,找到版本库中的该文件,此时使用版本库中的文件覆盖工作区,工作区不干净,因为有未提交的文件(从版本库中覆盖修改的文件)。

2.1.撤销缓冲区

  • 撤销缓冲区,使用git rest HEAD -- file ,则会将缓冲区的内容回退到工作区,此时缓冲区被该文件被移除,工作区不干净,有未add的文件(从缓冲区移除了,状态就变成了未add)
  • 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^ (版本回退)**

  • 发表于 2016-06-19 00:34
  • 阅读 ( 477 )

0 条评论

请先 登录 后评论
石天
石天

437 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章