(三)Git的常用操作
一、工作区、版本库与暂存区
- 工作区(Working Directory):就是你电脑本地硬盘目录。
- 版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库。
- 暂存区(stage):一般存放在”git目录”下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
二、创建版本库
Administrator@USERCHI-CG42NPC MINGW64 /e
$ mkdir GitRepo
Administrator@USERCHI-CG42NPC MINGW64 /e
$ cd GitRepo
Administrator@USERCHI-CG42NPC MINGW64 /e/GitRepo
$ git init
Initialized empty Git repository in E:/GitRepo/.git/
mkdir
:创建一个新目录。 cd
:进入目录。 git init
:将这个目录变成Git可以管理的仓库,即创建版本库。
Git提示我们这是一个空的仓库。事实上在GitRepo中有一个隐藏的文件.git,这就是我们创建的版本库了,不懂千万不能去修改会删除。
三、添加文件与提交
添加文件
使用命令:git add filename
Administrator@USERCHI-CG42NPC MINGW64 /e/GitRepo (master)
$ touch a.txt
Administrator@USERCHI-CG42NPC MINGW64 /e/GitRepo (master)
$ git add a.txt
touch
:新建一个空文件。 git add
命令只是将文件添加到了暂存区,还未提交至版本库。
提交文件
使用命令:git commit -m " log message" filename
-m
后的log message
是本次提交的日志信息,最好写有意义的信息。
Administrator@USERCHI-CG42NPC MINGW64 /e/GitRepo (master)
$ git commit -m "create a.txt" a.txt
[master (root-commit) 2df1117] create a.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
此时a.txt就提交到了版本库中了。
四、状态查看
使用命令: git status
对上述操作的每一步进行状态查看:
新建文件:
(文件未添加至暂存区,显示红色)
添加文件:
(文件添加至暂存区,但是还未提交,显示绿色)
提交文件:
(文件提交至版本库,显示工作区干净)
对其他操作进行状态查看:
修改文件:
(文件被修改,显示为红色。需要重新 git add
和 git commit
)
删除文件:
删除命令: rm -f filename
(文件被删除,显示为红色。这是我们仍然需要进行 git add
和 git commit
)
千万不能忘记删除后也有add和commit!!!
五、版本回退
使用版本控制系统的一大好处就是我们可以方便的找回以前版本的文件。
5.1、版本逐步回退
使用命令: git reset --hard HEAD^
当前版本中new.txt的内容: cat filename
:用于浏览文件内容。
现在要求回到前一个版本:
现在要求继续往前退三个版本: git reset --hard HEAD^
命令中HEAD
的上标^的个数表示回退几个版本。
如果要求回退100个版本难道要用100个^吗?这显然是不合理的。所以可以写成HEAD~100
5.2、回退至指定版本
使用命令:
首先 git reflog
:查看所有分支的所有操作记录;
然后 git reset --hard id
:回退到指定id的版本。
使用 git reflog
:
回退到刚刚第一个修改new.txt的版本:
六、版本对比
对比工作区与暂存区最新版本的区别:
使用命令: git diff HEAD -- filename
显示暂存区最新版本比工作区中的多了一部分”22222222”
对比版本库中两个指定版本的区别:
使用命令: git diff id1 id2
说明前面那一版本到后面那一版本要减去一部分”55555555”。
说明前面那一版本到后面那个版本要增加一部分。
七、撤销修改
7.1、已修改,未add
深夜加班,无心项目,一溜的SB写了上去。
突然惊醒,幸好刚刚写上,还可以更改。这时我们只需要对此文件进行编辑,删除最后一行即可。
我们使用 git status
:
Git告诉我们可以使用命令 git checkout -- filename
撤销对工作区的修改。
撤销对工作区的修改有两种情况:
1、修改了,还没有添加到缓存区,撤销后,文件恢复到原先版本库的文件;
2、修改了,添加到了缓存区,撤销后,文件恢复到刚刚添加进缓存区时的文件。
总而言之,撤销后,恢复到最近一次 git add
和 git commit
时的文件。
7.2、已修改,已add
这一次,我不仅仅写了坏话,我还添加到缓存区了。怎么办???
使用 git status
看看有什么提示没:
让我们使用 git reset HEAD filename
:
说明 git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
再次使用 git status
看看有什么提示没:
现在,缓存区是干净的,工作区有修改,我们就又回到了7.1的情况。
7.3、已修改,已add,已commit
这就是简单的版本回退了,参考上方版本回退。
八、Git的分支
在项目开发中,有很多小组共同开发项目,最后所有小组的成果进行组合,总项目完成。这每一个小组就是一个分支。
8.1、查看当前所有分支
使用命令: git branch
显示当前的分支有master,主分支。
8.2、新建分支
使用命令: git branch name
创建一个名为dev的新分支。
8.3、切换分支
使用命令: git checkout name
切换至新建的dev分支。
8.4、删除分支
使用命令: git checkout -d name
删除新建的test分支。
8.5、合并分支
使用命令: git merge name
在主分支中查看b.txt:
在dev分支中对b.txt进行修改并提交至版本库:
切换回主分支,查看b.txt:
震惊!!!居然没有更改。
这时就需要进行分支的合并了:
将分支合并后就能看见在dev分支的更改了!
九、版本冲突
在主分支中对a.txt进行修改:
将修改后的版本提交至版本库。
在dev分支中对主分支的修改显然是毫不知情的,在同一行进行修改:
当dev分支与主分支合并时:
提示我们有冲突产生。
产生原因,我们在同一行对文件进行修改,当合并时Git不知道谁的放在上面。
解决冲突:不要想当然的删除,要进行人工的干预。
我们查看一下冲突:
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
使用 vim
命令对文件进行手工的修改就可以提交了。
不应该加上文件名。
使用命令git log --graph
可以看见分支合并图。
上一篇: Scrapy框架流程图解析