git 简介
git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。git百科
git 的两大特点
- 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题。
- 分布式: Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。
首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个服务器仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉去别人的提交。可以自己搭建这台服务器,也可以使用GitHub网站。
分布式与集中式系统的区别
- 分布式与集中式之中都有中央服务器,它们的区别是:
- 当中央服务器瘫痪时,分布式系统上的程序依然能够继续执行,但是在集中式服务器中,当中央服务器瘫痪时,程序则不能执行
git 的安装与配置
这里我所使用的操作系统是linux中的ubuntu。
安装命令:
sudo apt-get install git
安装完成之后,运行
git
可以查看git是否被安装
git 使用
1 . 初始化版本目录,首先创建一个目录test,然后执行如下命令:
git init
这样在test目录中就会有一个.git的隐藏目录,用来控制目录版本
- 在test目录下创建一个文件code.txt, 然后再文件中随意编辑一些内容(忽略我的三脚猫英文)
3. 使用如下两条命令可以创建一个版本
git add code.txt # 将文件添加到暂存区中
git commit -m "版本1" # 提交,注意,引号中是填写此代码的说明信息
- 使用如下命令可以查看版本记录
git log
这里对git log命令做一个说明, 这里的版本序列号可以注意一下,后面会有用
版本回退
此时我们的code.txt文件时这样的。
简单的编辑一下,再将它提交,并使用git log命令查看记录
可以看到,新编辑的code.txt比原来的文件多了一行,但是此时若我们想回到原来的版本,使用git的方法应该怎么做呢,有两种方法
-
git reset --hard HEAD^ # 返回上一个版本
其中HEAD表示当前最新版本,HEAD^ 表示当前版本的前一个版本,HEAD^^表示当前版本的前前个版本,也可使用HEAD~1 表示当前版本的前一个版本,HEAD~100表示当前版本的前100个版本
HEAD^等价于HEAD~1 # 两个表达式相等
-
执行命令后使用git log查看版本记录,发现现在只能看到版本1的记录,
cat code.txt查看文件内容,现在只有一行,也就是第一个版本中的版本中的code.txt中的内容 -
加入我们现在又想回到版本2,这个时候怎么办?
可以使用如下命令:
-
git reset --hard 版本序列号
版本序列号就是commit 后面的一串字符,不需要全部选取,只需选择前几个字符进行复制即可
4.假如我们已经退出终端,目前是版本1,但是想要回到版本2,应该怎么办呢?
可以使用如下命令查看历史操作记录
git reflog
运行此命令后,终端会显示出对应版本序列号的前几个字符,以及版本说明,此时在使用
git reset --hard 版本2序列号
命令即可回到版本2
git的工作区
- git的工作区是指当前目录中有.git的隐藏文件的目录,一般来说,编辑git版本都在工作区中进行,比如我们的test目录,就是一个工作区
git版本库
工作区有一个隐藏目录.git,这个不是工作区,而是git的版本库。
- git的版本库里存在许多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有git为我们创建的第一个分支master,以及指向master的一个指针叫HEAD。
- 因为我们创建git版本库时,git自动为我们创建了唯一一个master分支,所以,git commit 就是往master分支上提交更改。
- 把文件往git版本库里添加的时候,是分两步执行的:
- (1)下面在test目录下在创建一个文件code2.txt,然后编辑内容如下
- (2)然后再次编辑code.txt内容
- (3)使用如下命令查看当前工作树的状态
git status
上面提示我们code.txt被修改,而code2.txt没有被跟踪
- (4) 我们使用如下命令把code.txt和code2.txt加入到缓存区,然后执行git status命令, 结果如下:
git add命令是把所有提交的修改存放在暂存区。 - (5)执行git commit 就可以一次性把 暂存区的所有修改提交到分支创建一个版本。当文件被提交之后,再使用git status查看工作树状态,此时可以看到master分支已经变为一个干净的工作区了。
git 管理修改
git管理的文件的修改,他只会提交暂存区的修改来创建版本。
(1) 编辑code.txt,并使用 git add 命令将其添加到暂存区中
(2) 继续编辑code.txt 并在其中添加一行。
(3) git commit创建一个版本,并使用git status查看,发现第二次修改的code。txt内容之后,并没有将其添加到工作区,所以常见版本的时候并没有被提交
git 撤销修改
- git撤销修改
(1) 继续上面的操作,提示我们可以使用git checkout – <文件> 来撤销修改(可以配合cat命令来查看文件变化)
(2) 我们继续编辑code.txt,并在其中添加如下内容(the new line),并将其添加到暂存区(git add <文件>)
(3) git同样告诉我们,用命令 git reset HEAD <文件> 可以把暂存区的修改撤销掉,重新放回工作区。
(4)现在若想丢弃code.txt的修改,执行如下命令即可。
git checkout -- <文件>
cat <文件>
git status
现在,如果你不但改错了东西,还从暂存区提交到了版本库,则需要进行版本回退。
git管理修改小结
场景1:当你该乱了工作区某个文件的内容,想直接丢弃工作区的修改是
用命令 git checkout -- <文件>
场景2: 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,像丢弃修改,分两步,第一步用命令 git reset HEAD <文件>就回到了场景1,第二步按场景1来操作。
场景3: 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节
git 对比文件的不同
一、对比工作区和某个版本中的文件的不同
(1)继续编辑文件code.txt,再其中添加一行内容
(2) 现在要对比工作区中code.txt和HEAD版本中code.txt的不同。使用如下命令
使用 git diff HEAD – <文件> 即可
(3)使用如下命令丢弃工作区的改动
git checkout -- code.txt
二、对不不同版本的文件的不同
git diff HEAD HEAD^ -- <文件>
git 删除文件
在linux中可以使用rm <文件>的方式来删除文件,但是当这个文件在git工作区里进行此类方法操作时,文件并不能彻底删除,可以使用 git checkout – <文件> 即可恢复文件。
所以我们有两种方法:
1. 第一种要从版本库中删除该文件,那就用命令 git rm删掉,并且使用 git commit, 这样文件就删除了
2. 另一种情况是删错了, 可以使用 git checkout --<文件>, 这样文件就恢复了
git删除文件小结:
命令git rm用于删除一个文件,如果一个文件已经被提交到版本库,那么永远不用担心误删,但是要小心,你只能恢复文件到最新版本,而且会丢失最近一次提交后你所修改的内容。
git的基本操作总结
为了更好和系统的整理这些知识点,我做了一个知识脑图,用于更加便捷的复习,理解起来也更加容易。