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安裝
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 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 <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.www58058.com/56397
內容格式把握得很好,原理部分可以加入一些自己的理解,加油!