# cat /etc/redhat-releasegit
CentOS release 6.8 (Final)vim
# uname -r缓存
2.6.32-642.4.2.el6.x86_64bash
# uname -mapp
x86_64ide
能够直接经过源码安装。先从Git官网下载源码,而后解压,依次输入:./config
,make
,sudo make install
这几个命令安装就行了。测试
这里用的是yum安装url
[root@laowang ~]# rpm -qa gitspa
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
什么是版本库呢?版本库又名仓库,英文名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
[root@laowang gitdir]# touch file.txt 建立文件
[root@laowang gitdir]# git add file.txt 添加到管理库
[root@laowang gitdir]# git commit -m "addone file dor test" 提交
[master (root-commit) d042b99] add one filedor test
0files changed, 0 insertions(+), 0 deletions(-)
createmode 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 becommitted)
# (use "git checkout -- <file>..." to discard changes inworking directory)
#
# modified: file.txt 这里显示修改的文件名
#
no changes added to commit (use "gitadd" and/or "git commit -a") 没有文件提交
[root@laowang gitdir]# git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will becommitted)
# (use "git checkout -- <file>..." to discard changes inworking directory)
#
# modified: file.txt
#
no changes added to commit (use "gitadd" and/or "git commit -a")
[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 增长的内容
[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
1files changed, 2 insertions(+), 1 deletions(-)
[root@laowang gitdir]# git status
# On branch master
nothing to commit (working directory clean)
放咱们对一个文件进行屡次修改以后,如果想查看以前的修改记录,光是靠回忆确定是不靠谱的。
版本查看
[root@laowang gitdir]# git log
commit ec76b27efc328da568f9462563848d89aaa25a54
Author: oldwang <18539641511@163.com>
Date: WedSep 21 05:07:29 2016 +0800
add 0000
commit 0ecd6c9c3a76c7028141ddc4242dcefa5f556c44
Author: oldwang <18539641511@163.com>
Date: WedSep 21 05:01:23 2016 +0800
add somenumbel
commit d042b99b866063f7ed2594eea60d032e90402361
Author: oldwang <18539641511@163.com>
Date: WedSep 21 04:42:19 2016 +0800
add one file dor test
如果嫌弃他们输出信息太多能够试试如下参数
[root@laowang gitdir]# git log --pretty=oneline
ec76b27efc328da568f9462563848d89aaa25a54add 0000
0ecd6c9c3a76c7028141ddc4242dcefa5f556c44add some numbel
d042b99b866063f7ed2594eea60d032e90402361add one file dor test
首先,Git必须知道当前版本是哪一个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意个人提交ID和你的确定不同),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,固然往上100个版本写100个^
比较容易数不过来,因此写成HEAD~100
。
如今,咱们要把当前版本“appendGPL”回退到上一个版本“adddistributed”,就可使用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 somenumbel
d042b99b866063f7ed2594eea60d032e90402361 add onefile dor test
[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: WedSep 21 05:01:23 2016 +0800
add some numbel
commit d042b99b866063f7ed2594eea60d032e90402361
Author: oldwang <18539641511@163.com>
Date: WedSep 21 04:42:19 2016 +0800
add one file dor test
如今,你回退到了某个版本,关掉了电脑,次日早上就后悔了,想恢复到新版本怎么办?找不到新版本的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查看命令历史,以便肯定要回到将来的哪一个版本。
Git的工做分为三块:工做区、缓存区(stage)、库(./git)
[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
分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步git checkout -- file
[root@laowang gitdir]# echo "addsomething" >>./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 workingdirectory)
#
# modified: file.txt
#
no changes added to commit (use "git add"and/or "git commit -a")
[root@laowang gitdir]# git checkout -- file.txt
本处参考版本回退
[root@laowang gitdir]# touch test.filr
[root@laowang gitdir]# vim test.filr
[root@laowang gitdir]# git add test.filr
[root@laowang gitdir]# dit commit -m "add afile for test"
-bash: dit: command not found
[root@laowang gitdir]# git commit -m "add afile for test"
[master 121fc12] add a file for test
1 fileschanged, 1 insertions(+), 0 deletions(-)
create mode100644 test.filr
[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 workingdirectory)
#
# deleted: test.filr
#
no changes added to commit (use "git add"and/or "git commit -a")
状态告诉咱们文件删除以后咱们有两种选择:
一、 吧删除的数据提交到版本库
二、 吧工做区回退到缓存区(就是文件没被删除以前)
如今你有两个选择,
git rm
删掉,而且git commit
:
[root@laowang gitdir]# git checkout --test.filr
[root@laowang gitdir]# ls
file.txt test.filr
[root@laowang gitdir]# cat test.filr
test somethinhg
建立分支dev
root@laowang gitdir]# git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b参数表示建立并切换,至关于如下两条命令:
git branch dev
gitcheckout dev
Switched to branch 'dev'
[root@laowang gitdir]# git branch
* dev
Master
[root@laowang gitdir]# git checkout master
Switched to branch 'master'
git merge dev
git merge 是合并的命令 后面接合并的分支名,表示合并dev到当前分支
在合并以后,以前的分支就能够删除了
[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
Git鼓励大量使用分支:
查看分支:git branch
建立分支:git branch <name>
切换分支:git checkout <name>
建立+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>