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 ~]#anchor.gif 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 <[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 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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章