本文介绍一些开发时,常用的在工作区和本地库之间的操作命令
一、提交修改内容到 本地库
工作树的修改内容要提交到本地库,首先需要先添加到缓存区stage,在commit到本地库。
# filename就是你修改后需要提交的文件
git add <filename>
# git commit将缓存区的文件一次性提交到本地库
git commit -m '备注'
二、开发了一段时间,想看看修改了那些文件 以及 和本地库的差异(即修改的内容)
你开发了一段时间,可能已经忘记了修改过那几个文件
可以使用 git status 查看工作区和缓存区的内容,即修改过的文件和新增的文件,
也可以使用 git diff 查看工作区和本地库的版本差异(即内容差异,包括修改和新增,删除)
# 查看工作区和缓存区的状态
git status
# 查看指定文件 在工作区和本地库的差异
git diff <filename>
三、 修改回滚
git是版本控制系统,那么是支持使用指定版本的文件。
场景1: 修改已经提交到了本地库
step1: git log,查看提交历史,版本的历史 或者 git reflog,查看命令历史,有带每个操作命令在哪个版本上(通常用于回滚之后的版本,即你回滚到从前版本后,想要放弃,回到当前版本之后的版本)
git log
想要精简点的提交历史: 加上 参数 --pretty=oneline
git reflog
step2: 回滚版本
这里分为两种情况
第一种是修改内容已经提交到了本地库。 需要从本地库回滚版本。
第二种是修改内容还未提交到本地库,则需要撤销缓存区和工作区的修改内容
想要回滚大版本
他有三种模式 --soft --mixed(默认的模式) 和 --hard。 改变的内容由少到多
--soft模式:
仅仅改变当前HEAD 指针(当前的版本号),工作区和缓存区修改的内容全部保留(即当前修改的内容也全部还在)。
--mixed模式:
默认的参数, 改变当前的HEAD指针,也改变缓存区的修改内容。但是保留了工作区的内容
--hard模式:
HEAD指针,缓存区和工作区全部改变
--soft的效果演示
--mixed效果演示: (放弃缓存区修改内容,保留工作区的修改内容)
--hard: 效果演示
场景2: 修改未提交到本地库。
则需要回滚两个地方的,一个是缓存区,一个是工作区
1. 放弃缓存区的修改内容:
git reset HEAD <file>
自己的理解,HEAD代表是最新的版本号, reset就是之前演示的, 默认是--mixed,即更改HEAD值和缓存区内容,保留工作区内容。 (但是--soft和--hard 是没办法和文件搭配使用,只能)
演示:
2. 放弃工作区的修改内容
git checkout -- <file> : 丢弃工作区的修改内容,回到本地库或者缓存区的状态。
缓存区有修改优先回滚到缓存区状态,缓存区没有,回滚则回到本地库状态。
所以前提是这个文件本地库或缓存区必须有,如果没有,则无法生效。
示例: 在本地库或者缓存区没有的情况下, git checkout -- file 撤销工作区的修改效果
验证场景2.1: 本地库没有,缓存区也没有的情况
演示结果: 撤销失败
验证场景2.2: 本地库没有,缓存区有的情况
演示结果: 撤销成功, 回到缓存区的状态
验证场景2.3: 本地库有,缓存区没有的情况
演示结果:撤销成功,撤销后状态和本地库的状态一致
验证场景2.4: 本地库有文件,缓存区也有该文件。工作区修改后,再撤销
演示结果:撤销成功。撤销后的状态和缓存区一致
总结4个场景结论:
git checkout -- file,是优先对比工作区和缓存区的, 如果缓存区没有内容,则对比工作区和本地库的。
所以修改未提交到本地库的回滚,需要两步
四、 删除本地库文件
方法1: 当成正常的开发
# step1: 在工作树上删除
rm -f <file>
# step2: 添加缓存区
git add <file>
# step3: 提交到本地库
git commit -m
方法2: 直接删除本地库中的文件
git rm <file>
git commit -m '<content>'