Git入门(二)

工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

  • 工作区 :就是.git文件所在的目录,我们一般把文件存放的目录。
  • 版本库 :工作区有一个隐藏的目录.git文件夹,这个就是Git的版本库。

Git 的版本库中存了很多东西,其中最重要的就是成为stage的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD.

Git入门(二)_第1张图片
image.png

前边说过,我们把文件往Git版本库里添加的时候,是分两步执行的:

  1. git add 文件名 把文件添加进去,实际上就是把文件修改添加到暂存区。
  2. git commit提交更改,实际上是把暂存区的所有内容提交到当前分支。
    因为我们创建Git版本库时,Git自动为我们创建一个唯一一个master分支,现在,git commit 就是往master分支提交更改。

需要提交的文件修改通通放到暂存区,然后一次性提交暂存区所有的修改。

例:先对readme.txt做个修改,比如加上一行内容,再新建一个文件LICENSE.
然后git status看一下状态:

Git入门(二)_第2张图片
image.png

Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。

现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下:

Git入门(二)_第3张图片
image.png

此时 暂存区状态就变成这样了,如图:


Git入门(二)_第4张图片
image.png

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
git commit -m "更改文件并添加了新文件"
一旦git commit 完后,工作区就是"干净的".

Git入门(二)_第5张图片
image.png

管理修改

为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
执行这个操作:

执行这个操作:

第一次修改 -> git add -> 第二次修改 -> git commit

这样执行后,可以发现第二次的修改其实并没有生效,原因就是Git只对在暂存区的修改执行commit,而第二次修改后未执行git add 命令,也就是说未提交到暂存区,所以,尽管git commit后,第二次修改依旧不生效。

正确的做法
第一次修改 -> git add -> 第二次修改 ->git add  -> git commit

撤销修改

  • .git checkout --文件名:在工作区中修改完文件,想要撤销,(此时还没有放到暂存区,也就是还未执行git add),
  • git reset HEAD filegit checkout --文件名:已经更改并提交到暂存区后想要撤销修改。

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。

删除文件

rm -rf file
执行完删除命令后,git status看终端显示:

Git入门(二)_第6张图片
image.png

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:git checkout -- file1.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

本文是学习廖雪峰老师写的Git的笔记整理便于自己复习,原文地址https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

你可能感兴趣的:(Git入门(二))