文章目录
一、Git原理
1.1 什么是Git
Git 是一种在全球范围都广受欢迎的 分布式版本控制系统。它就没有中央服务器的,每个人的电脑就是一个完整的版本库,工作的时候就不用联网了,因为版本都是在自己的电脑上。最初Git是为辅助 Linux 内核开发的。Git的作者是Linux之父李纳斯·托沃兹。
- 什么又是版本控制呢? 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单说就是用于管理多人协同开发项目的技术。
- 优点:适合分布式开发,强调个体;任意两个开发者之间可以很容易的解决冲突;离线工作;速度快、灵活;公共服务器压力和数据量都不会太大。
1.2 Git 工作流程
一般工作流程如下:
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
二、Git 的安装及简单使用
2.1 安装Git
yum install git -y
输入git --version,可查看 git 的版本
2.2 创建仓库
- 仓库,这个仓库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
1、创建一个目录 mkdir repository
2、通过git init
命令把这个目录变成Git可以管理的仓库。
此时,repository版本库里会多一个 隐藏目录.git
,此目录是 Git来跟踪管理版本库的。
2.3 添加文件到版本库
- 所有的版本控制系统,只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
1、用命令git add
告诉Git,把文件添加到仓库
- 命令git add ,可反复多次使用,添加多个文件
2、用命令git commit
告诉Git,把文件提交到仓库
git commit -m "test.txt submit"
- 命令git commit,可以一次提交很多文件,-m后面输入的是本次提交的说明,可以输入任意内容,最好是有意义的,这样就能从历史记录里方便地找到改动记录。
3、修改test.txt文件内容,运行git status
,告诉我们文件被修改过。
- git status命令:查看仓库当前的状态
- git commit -a : 跳过使用暂存区域,自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
4、查看文件test.txt,如何被修改,运行git diff
- 命令git diff:查看difference,查看文件具体的改变
5、重新添加修改后的文件,且提交。
在Git中,每当你文件修改完成时,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作。
6、我们可以用git log
命令,查看文件更改的历史记录:
- git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是chenged test.txt,second(我自己又提交了一次),最远一次test.txt submit
2.4 版本回退
现在,我们要把当前版本chenged test.txt,second
回退到上一个版本chenged test.txt
1、使用git reset --hard
命令,回退:
回退到上一版: git reset --hard HEAD^
回退到倒数第二版: git rest --hard HEAD^^
回退到commit id为xxxxxxx的版本 : git rest --hard xxxxxxx
- 在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
- git reset 和 git reset --hard区别:
git reset(git reset –-soft)
回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可。
git reset -–hard
彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉
2、我们现在又想回到之前的版本chenged test.txt,second
,只要上面的命令行窗口还没有被关掉,找到之前版本chenged test.txt,second
的commit id
即可回到之前的版本。
git reset --hard <commit id>
当然,还可以使用git reflog
查看命令历史,回到未来的某个版本。
2.5 工作区和暂存区
- 工作区:在电脑里能看到的目录,我的repository文件夹就是一个工作区
- 版本库:工作区的一个隐藏目录
.git
,是Git的版本库。其中,index就是暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫 HEAD
前面,我们把文件往Git版本库里添加的时候,是分两步执行的:
- 第一步:
git add
把文件添加进去,本质就是 把文件修改添加到暂存区; - 第二步:
git commit
提交更改,本质就是 把暂存区的所有内容提交到当前分支。
总的来说,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
1、我们先对 test.txt
进行修改,在新编辑一个test2
在工作区。查看状态git status
,test2
从来没有被添加过,所以它的状态是Untracked
。
2、使用两次命令git add
,将两个文件都添加后,用git status
再查看一下
此时,暂存区的状态
3、执行git commit
就可以一次性把暂存区的所有修改提交到分支
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的
此时,暂存区就没有任何内容了
每次修改,如果不用 git add 到暂存区,那就不会加入到commit中,除非使用 git commit -a -m "xxx"
2.6 撤销修改和删除文件
1、 仅丢弃工作区的修改:
git checkout -- file
2、 要丢弃已添加到暂存区的文件,但未再更改过:
git reset HEAD <file>
##把暂存区的修改撤销掉,重新放回工作区,用HEAD时,表示最新的版本
git checkout -- file
##丢弃工作区的修改
3、 要丢弃已添加到暂存区,又作了修改的文件:
git checkout -- file
##撤销修改就回到添加到暂存区后的状态
4、删除文件
命令git rm
用于删除一个文件。
- 如果一个文件已经提交到版本库,那么永远不用担心误删,但是只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。