说在前面
本文将会讲解git的一些常用操作~
安装git
我用的是RHEL7,源码中有,直接yum即可,其他linux版本应该在源码中也有~
$ sudo yum install git -y
创建版本库
版本控制系统只能跟踪文本文件的改动,如txt、网页、程序代码等。而图片、视频这些二进制>文件,版本控制系统无法跟踪具体改了啥,让人最遗憾的是,word使用的也是二进制文件~真正
使用版本控制系统,还是需要使用纯文本的方式编写文件,以及最好使用标准的UTF-8编码,所>有的语言使用同一种编码,既没有冲突,也被所有平台支持~
$ mkdir git #创建一个空目录
$ cd git/
$ git init #git init初始化成一个git可以管理仓库
$ ls -a
. .. .git #多了一个.git目录,这个目录是git专门用于跟踪管理版本库的,不要乱动
第一次使用版本库
第一次使用版本库需要提交你的身份信息,作为你修改文件的身份
$ cat readme.txt
git is used by Linux.
git is a version control system.
$ git add readme.txt #add用于添加文件,可重复使用多次,添加多个文件
$ git commit -m "no change" #commit一次可以提交所有已经add了的文件
# -m后面的信息是本次提交的说明,可以是任意内容,不
过最好是有意义的,这样方便你从历史记录中找到改动文件
#可以看到,出错了,第一次刚建立版本库
#身份是 ansible@node1.(none) 不被允许
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: empty ident name (for <ansible@node1.(none)>) not allowed
'
$ git config --global user.email "lxn3642@163.com" #根据提示写入自己的身份信息
$ git config --global user.name "lxn"
$ git commit -m "no change" #提交成功
[master (root-commit) 13d7246] no change
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
文件管理的基本命令
修改readme.txt文件
$ cat readme.txt
git is used by Linux and Windows.
git is a version control system.
时刻掌握仓库的当前状态
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt #readme.txt文件被修改过
#
no changes added to commit (use "git add" and/or "git commit -a") #没有被add
跟版本库的相比,查看具体修改了什么内容
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 63c93e5..8e68f8f 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@ # 在同一行删添,可以理解为修改
-git is used by Linux. # 删除了这一行
+git is used by Linux and Windows. # 添加了这一行
git is a version control system.
明白修改了什么之后,可以放心提交到版本库了
$ git add readme.txt
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.txt #将被提交的修改文件有readme.txt
$ git commit -m "first changed" #提交
$ git status
# On branch master
nothing to commit, working directory clean #没有文件被修改
如何修改文件,以及查看,提交等等,上面已经交代清楚了,现在再来修改一次:
$ echo "third changes" >> readme.txt
$ git add readme.txt
$ git commit -m "second changed"
版本回退
在开始使用版本回退功能之前先来回顾一下read.txt文件的各个版本:
版本一:no change
$ cat readme.txt
git is used by Linux.
git is a version control system.
版本二:first changed
$ cat readme.txt
git is used by Linux and Windows.
git is a version control system.
版本三:second changed
$ cat readme.txt
git is used by Linux and Windows.
git is a version control system.
third changes
查看历史修改记录,根据时间从近到远
$ git log
commit 3a3bd08384ea04cffa31718522722ca3a911ac1b #commit id(版本号)
Author: lxn <lxn3642@163.com> #谁修改的
Date: Fri Dec 6 10:11:05 2019 +0800 #修改时间
second changed #commit提交时所写的说明
commit 384d00ca2315a46826098a23a6ad3f959b2ebace
Author: lxn <lxn3642@163.com>
Date: Fri Dec 6 10:02:53 2019 +0800
first changed
commit 13d72469a574298db168de87ca214546b615ad40
Author: lxn <lxn3642@163.com>
Date: Fri Dec 6 09:46:17 2019 +0800
no change
更简洁,都则修改次数太多时,不好看
$ git log --pretty=oneline
3a3bd08384ea04cffa31718522722ca3a911ac1b second changed
384d00ca2315a46826098a23a6ad3f959b2ebace first changed
13d72469a574298db168de87ca214546b615ad40 no change
将文本回退到first changed版本
$ git reset --hard HEAD^
HEAD is now at 384d00c first changed
$ cat readme.txt #回退成功
git is used by Linux and Windows.
git is a version control system.
- ‘在git中,HEAD表示当前版本,上一个版本是HEAD,上上个版本是HEAD,所以表示上一个版本,如>果往上多个版本,写^就太赘余了,也容易错,比如往上100个版本,可以写成HEAD~100,–hard参数后
面再讲’
查看当前所在版本
$ git show HEAD
再来看看历史记录
$ git log
commit 384d00ca2315a46826098a23a6ad3f959b2ebace
Author: lxn <lxn3642@163.com>
Date: Fri Dec 6 10:02:53 2019 +0800
first changed # 最上面的一个版本就是当前版本
#那么我想要回到刚才的版本怎么办?
commit 13d72469a574298db168de87ca214546b615ad40
Author: lxn <lxn3642@163.com>
Date: Fri Dec 6 09:46:17 2019 +0800
no change
回到刚才的版本
$ git reset --hard 3a3bd08384ea04cffa31718522722ca3a911ac1b #原来版本的commit ID
#通过刚才的命令历史记录查看的,只要窗口没有关闭,顺着向上找即可
#而且这个commit id 可以不写完,写前几位即可,git会自动帮你找
HEAD is now at 3a3bd08 second changed
我胡汉三又回来了
$ cat readme.txt
git is used by Linux and Windows.
git is a version control system.
third changes
这种方式总是有些苛刻的,如果我命令行窗口关闭了怎么办?凉了?
其实不然,git提供了 git reflog 命令来记录你的每一次命令
$ git reflog
3a3bd08 HEAD@{0}: reset: moving to 3a3bd08384ea04cffa31718522722ca3a911ac1b
384d00c HEAD@{1}: reset: moving to HEAD^
3a3bd08 HEAD@{2}: commit: second changed
384d00c HEAD@{3}: commit: first changed
13d7246 HEAD@{4}: commit (initial): no change
可以看到second changed 的commit id 是3a3bd08,那么我们就可以通过git reset --hard 3a3bd08 回
到刚才的版本了~
说在后面
工作区
就是你在电脑上能够看到的目录,比如我创建的git目录
版本库
工作区有一个隐藏目录.git,这个不算工作区,是Git的版本库
把文件往Git版本库里添加时,分两步:
第一步:git add实际上就是将文件将文件添加到暂存区
第二步:git commit提交更改,实际上就是将暂存区内的所有内容提交到当前分支
在创建Git仓库时,GIt会自动为我们创建一个master分支,所以现在git commit就是往master分支上提>交修改