git

1.1 Git的安装

1.1.1 版本

# cat /etc/redhat-release

CentOS release 6.8 (Final)

# uname -r

2.6.32-642.4.2.el6.x86_64

# uname -m

x86_64

1.1.2 安装

可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./configmakesudo make install这几个命令安装就好了。

这里用的是yum安装

 

[root@laowang ~]# rpm -qa git

git-1.7.1-4.el6_7.1.x86_64

[root@laowang ~]# yum  install git –y

[root@laowang ~]# git –version

git version 1.7.1

1.2 创建版本库

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以还原

所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

 

创建版本库目录

[root@laowang /]# mkdir gitdir

[root@laowang /]# cd gitdir/

[root@laowang gitdir]# git init

Initialized empty Git repository in /gitdir/.git/

创建完版本库之后会多出一个隐藏文件

[root@laowang gitdir]# ls -a

.  ..  .git

1.3 版本库内添加/修改文件 并提交

[root@laowang gitdir]# touch file.txt           创建文件

 [root@laowang gitdir]# git add file.txt         添加到管理库

 [root@laowang gitdir]# git commit -m "add one file dor test"      提交

[master (root-commit) d042b99] add one file dor test

 0 files changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 file.txt                                这里显示创建一个文件

[root@laowang gitdir]# echo "test" >>./file.txt

[root@laowang gitdir]# git commit -m "add one word for test"

# On branch master

# Changed but not updated:

#   (use "git add <file>…" to update what will be committed)

#   (use "git checkout — <file>…" to discard changes in working directory)

#

# modified:   file.txt                                 这里显示修改的文件名

#

no changes added to commit (use "git add" and/or "git commit -a")        没有文件提交

1.3.1 查看状态

[root@laowang gitdir]# git status

# On branch master

# Changed but not updated:

#   (use "git add <file>…" to update what will be committed)

#   (use "git checkout — <file>…" to discard changes in working directory)

#

# modified:   file.txt

#

no changes added to commit (use "git add" and/or "git commit -a")

1.3.2 查看文件修改的内容 

[root@laowang gitdir]# git diff file.txt

diff –git a/file.txt b/file.txt

index 1153985..cf19221 100644

— a/file.txt

+++ b/file.txt

@@ -1,3 +1,3 @@

 test

 1234

-5678                                删除的内容

+789                                增加的内容

1.3.3 修改后提交

[root@laowang gitdir]# echo "0000">>file.txt

[root@laowang gitdir]# git diff file.txt

diff –git a/file.txt b/file.txt

index 1153985..2744a10 100644

— a/file.txt

+++ b/file.txt

@@ -1,3 +1,4 @@

 test

 1234

-5678

+789

+0000

[root@laowang gitdir]# git add file.txt

[root@laowang gitdir]# git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>…" to unstage)

#

# modified:   file.txt

#

提交:

[root@laowang gitdir]# git commit file.txt -m "add 0000"

[master ec76b27] add 0000

 1 files changed, 2 insertions(+), 1 deletions(-)

[root@laowang gitdir]# git status

# On branch master

nothing to commit (working directory clean)

1.4 版本的回退

放我们对一个文件进行多次修改之后,若是想查看之前的修改记录,光是靠回忆肯定是不靠谱的

版本查看

[root@laowang gitdir]# git log

commit ec76b27efc328da568f9462563848d89aaa25a54

Author: oldwang <18539641511@163.com>

Date:   Wed Sep 21 05:07:29 2016 +0800

 

    add 0000

 

commit 0ecd6c9c3a76c7028141ddc4242dcefa5f556c44

Author: oldwang <18539641511@163.com>

Date:   Wed Sep 21 05:01:23 2016 +0800

 

    add some numbel

 

commit d042b99b866063f7ed2594eea60d032e90402361

Author: oldwang <18539641511@163.com>

Date:   Wed Sep 21 04:42:19 2016 +0800

 

add one file dor test

若是嫌弃他们输出信息太多可以试试以下参数

[root@laowang gitdir]# git log –pretty=oneline

ec76b27efc328da568f9462563848d89aaa25a54 add 0000

0ecd6c9c3a76c7028141ddc4242dcefa5f556c44 add some numbel

d042b99b866063f7ed2594eea60d032e90402361 add one file dor test

1.4.1 回退

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100^比较容易数不过来,所以写成HEAD~100

现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:

[root@laowang gitdir]# git reset –hard HEAD^    回退到上一版本

HEAD is now at 0ecd6c9 add some numbel

[root@laowang gitdir]# cat file.txt

test

1234

5678

[root@laowang gitdir]# git log –pretty=oneline

0ecd6c9c3a76c7028141ddc4242dcefa5f556c44 add some numbel

d042b99b866063f7ed2594eea60d032e90402361 add one file dor test

1.4.2 回溯

首先找到要回溯版本的id

 

[root@laowang gitdir]# git reset –hard 0ecd6c9c

HEAD is now at 0ecd6c9 add some numbel

[root@laowang gitdir]# git log

commit 0ecd6c9c3a76c7028141ddc4242dcefa5f556c44

Author: oldwang <18539641511@163.com>

Date:   Wed Sep 21 05:01:23 2016 +0800

 

    add some numbel

 

commit d042b99b866063f7ed2594eea60d032e90402361

Author: oldwang <18539641511@163.com>

Date:   Wed Sep 21 04:42:19 2016 +0800

 

add one file dor test

1.4.3 id日志

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

Git中,总是有后悔药可以吃的。当你用$ git reset –hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPLcommit idGit提供了一个命令git reflog用来记录你的每一次命令:

[root@laowang gitdir]# git reflog

0ecd6c9 HEAD@{0}: 0ecd6c9c: updating HEAD

d042b99 HEAD@{1}: HEAD^: updating HEAD

0ecd6c9 HEAD@{2}: HEAD^: updating HEAD

ec76b27 HEAD@{3}: commit: add 0000

0ecd6c9 HEAD@{4}: commit: add some numbel

Ø 现在总结一下:

1HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id

2穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

3要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

1.5 Git的工作原理

Git的工作分为三块:工作区、缓存区(stage库(./git

QQ截图20161031113446.png

1.6 撤销修改

1.6.1 当文件被提交到缓存区之后,如果本地目录做了修改想要回退到缓存区的状态。

[root@laowang gitdir]# vim file.txt

[root@laowang gitdir]# cat file.txt

zxas

i will add it to stage

i had add somethoing

[root@laowang gitdir]# git checkout — file.txt

[root@laowang gitdir]# cat file.txt

zxas

i will add it to stage

1.6.2 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改

分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步git checkout — file

 

[root@laowang gitdir]# echo "add something" >>./file.txt

[root@laowang gitdir]# cat file.txt

zxas

i will add it to stage

add something

[root@laowang gitdir]# git add file.txt

[root@laowang gitdir]# git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>…" to unstage)

#

# modified:   file.txt

#

[root@laowang gitdir]# cat file.txt

zxas

i will add it to stage

add something

[root@laowang gitdir]# git reset HEAD file.txt

Unstaged changes after reset:

M file.txt

[root@laowang gitdir]# git status

# On branch master

# Changed but not updated:

#   (use "git add <file>…" to update what will be committed)

#   (use "git checkout — <file>…" to discard changes in working directory)

#

# modified:   file.txt

#

no changes added to commit (use "git add" and/or "git commit -a")

[root@laowang gitdir]# git checkout — file.txt

1.6.3 已经提交了不合适的修改到版本库时,想要撤销本次提交

本处参考版本回退

1.7 文件的删除

1.7.1 现在我们增加一个测试文件

[root@laowang gitdir]# touch test.filr

[root@laowang gitdir]# vim test.filr

[root@laowang gitdir]# git add test.filr

[root@laowang gitdir]# git commit -m "add a file for test"

-bash: dit: command not found

[root@laowang gitdir]# git commit -m "add a file for test"

[master 121fc12] add a file for test

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

 create mode 100644 test.filr

1.7.2 删除文件

[root@laowang gitdir]# git status

# On branch master

# Changed but not updated:

#   (use "git add/rm <file>…" to update what will be committed)

#   (use "git checkout — <file>…" to discard changes in working directory)

#

# deleted:    test.filr

#

no changes added to commit (use "git add" and/or "git commit -a")

状态告诉我们文件删除之后我们有两种选择:

1、 吧删除数据提交到版本库

2、 工作区回退到缓存区(就是文件没被删除之前)

现在你有两个选择,

1.7.3 从版本库中删除该文件,那就用命令git rm删掉,并且git commit

 

1.7.4 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

[root@laowang gitdir]# git checkout — test.filr

[root@laowang gitdir]# ls

file.txt  test.filr

[root@laowang gitdir]# cat test.filr

test somethinhg

1.8 分支

1.8.1 创建分支

创建分支dev

 

root@laowang gitdir]# git checkout -b dev

Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

git branch dev

 git checkout dev

Switched to branch 'dev'

1.8.2 查看分支

[root@laowang gitdir]# git branch

* dev

  Master

 

1.8.3 切换分支

[root@laowang gitdir]# git checkout master

Switched to branch 'master'

1.8.4 合并分支

git merge dev

git merge 是合并的命令 后面接合并的分支名,表示合并dev到当前分支

1.8.5 删除分支

合并之后,之前的分支可以删除了

[root@laowang gitdir]# git branch

  dev

* master

[root@laowang gitdir]# git branch -d dev

Deleted branch dev (was df323f3).

[root@laowang gitdir]# git branch

* master

1.8.6 小结

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

原创文章,作者:adminwang,如若转载,请注明出处:http://www.178linux.com/56397

(1)
adminwangadminwang
上一篇 2016-10-31
下一篇 2016-10-31

相关推荐

  • Linux基础之加密通讯过程详解

    加密通讯过程详解 第一阶段 客户端->服务器端 向服务器声明自己的加密通讯协议版本,ssl或者tls 支持的加密算法 支持的压缩算法 第二阶段 服务器端->客户端 向客户端确认使用的加密通讯协议版本 确认的加密方法 确认压缩方法 服务器端证书 第三阶段 客户端->服务器端 客户端验证服务器端证书 发证机构 证书完整性 证书持有者 证书有效期…

    2017-09-16
  • 删除并恢复

    1.删除/lib64/libc.so.6 ,并恢复之。 centos7.3:重启→进入救援模式→cd  lib64→cp libc.so.6  /mnt/sysimage/lib64 →exit,选择第二个白条(救援),即可恢复; centos6.9:重启→进入救援模式→cd  lib64→cp libc.so.6  …

    2017-06-11
  • 笔记–8.8 shell脚本编程

    shell编程注意事项  1,指令的执行是从上而下,从左而右的分析与执行  2,指令的下达时:指令,选项与参数之间的多个空白都会被忽略掉  3,空白行会被忽略掉,并且tab键所推开的空白同样视为空格键  4. 如果一行的内容太多,则可以使用『 \[Enter] 』来延伸至下一行  5,『 # 』可做为批注,任…

    Linux干货 2016-08-12
  • httpd 基础

      http(1) 开启httpd服务,注意selinux 和防火墙设置。出现错误查看系统日志和http错误日志。 进程间通信:IPC socket:套接字 IP:PORT Client <–> Server     Server: listen  &nb…

    Linux干货 2016-11-01
  • 马哥教育网络班22期第一周课程练习1-未闻花名

    一、cpu架构 计算机体系结构: 运算器、控制器(cpu还包含寄存器)、存储器(内存)、输入设备(键盘、硬盘等)、输出设备(显示器、硬盘等) cpu组成: 核心部件:运算器(加法器)、控制器()、寄存器(由于数据总线复用,为cpu保存现场,过程数据记录)。 辅助部件:一、二、三级缓存:弥合CPU和内存速率不匹配。频率控制器? 地址总线:内存寻址。 数据总线:…

    Linux干货 2016-08-15
  • Linux网络管理之网络配置管理和子网划分

    配置网卡信息 获取网卡的信息 dmesg | grep -i eth 获取网卡芯片信息 lspci | grep -i eth 查询IP信息 ifconfig显示IP信息    -a:显示包括未激活状态的网卡信息 重启网卡服务(每次配置完ip需要手动重启此服务) CentOS6: servcie network restart CentO…

    Linux干货 2016-09-07

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-02 15:47

    内容格式把握得很好,原理部分可以加入一些自己的理解,加油!