该本章是参考廖雪峰Git教程的一篇笔记文章,可以自行搜索查阅
文章目录
前言
Git是用C语言开发的目前世界上最先进的分布式版本控制系统,说到这个就浅谈一下什么是版本控制系统以及分布式的含义。
举个例子谈版本控制系统:
你修改一个word文档,你提交给了别人,然后别人又发过来让你重新修改,然后你第二次修改了又提交上去,别人说不行不行还是第一次的内容,然后你不得不又删除,接着那个人看不惯你,就让你重复修改提交,这时候你也分不清他到底要哪个版本,你就不爽了破口大骂,然后你就丢饭碗了hhhh,这时候就需要咱们的分布式版本控制系统咯,含义就是它可以记录你每次的提交保存,并且记录相应变化并可来回切换。
第二个我们就谈一下分布式与集中式的区别:
集中式版本控制系统最大的缺点就是需要联网才能工作,版本库存放在CPU中,你可以把这个看作一个图书馆,你想要借书修改,就必须先从图书馆借书了之后再改动了放回去,而且一旦CPU里面内容不在了,那只能功亏一篑了。
分布式版本控制系统安全性更高,每个人电脑里可以克隆一个完整版本库,一台电脑出问题了那就从另外台电脑复制一份过来就行了,而且每个人都可以查看到别人的内容并且可进行合并
一、Git安装
- Linux上安装git
直接通过命令sudo apt-get install git
直接安装git,然后再输入命令git
查看系统是否成功安装git(一般来说如果开始输入git
提示未安装的话它就会友好地告诉你如何进行安装) - Windows上安装git
直接从Git官网安装对应版本即可,安装成功后在菜单栏可看到Git Bash/Git GUI
安装成功后,需配置个人信息:
git config --global user.name "your name"
git config --global user.email "1234@qq.com"
二、创建版本库(仓库)
1.在合适地方创建一个空目录
进行该目录下,点击鼠标右键,打开Git Bash Here
命令行如下:
$ mkdir learngit
$ cd learngit
$ pwd
/d/learngit
pwd
命令显示当前所在目录,未避免出现奇怪问题,请确保目录名不含中文
2.将该目录变为Git可管理的仓库
初始化仓库,命令行如下:
$ git init
Initialized empty Git repository in D:/learngit/.git/
此时已经建好了一个空仓库,会发现当前目录下多了个.git
的隐藏目录,这个是用来跟踪管理版本库,也可使用命令行ls-ah
看见
3.把文件添加到版本库
先在learngit
的目录(子目录)下创建一个readme.txt
文件,编辑内容.
然后输入一下命令行将此放入Git仓库:
$ git add .
$ git commit -m "wrote a readme file"
[master (root-commit) c571380] wrote a readme file
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
git add .
表示把当前目录下的所有文件添加到仓库中
git commit
表示把文件提交到仓库,-m "xxx"
表示的是提交的注释
1 file changed
表示1个文件被改动(在这里表示新增加的txt文件
1 insertions
插入了1行内容(txt文件中有两行内容)
在添加或提交到仓库前,可使用git status
查看工作区状态,若git status
告诉文件有被修改过(显示红的modified
),用git diff
可查看修改内容.
三、穿梭基本操作
git log
命令显示从最近到最远的提交日志
在Git中,用
HEAD
表示当前版本,类似于75a51689...
的一串数字是commit id
(版本号),上一版本就是HEAD^, 上上个版本就是HEAD ^ ^,以此类推,但像100个版本就是HEAD~100
cat
命令表示查看当前文件内容,touch
命令表示编辑当前文件内容
1. 版本回退
例如将当前版本回退到上一版本,执行命令行如下:
$ git reset --hard HEAD^
HEAD is now at 75a5168 add distributed
但是这时你再执行git log
指令会发现,之前的版本已经没有了,别着急,可以执行命令git reset --hard commit_id
任意穿梭版本号
- 穿梭前可以用
git log
查看提交历史,以便确认回退到哪个版本 - 要重返未来,可以用
git reflog
查看命令历史,以便确定要回到未来哪个版本。
2.工作区和暂存区
- 工作区就是在电脑里可以看到的目录,比如之前的
learngit
文件夹 - 版本库就是
.git
隐藏目录,里面最重要的就是称为stage(or index)的暂存区,还有git自动创建的第一个分支master
,以及指向master
的一个指针HEAD
根据原理图,可以解释两步将问价添加到版本库的实际道理:
git add
把文件添加进去,实际上就是把问价添加到暂存区
git commit
提交更改,实际上就是把暂存区所有内容提交到当前分支。
因为创建仓库时,自动船舰了唯一一个
master
分支,所以当前分支就是master
理解后,你可以试试第一次修改readme.txt
文件,然后执行git add
指令,然后再一次修改readme.txt
文件,然后执行git commit
指令,结果是什么呢?
使用
git status
会发现只提交了第一次修改,使用git diff HEAD -- readme.txt
发现第二次修改并未提交,因为git commit
只将暂存区的内容提交到分支,所以说每次修改,都需要执行git add
到暂存区,然后再commit
.
3.撤销修改
你在readme.txt
中添加一句话,然后再手动地删除添加的话恢复到上一状态,如果用git status
查看,会发现已经更改了,这是可以用git checkout -- readme.txt
恢复到最近一次git commit
或git add
时状态.
git checkout -- readme.txt
是把readme.txt
文件再工作区的修改全部撤销,有两种情况:
一种是readme.txt
自修改后还没有放在暂存区,现在撤销修改就回到和版本库一模一样的状态
一种是readme.txt
已经添加到暂存区之后,又做了修改,现在撤销修改就回到添加到暂存区后状态
总之,就是让文件回到最近一次git commit
或git add
时状态.
如果你已经add
了,这时候就要先执行git reset HEAD readme.txt
把暂存区的修改撤销掉重新放回工作区,然后再执行git checkout -- readme.txt
撤销
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区
小结:
- 场景一:当你改乱工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file
。 - 场景二:当你不但乱改了工作区的内容,还添加到了暂存区,想丢弃修改,分两步,第一步用命令
git reset HEAD file
回到场景一,第二部按场景一操作. - 场景三:如果你已经提交到版本库,想撤销本次提交,参考
版本回退
一节内容,前提是你没有推送到远程仓库。
4.删除修改
一般情况下,可以通常直接在文件管理器中把没用的文件删了,或者用rm file
命令删除,但是Git就知道你删除了文件,工作区和版本库就不一致了,git status
会立刻告诉你哪些文件被删除了。
- 如果你确实想从版本库里删除该文件,那就用命令
git rm file
删掉,并且git commit
:
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master 9ba8d4e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
- 如果你是删错了,因为版本库里还有,所以可以把误删文件恢复到最新版本
git checkout -- test.txt
注意:从来没被添加到版本库就被删除的文件是无法恢复的!
小结:rm
命令就是在工作区删文件,命令git rm
用于删除一个文件并把删除文件的修改提交到暂存区,,如果一个文件已经提交到版本库,你不用担心误删,只能恢复到最新版本,而且会丢失最近一次提交后修改的内容。
若想学习远程仓库请看下一篇博客