一.修改文件
git管理的并不是文件而是修改,objects里的对象存储的其实是修改的内容。
接下来对ReadMe文件进行修改
1.git status查看状态
该命令用来查看从上次提交后到现在是否有对内容进行修改。它告诉我们暂存区里没有要提交的内容,修改的文件处于工作区,修改的文件是ReadMe。
2.git diff+文件名
git status只能知道是否修改但不能知道修改了哪些内容,而gitdiff可以。
它打印出来的内容是unix通用的diff格式。简单说一下,a和—代表改动前,b和+++代表改动后;-1代表改动前的第一行内容,+1代表改动后的第一行内容(如果后面跟数字代表连续几行)。接下来对文件进行提交,可以自己再使用该命令查看是否有变化。
二.版本回退
之前我们也提到过,Git能够管理⽂件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现之前前的⼯作做的出现了很⼤的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能了。
执⾏ git reset 命令⽤于回退版本,可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定。
git reset 命令语法格式为: git reset [–soft | --mixed | --hard] [HEAD]
1.soft:只回退版本库中的内容。
2.mixed:除了版本库,暂存区的内容也会回退。(默认选项)
3.hard:回退所有区内容。(慎用)
4.HEAD:表示回退到当前版本(加^回退到上一版本,加^^回退到上两个版本)
演示:回退到哪个版本就输入哪个版本的commit ID
可以看到当前目录里只剩下了ReadMe,其它几个文件都不见了。这是因为我们使用了hard,退回到了第一个版本,将我们的工作区也回退了,所以hard选项要慎用。(那么我们能否回到回退之前的版本呢,答案是可以的)。
这是因为之前使用git --log时,把两个版本的commit ID都打印了出来(当前终端并未把之前的commit ID清除掉),所以我们可以通过这个ID再次回退。
为什么版本回退很快
因为它只需要通过commit ID修改Master所指向的版本对象即可。
三.撤销修改
如果我们在我们的⼯作区写了很⻓时间代码,越写越写不下去,觉得⾃⼰写的实在是垃圾,想恢复到上⼀个版本.
1.情况一:没有add
此时可以用上面的办法进行版本回退,当然这有一个更简单的方法——git checkout – [filename],它会自动回退到上一次提交。
2.情况二:add了但没commit
此时可以使用上文的HEAD参数再加mixed参数回退暂存区,接着就是情况一了。
3.情况三:commit后
前提:此时代码没有push到远程仓库,本次撤销才算有效。因为在企业里运行的代码都是在远程仓库里,而撤销的目的就是为了防止错误的代码被提交到远程仓库,在这个前提下回退很简单,使用hard选项即可。
四.删除文件
1.方法一
例子:如果你已经把file3提交了,但在工作区删除了file3,此时只是工作区里的file3没有了,但暂存区里还有。
此时需要继续提交,当git发现提交的file3在工作区已经没有后,会自动把暂存区里的删除
2.方法二
使用git提供的git rm指令,可以同时删除工作区和暂存区代码。