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官网下载源码,然后解压,依次输入:./config,make,sudo 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
# (use "git checkout --
#
# 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
# (use "git checkout --
#
# 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
#
# 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 <[email protected]>
Date: Wed Sep 21 05:07:29 2016 +0800
add 0000
commit 0ecd6c9c3a76c7028141ddc4242dcefa5f556c44
Author: oldwang <[email protected]>
Date: Wed Sep 21 05:01:23 2016 +0800
add some numbel
commit d042b99b866063f7ed2594eea60d032e90402361
Author: oldwang <[email protected]>
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 <[email protected]>
Date: Wed Sep 21 05:01:23 2016 +0800
add some numbel
commit d042b99b866063f7ed2594eea60d032e90402361
Author: oldwang <[email protected]>
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 GPL的commit id。Git提供了一个命令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
现在总结一下:
1,HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
2,穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
3,要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
1.5 Git的工作原理
Git的工作分为三块:工作区、缓存区(stage)、库(./git)
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
#
# 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
# (use "git checkout --
#
# 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
# (use "git checkout --
#
# 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
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d