git(二):git安装和简单使用

git(二):git安装和简单使用

 

1          安装和使用

https://blog.csdn.net/w252064/article/details/82691343

1.1         安装

yum 源仓库里的 Git 版本更新不及时,最新版本的 Git 是 1.8.3.1,但是官方最新版本已经到了 2.9.2。想要安装最新版本的的 Git,只能下载源码进行安装。

#依赖库安装
sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel -y
sudo yum install gcc perl-ExtUtils-MakeMaker –y

#下载
mkdir /home/admin/soft/git
cd /home/admin/soft/git
wget https://github.com/git/git/archive/v2.9.2.tar.gz
tar -xzvf v2.9.2.tar.gz
cd git-2.9.2
sudo make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install

sudo rm -f /usr/bin/git
sudo ln -s /usr/local/git/bin/git /usr/bin/git

echo export PATH='/usr/local/git/bin:$PATH'  | sudo tee -a /etc/profile
source /etc/profile
git --version

 

1.2         初始化

git init
git config --global user.name "wangxu01"
git config --global user.emal "wangxu01@aliyun.com"
git config --list #查看初始化配置信息

 

1.3         git目录

[admin@pe-jira .git]$ ll
总用量 16
drwxrwxr-x 2 admin admin    6 6月  17 15:29 branches
-rw-rw-r-- 1 admin admin   92 6月  17 15:29 config
-rw-rw-r-- 1 admin admin   73 6月  17 15:29 description
-rw-rw-r-- 1 admin admin   23 6月  17 15:29 HEAD
drwxrwxr-x 2 admin admin 4096 6月  17 15:29 hooks
drwxrwxr-x 2 admin admin   20 6月  17 15:29 info
drwxrwxr-x 4 admin admin   28 6月  17 15:29 objects
drwxrwxr-x 4 admin admin   29 6月  17 15:29 refs
[admin@pe-jira .git]$

branches/ # 新版的Git已经不再使用这个目录,所以大家看到它 #一般会是空的

COMMIT_EDITMSG # 保存着上一次提交时的注释信息

config # 项目的配置信息

description # 项目的描述信息

HEAD # 项目当前在哪个分支的信息

hooks/ # 默认的“hooks” 脚本文件

index # 索引文件,git add 后把要添加的项暂存到这里

info/ # 里面有一个exclude文件,指定本项目要忽略的文件 #,看一下这里

logs/ # 各个refs的历史信息

objects/ # 这个目录非常重要,里面存储都是Git的数据对象

# 包括:提交(commits), 树对象(trees),二进制对象 #(blobs),标签对象(tags)。

#不明白没有关系,后面会讲的。

refs/ # 标识着你的每个分支指向哪个提交(commit)。

 

 

1.4         git 文件夹中文件的四种状态

https://www.jianshu.com/p/96beaf505865

 

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

 

1.5         常用命令

git  add            #添加文件内容至暂存区(索引区)
git  status         #显示状态 
git  status -s      #状态一览
git  diff           #显示提交之间、提交和工作区之间等的差异 
git  log            #显示提交日志
git  reset          #回滚,重置当前HEAD到指定状态 
git  rm             #从工作区和索引中删除文件 
git  rm --cache     #从暂存区删除
git  mv             #移动或重命名一个文件、目录或符号链接,相当于mv git rm git add三个命令

git  bisect         #通过二分查找定位引入 bug 的变更 
git  branch         #列出、创建或删除分支 
git  checkout       #检出一个分支或路径到工作区 
git  clone          #克隆一个版本库到一个新目录 
git  commit         #记录变更到版本库 
git  merge          #合并两个或更多开发历史 
git  pull           #获取并合并另外的版本库或一个本地分支 
git  push           #更新远程引用和相关的对象 

git  fetch          #从另外一个版本库下载对象和引用 
git  grep           #输出和模式匹配的行 
git  init           #创建一个空的 Git 版本库或重新初始化一个已存在的版本库 
git  rebase         #本地提交转移至更新后的上游分支中 
git  show           #显示各种类型的对象 
git  tag            #创建、列出、删除或校验一个GPG签名的 tag 对象

 

1.6         基本操作

 

1.6.1  git add提交文件

[admin@pe-jira git-test]$ git status
位于分支 master

初始提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

        index.html

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
[admin@pe-jira git-test]$ git add index.html
[admin@pe-jira git-test]$ git status
位于分支 master

初始提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)

        新文件:   index.html

[admin@pe-jira git-test]$

 

 

1.6.2 git rm –cache 暂存区删除

#例如说,我提交到暂存区发现文件有问题,从暂存区删除

[admin@pe-jira git-test]$ git status

位于分支 master

 

初始提交

 

要提交的变更:

  (使用 "git rm --cached <文件>..." 以取消暂存)

 

        新文件:   index.html

 

[admin@pe-jira git-test]$ git rm --cached index.html

rm 'index.html'

[admin@pe-jira git-test]$ git status

位于分支 master

 

初始提交

 

未跟踪的文件:

  (使用 "git add <文件>..." 以包含要提交的内容)

 

        index.html

 

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

[admin@pe-jira git-test]$

[admin@pe-jira git-test]$ git add *

[admin@pe-jira git-test]$ git status

位于分支 master

要提交的变更:

  (使用 "git reset HEAD <文件>..." 以取消暂存)

 

        新文件:   123

        新文件:   pay.html

 

[admin@pe-jira git-test]$ git rm --cache  pay.html

rm 'pay.html'

[admin@pe-jira git-test]$ git status

位于分支 master

要提交的变更:

  (使用 "git reset HEAD <文件>..." 以取消暂存)

 

        新文件:   123

 

未跟踪的文件:

  (使用 "git add <文件>..." 以包含要提交的内容)

 

        pay.html

 

[admin@pe-jira git-test]$

 

 

1.6.3  git commit提交数据

[admin@pe-jira git-test]$ git add index.html

[admin@pe-jira git-test]$ git status

位于分支 master

 

初始提交

 

要提交的变更:

  (使用 "git rm --cached <文件>..." 以取消暂存)

 

        新文件:   index.html

 

[admin@pe-jira git-test]$ git commit -m "1111"

[master(根提交) a28c2d6] 1111

 1 file changed, 1 insertion(+)

 create mode 100644 index.html

[admin@pe-jira git-test]$ git status

位于分支 master

nothing to commit, working tree clean

[admin@pe-jira git-test]$

 

 

1.6.4  git log查看日志

[admin@pe-jira git-test]$ git log

commit a28c2d6a77895a9359fb8be4c205981a79b3f068

Author: wangxu01 <wangxu01@aliyun.com>

Date:   Mon Jun 17 16:32:15 2019 +0800

 

    1111

[admin@pe-jira git-test]$

 

git log 命令支持的选项

-p 按补丁格式显示每个更新之间的差异。

--stat 显示每次更新的文件修改统计信息。

--shortstat 只显示 --stat 中最后的行数修改添加移除统计。

--name-only 仅在提交信息后显示已修改的文件清单。

--name-status 显示新增、修改、删除的文件清单。

--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。

--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。

--graph 显示 ASCII 图形表示的分支合并历史。

--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。

选项    说明

%H      提交对象(commit)的完整哈希字串

%h      提交对象的简短哈希字串

%T      树对象(tree)的完整哈希字串

%t      树对象的简短哈希字串

%P      父对象(parent)的完整哈希字串

%p      父对象的简短哈希字串

%an     作者(author)的名字

%ae     作者的电子邮件地址

%ad     作者修订日期(可以用 -date= 选项定制格式)

%ar     作者修订日期,按多久以前的方式显示

%cn     提交者(committer)的名字

%ce     提交者的电子邮件地址

%cd     提交日期

%cr     提交日期,按多久以前的方式显示

%s      提交说明

 

[admin@pe-jira git-test]$  git log --pretty=oneline #将每个提交 放在一行显示

a39f4b365bca6892079f9bf5692fd74a43a3394b pay

a28c2d6a77895a9359fb8be4c205981a79b3f068 1111

[admin@pe-jira git-test]$

[admin@pe-jira git-test]$ git log --pretty=full #相当于git log

commit a39f4b365bca6892079f9bf5692fd74a43a3394b

Author: wangxu01 <wangxu01@aliyun.com>

Commit: wangxu01 <wangxu01@aliyun.com>

 

    pay

 

commit a28c2d6a77895a9359fb8be4c205981a79b3f068

Author: wangxu01 <wangxu01@aliyun.com>

Commit: wangxu01 <wangxu01@aliyun.com>

 

    1111

[admin@pe-jira git-test]$ git log --pretty=fuller #详细信息

commit a39f4b365bca6892079f9bf5692fd74a43a3394b

Author:     wangxu01 <wangxu01@aliyun.com>

AuthorDate: Mon Jun 17 16:40:55 2019 +0800

Commit:     wangxu01 <wangxu01@aliyun.com>

CommitDate: Mon Jun 17 16:40:55 2019 +0800

 

    pay

 

commit a28c2d6a77895a9359fb8be4c205981a79b3f068

Author:     wangxu01 <wangxu01@aliyun.com>

AuthorDate: Mon Jun 17 16:32:15 2019 +0800

Commit:     wangxu01 <wangxu01@aliyun.com>

CommitDate: Mon Jun 17 16:32:15 2019 +0800

 

    1111

[admin@pe-jira git-test]$

[admin@pe-jira git-test]$ git log --pretty=format:"%h - %an, %ar : %s" #时间形式简要输出

a39f4b3 - wangxu01, 7 分钟前 : pay

a28c2d6 - wangxu01, 15 分钟前 : 1111

[admin@pe-jira git-test]$

[admin@pe-jira git-test]$ git log --stat -2  #简要显示增减行数,能够看到提交中修改过的内容,对文件增加或移动的行数,并在最后列出所以增减行的敢要信息。

commit a39f4b365bca6892079f9bf5692fd74a43a3394b

Author: wangxu01 <wangxu01@aliyun.com>

Date:   Mon Jun 17 16:40:55 2019 +0800

 

    pay

 

 123 | 0

 1 file changed, 0 insertions(+), 0 deletions(-)

 

commit a28c2d6a77895a9359fb8be4c205981a79b3f068

Author: wangxu01 <wangxu01@aliyun.com>

Date:   Mon Jun 17 16:32:15 2019 +0800

 

    1111

 

 index.html | 1 +

 1 file changed, 1 insertion(+)

[admin@pe-jira git-test]$

 

 

1.6.5  还原数据

1.6.5.1    撤销本地修改 git checkout file
#未提交git的

[admin@pe-jira git-test]$ echo '123' >> 123

[admin@pe-jira git-test]$ ls

123  index.html  pay.html

[admin@pe-jira git-test]$ git status

位于分支 master

尚未暂存以备提交的变更:

  (使用 "git add <文件>..." 更新要提交的内容)

  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

 

        修改:     123

 

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[admin@pe-jira git-test]$ git checkout -- 123

[admin@pe-jira git-test]$ git status

位于分支 master

nothing to commit, working tree clean

[admin@pe-jira git-test]$

 

 
1.6.5.2    撤销提交修改git reset

https://www.cnblogs.com/ldq2016/p/5752123.html

git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。也可以根据commit ID来回退到指定版本

reset命令有3种方式:

1:git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息

2:git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可

3:git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

#回退所有内容到上一个版本 

git reset HEAD^ 

#回退a.py这个文件的版本到上一个版本 

git reset HEAD^ a.py 

#向前回退到第3个版本 

git reset –soft HEAD~3 

#将本地的状态回退到和远程的一样 

git reset –hard origin/master 

#回退到某个版本 

git reset 057d 

#回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit  

 

#例如我把文件回滚到上上个版本

[admin@pe-jira git-test]$ echo '123' >> 123

[admin@pe-jira git-test]$ git commit -m '修改123文件'

位于分支 master

尚未暂存以备提交的变更:

  (使用 "git add <文件>..." 更新要提交的内容)

  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

 

        修改:     123

 

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[admin@pe-jira git-test]$ git add 123

[admin@pe-jira git-test]$ git commit -m '修改123文件'

[master ad14308] 修改123文件

 1 file changed, 1 insertion(+)

[admin@pe-jira git-test]$ git log --pretty=oneline

ad14308b0030ab9b5a28b5629abd0bb1bdaea537 修改123文件

097f85f3af602919b8cc526387d8b2e9e4cd5781 pay.html

a39f4b365bca6892079f9bf5692fd74a43a3394b pay

a28c2d6a77895a9359fb8be4c205981a79b3f068 1111

[admin@pe-jira git-test]$ echo "456" >> 123

[admin@pe-jira git-test]$ git add 123

[admin@pe-jira git-test]$ git commit -m '修改123文件添加456'

[master 8c0da95] 修改123文件添加456

 1 file changed, 1 insertion(+)

[admin@pe-jira git-test]$ git log --pretty=oneline | grep 123

8c0da95e7230b61a0cdb74c1d56d9e034025ae56 修改123文件添加456

ad14308b0030ab9b5a28b5629abd0bb1bdaea537 修改123文件

[admin@pe-jira git-test]$ cat 123

123

456

[admin@pe-jira git-test]$ git reset --hard HEAD^^

HEAD 现在位于 097f85f pay.html

[admin@pe-jira git-test]$ git status

位于分支 master

nothing to commit, working tree clean

[admin@pe-jira git-test]$ cat 123

[admin@pe-jira git-test]$ git log --pretty=oneline

097f85f3af602919b8cc526387d8b2e9e4cd5781 pay.html

a39f4b365bca6892079f9bf5692fd74a43a3394b pay

a28c2d6a77895a9359fb8be4c205981a79b3f068 1111

[admin@pe-jira git-test]$

 

 

根据commit ID回到指定历史版本,参考下文git reflog

 

1.6.6  git reflog 历史操作记录,配合git reset

可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

[admin@pe-jira git-test]$ cat 123

123

456

[admin@pe-jira git-test]$ echo 'ssss' >> 123

[admin@pe-jira git-test]$ git add 123

(reverse-i-search)`c': e^Co 'ssss' >> 123

[admin@pe-jira git-test]$ git commit -m 'add ssss'

[master afb2318] add ssss

 1 file changed, 1 insertion(+)

[admin@pe-jira git-test]$ git log  --pretty=oneline

afb231865535efef57be61970c441c83502909b0 add ssss

8c0da95e7230b61a0cdb74c1d56d9e034025ae56 修改123文件添加456

ad14308b0030ab9b5a28b5629abd0bb1bdaea537 修改123文件

097f85f3af602919b8cc526387d8b2e9e4cd5781 pay.html

a39f4b365bca6892079f9bf5692fd74a43a3394b pay

a28c2d6a77895a9359fb8be4c205981a79b3f068 1111

[admin@pe-jira git-test]$ git reflog

afb2318 HEAD@{0}: commit: add ssss

8c0da95 HEAD@{1}: reset: moving to 8c0da95

a39f4b3 HEAD@{2}: reset: moving to a39f4b36

a9f0b03 HEAD@{3}: commit: 删除123

cddd358 HEAD@{4}: commit: 修改123文件添加lalal

8c0da95 HEAD@{5}: reset: moving to 8c0da95

9560ced HEAD@{6}: commit: 修改123文件再次添加123

097f85f HEAD@{7}: reset: moving to HEAD^^

8c0da95 HEAD@{8}: commit: 修改123文件添加456

ad14308 HEAD@{9}: commit: 修改123文件

097f85f HEAD@{10}: commit: pay.html

a39f4b3 HEAD@{11}: commit: pay

a28c2d6 HEAD@{12}: commit (initial): 1111

[admin@pe-jira git-test]$ git reset --hard cddd358

HEAD 现在位于 cddd358 修改123文件添加lalal

[admin@pe-jira git-test]$ cat ^C

[admin@pe-jira git-test]$ git status

位于分支 master

nothing to commit, working tree clean

[admin@pe-jira git-test]$ cat 123

123

456

lalalal

[admin@pe-jira git-test]$

 

posted on 2019-06-18 11:04  光阴8023  阅读(676)  评论(0编辑  收藏  举报