git 安装|版本库|提交修改文本|各个版本任意切换

说在前面

本文将会讲解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分支上提>交修改


版权声明:本文为weixin_44297303原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。