Git的基本使用(下)

简介: Git的基本使用

4.2 工作区和暂存区


4.2.1 工作区(Working Directory)


电脑中的目录,比如我们的git_test,就是一个工作区。


4.2.2 版本库(Repository)


工作区有一个隐藏目录.git,这个不是工作区,而是git的版本库。


git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区 ,还有git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

因为我们创建git版本库时,git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。


8fa1e4fe22af0aa4823c5888232a40b5.png


前面讲了我们把文件往git版本库里添加的时候,是分两步执行的:


第一步,是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;


第二步,是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。


4.2.3 案例(在工作区)


(1) 下面在git_test目录下再创建一个文件code2.txt,然后编辑内容如下:


python@ubuntu:~/git_test$ touch code2.txt
python@ubuntu:~/git_test$ vi code2.txt 
python@ubuntu:~/git_test$ cat code2.txt 
the code2 first line

9adf62e35bd4020aad192d7fe9f53048.png


(2) 然后再次编辑code.txt内容,在其中加入一行,编辑后内容如下:


python@ubuntu:~/git_test$ vi code.txt 
python@ubuntu:~/git_test$ cat code.txt


247f592369bc3ab7220bc6d11b85d9d3.png


(3) 使用如下命令查看当前工作树的状态:


python@ubuntu:~/git_test$ git status
# 上面提示我们code.txt被修改,而code2.txt没有被跟踪。


ab26da6fa44e3741860d96bce80f6a0f.png


(4) 我们使用如下命令把code.txt和code2.txt加入到暂存区,然后再执行git status命令,结果如下:


python@ubuntu:~/git_test$ git add code.txt code2.txt
# 所有git add命令是把所有提交的修改存放到暂存区。

65ff20b4c5cc4844395953e1853afb05.png


(5) 然后,执行git commit就可以一次性把暂存区的所有修改提交到分支创建一个版本。

1e3991749fe09a0b4408eb79dc394e3c.png


(6) 一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。执行如下命令可以发现:


d0a4d4b50a8a3bfcde047c5e67dc6fe3.png


现在我们的版本库变成了这样:如4.2.2 图所示。


4.3 管理修改


git管理的文件的修改,它只会提交暂存区的修改来创建版本


4.3.1 案例


(1) 编辑code.txt,并使用git add 命令将其添加到暂存区中。


65303e43ffe8b7db9b61c64f01bc9b43.png


(2) 继续编辑code.txt,并在其中添加一行。


4b89757378c7ced2f9c0821d9f15de67.png


(3) git commit创建一个版本,并使用git status查看,发现第二次修改code.txt内容之后,并没有将其添加的工作区,所以创建版本的时候并没有被提交。


cefee52238f351d34aaaec73d3e151ab.png


4.4 撤销修改


4.4.1 没有放入暂存区


(1) 继续上面的操作,提示我们可以使用 git checkout -- <文件名> 来丢弃工作区的改动。执行如下命令,发现工作区干净了,第二次的改动内容也没了。

python@ubuntu:~/git_test$ git checkout -- <文件名>

d3fe728b0773f65742a2eca38c237cb3.png


4.4.2 添加到暂存区


(2) 我们继续编辑code.txt,并在其中添加如下内容,并将其添加的暂存区。


3a5026d4171768e7096ba7edb8a44a9c.png


(3)git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉,重新放回工作区。


python@ubuntu:~/git_test$ git reset HEAD code.txt


83e13857ff18525cb8865253f7edff4d.png


(4)现在若想丢弃code.txt的修改,执行如下命令即可。


2bc189124ff749f08502aa8b20108ae1.png


现在,如果你不但改错了东西,还从暂存区提交到了版本库,则需要进行版本回退。


4.4.3 小结


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


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


场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节。


4.5 对比文件的不同


4.5.1 对比工作区和某个版本中文件的不同


(1) 继续编辑文件code.txt,在其中添加一行内容。


439f739355f7cb266a2844dbfd4d958b.png


(2) 现在要对比工作区中code.txt和HEAD版本中code.txt的不同。使用如下命令:

a12150c5f218f9ded4e5a372b861fe98.png


(3) 使用如下命令丢弃工作区的改动。


61eaa6bcc75a935a5087f3ba4417fa9d.png


4.5.2 对比两个版本间文件的不同


(1) 现在要对比HEAD 和 HEAD^ 版本中code.txt的不同,使用如下命令:


python@ubuntu:~/git_test$ git diff HEAD HEAD^ -- code.txt


52865579b46c2714694ef5feba25dce4.png


4.6 删除文件(工作区的改动)


删除文件也是对工作区的改动。


(1) 我们把目录中的code2.txt删除。


python@ubuntu:~/git_test$ rm code2.txt 
python@ubuntu:~/git_test$ ls
code.txt
python@ubuntu:~/git_test$ git status


5f1f583949076cfd6ee47286ab67a1b9.png


这个时候,git知道删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻提示哪些文件被删除了。


81634519e79a309f17cb3ed447eda34b.png


(2) 现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:(真正删除)


# 添加到暂存区
python@ubuntu:~/git_test$ git rm code2.txt       
rm 'code2.txt'
python@ubuntu:~/git_test$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)
  删除:     code2.txt
python@ubuntu:~/git_test$ git commit -m "删除code2.txt"
# 以简短方式显示版本记录
python@ubuntu:~/git_test$ git log --pretty=oneline 


5ddeb9d85f913b1d7f6e055d45504074.png


另一种情况是删错了,可以直接使用git checkout – code2.txt,这样文件code2.txt又回来了。(删除之后恢复)


python@ubuntu:~/git_test$ git checkout -- code2.txt
python@ubuntu:~/git_test$ ls
code2.txt  code.txt

4.6.1 小结


命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容



目录
相关文章
|
存储 开发工具 git
Git的简介以及基本使用
Git的简介以及基本使用
|
NoSQL Linux 开发工具
【Linux】第十站:git和gdb的基本使用(下)
【Linux】第十站:git和gdb的基本使用
112 0
|
NoSQL Linux 开发工具
【Linux】第十站:git和gdb的基本使用(上)
【Linux】第十站:git和gdb的基本使用
60 0
|
数据可视化 网络安全 开发工具
git可视化版本控制工具SourceTree的基本使用
git可视化版本控制工具SourceTree的基本使用
271 0
|
开发工具 git Docker
git:github的tag标签基本使用和自动发布软件包
git:github的tag标签基本使用和自动发布软件包
338 0
git:github的tag标签基本使用和自动发布软件包
|
Linux 开发工具 数据安全/隐私保护
【Git】Git 的基本使用
【Git】Git 的基本使用
104 0
|
缓存 开发工具 数据安全/隐私保护
git基本使用和github使用仓库拉取和提交
git基本使用和github使用仓库拉取和提交
|
网络安全 开发工具 git
Git的基本使用
Git的基本使用
79 0
|
开发工具 git Perl
Git基本使用
Git基本使用
120 0
|
开发工具 git
Git多人基本使用笔记
Git多人基本使用笔记
113 0
Git多人基本使用笔记