第六章 GIT命令操作

GIT命令操作

常用命令说明:
add    添加文件内容至索引

bisect 通过二分查找定位引入 bug 的变更

branch 列出、创建或删除分支

checkout  检出一个分支或路径到工作区

clone   克隆一个版本库到一个新目录

commit   记录变更到版本库

diff    显示提交之间、提交和工作区之间等的差异

fetch  从另外一个版本库下载对象和引用

grep   输出和模式匹配的行

init   创建一个空的

Git    版本库或重新初始化一个已存在的版本库

log    显示提交日志

merge  合并两个或更多开发历史

mv     移动或重命名一个文件、目录或符号链接

pull   获取并合并另外的版本库或一个本地分支

push   更新远程引用和相关的对象

rebase 本地提交转移至更新后的上游分支中

reset  重置当前HEAD到指定状态

rm     从工作区和索引中删除文件

show   显示各种类型的对象

status 显示工作区状态

tag    创建、列出、删除或校验一个GPG签名的 tag 对象

常用示意图:

文件的状态变化周期

创建文件

[root@gitlab git_data]# touch README
[root@gitlab git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#    README
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

添加文件追踪

[root@gitlab git_data]# git add ./*
[root@gitlab git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#    新文件:    README
#

文件会添加到.git的隐藏目录

[root@gitlab git_data]# tree  .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── objects
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

由工作区提交到本地仓库

[root@gitlab git_data]# git commit  -m 'first commit'  
[master(根提交) bb963eb] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README

查看git的状态

[root@gitlab git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区

提交后的git目录状态

[root@gitlab git_data]# tree  .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 54
│   │   └── 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
│   ├── bb
│   │   └── 963eb32ad93a72d9ce93e4bb55105087f1227d
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags

添加新文件

git add  * 添加到暂存区域
git commit  提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看
修改或删除原有文件

常规方法

git add  *
git commit
简便方法

git commit -a  -m "注释信息"
-a 表示直接提交

Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are
not affected.

删除git内的文件

命令说明:

• 没有添加到暂存区的数据直接rm删除即可。

• 已经添加到暂存区数据:

git rm --cached database 

#→将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

git rm -f database

#→将文件数据从git暂存区和工作目录一起删除

命令实践:

# 创建新文件
[root@gitlab git_data]# touch 123
[root@gitlab git_data]# git status
# 位于分支 master
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#    123
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
# 将文件添加到暂存区域

[root@gitlab git_data]# git add 123
[root@gitlab git_data]# git status
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#    新文件:    123
#  删除文件

[root@gitlab git_data]# rm 123 -f
[root@gitlab git_data]# ls
[root@gitlab git_data]# git status
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#    新文件:    123
#
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#    删除:      123
# 
[root@gitlab git_data]# git reset HEAD  ./* 
[root@gitlab git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区

重命名暂存区数据

• 没有添加到暂存区的数据直接mv/rename改名即可。

• 已经添加到暂存区数据:

git mv README NOTICE

查看历史记录

• git log   #→查看提交历史记录

• git log -2   #→查看最近几条记录

• git log -p -1  #→-p显示每次提交的内容差异,例如仅查看最近一次差异

• git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

• git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息

• git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录

• git log --pretty=fomat:"%h %cn"  #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。

使用format参数来指定具体的输出格式

格式

说明

%s  提交说明。

%cd   提交日期。

%an   作者的名字。

%cn   提交者的姓名。

%ce   提交者的电子邮件。

%H    提交对象的完整SHA-1哈希字串。

%h    提交对象的简短SHA-1哈希字串。

%T     树对象的完整SHA-1哈希字串。

%t    树对象的简短SHA-1哈希字串。

%P    父对象的完整SHA-1哈希字串。

%p    父对象的简短SHA-1哈希字串。

%ad      作者的修订时间。

命令实践

[root@gitlab git_data]# git log
commit a409fc46f792228a8119705e9cc97c2a013534ab
Author: clsn <admin@znix.top>
Date:   Wed Nov 29 11:44:14 2017 +0800

    test

commit bb963eb32ad93a72d9ce93e4bb55105087f1227d
Author: clsn <admin@znix.top>
Date:   Wed Nov 29 10:57:02 2017 +0800

    first commit

还原历史数据

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

git reset --hard   hash

git reset --hard HEAD^  #→还原历史提交版本上一次

git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统

会自动匹配)

测试命令

[root@gitlab git_data]# git log
commit a409fc46f792228a8119705e9cc97c2a013534ab
Author: clsn <13835544305@163.com>
Date:   Wed Nov 29 11:44:14 2017 +0800

    test

commit bb963eb32ad93a72d9ce93e4bb55105087f1227d
Author: clsn <13835544305@163.com>
Date:   Wed Nov 29 10:57:02 2017 +0800

    first commit
         还原数据

[root@gitlab git_data]# git reset --hard  bb963
HEAD 现在位于 bb963eb first commit
# 查看数据
[root@gitlab git_data]# ls
README

还原未来数据

什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。

git reflog #→查看未来历史更新点

测试命令

[root@gitlab git_data]# git reflog
bb963eb HEAD@{0}: reset: moving to bb963
a409fc4 HEAD@{1}: reset: moving to a409fc4
bb963eb HEAD@{2}: reset: moving to bb963
a409fc4 HEAD@{3}: commit: test
bb963eb HEAD@{4}: commit (initial): first commit
[root@gitlab git_data]#  

标签使用

前面回滚使用的是一串字符串,又长又难记。

git tag v1.0   #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。

git tag          #→查看当前所有的标签

git show v1.0   #→查看当前1.0版本的详细信息

git tag v1.2 -m "version 1.2 release is test"  #→创建带有说明的标签,-a指定标签名字,-m指定说明文字

git tag -d v1.0   #→我们为同一个提交版本设置了两次标签,删除之前的v1.0

测试命令

[root@gitlab git_data]# git reset --hard 0bdf2e7
HEAD is now at 0bdf2e7 modified README file
[root@gitlab git_data]# git reset --hard V1.0
HEAD is now at a66370a add test dir

[root@gitlab git_data]# git tag  v20171129
[root@gitlab git_data]# git tag 
v20171129

对比数据

       git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改

后,再把它提交到仓库就放⼼多了。

git diff README
posted @ 2018-03-22 20:17  云原生运维社区  阅读(121)  评论(0编辑  收藏  举报