CentOS7上Git的安裝安裝使用

CentOS7平臺上Git的安裝使用

環境:CenoOS7
深刻理解git ,使用命令行操做html

Git的安裝

$ sudo  yum install git  -y
$ git --version

####深刻解析Git版本控制python

Day01

在進行開發以前咱們須要對git進行簡單配置,這樣便於管理代碼,知道是那我的提交的。git

$ git config --global user.name wutengbiao
$ git config --global user.email wutengbiao@sina.com
$ git config --global color.ui true                    #設置GIT的打印顏色

實際上咱們 上面的操做,使用git config --global命令 就是對.gitconfig 進行的操做,因此能夠直接打開.gitconfig修改和直接使用命令修改是同樣的效果github

$ cat ~/.gitconfig 
[user]
        name = wutengbiao
        email = wutengbiao@sina.com
[color]
        ui = true

一.建立本地庫repository
1.進入你須要進行本地化倉庫的目錄ide

$ cd /home/wtb/github/project
$ git init
Initialized empty Git repository in /home/wtb/github/project/.git/

以上這樣咱們就建立了一個空的Repository測試

二.克隆遠程庫ui

$ git clone https://github.com/kennethreitz/requests.git

####Day02idea

三.添加文件 和提交文件 添加文件命令行

$ git status                     #查看狀態
[root@bogon porject]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
$
$
$ vi code.py
# -*- coding:UTF-8 -*-
print "hello world "
print "hello world "
print "hi git "
$
$  git add code.py      #添加文件
$   git status     
$
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   code.py
#
[root@bogon porject]#

四.提交文件版本控制

$ git commit -m 'init commit'     不加-m 會打開vi 信息
[root@bogon porject]#  git commit -m 'init commit'                       
[master (root-commit) 5f2078a] init commit
 1 file changed, 6 insertions(+)
 create mode 100644 code.py
[root@bogon porject]# 

$ git status          #查看狀態
$ git status
# On branch master
nothing to commit, working directory clean
[root@bogon porject]# 
[root@bogon porject]# git status -s
[root@bogon porject]#                      沒有任何東西了

五.Git 工做流程圖

1.我先對code.py文件進行了修改,添加了一行信息,進行查看git status -s ;後面出現一個M. 2.如今把code.py git add 到了staging erea區域,進行查看git status -s ;最前面出現一個M出現. 3.如今我再次對code.py進行了修改保存,而後執行git status -s 就能夠看到兩個MM

vi code.py
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
print "hello world "
print "hello world "
print "hi git "
print "hi git "          //添加一行
$
$ git status -s      //查看
 M code.py
$
$ git add code.py   //add到 staging erea區域
$
如今再次修改code.py文件,而後保存   //在staging erea區域進行了修改
$
$ git status -s             
MM  code.py
$
$

注意:
第一個M 表示在staging area區域作了變化
第二個M表示working Directory區域作了變化

如今我執行 git add code.py .從working directory ->添加到 staging area區域. 這個時候 在執行git status -s 命令

$ git status -s
M  code.py
$

如今只剩下前面的一個M了

$  git commit -m 'updata'
[master 4df82c2] updata
 1 file changed, 2 insertions(+)
$ git status -s
$

到這來就表示三個文件多徹底相同了.

####Day03

1.查看working directory區域與 staging area區域 發生什麼變化 我再次修改了code.py文件,並保存以後查看

$ git status -s   #查看
 M list.py
$
上面看到的就是後面有一個M了,咱們working directory發生了變化,可使用git diff查看文件發生了什麼變化
$  git diff                      #查看究竟發生了什麼變化


$  git add list.py     #add文件到staging area區域
$  git status -s       #查看
M  list.py
$ 
上面看到的就是排在第一的M了,可使用git diff查看文件發生了什麼變化
$  git diff
$  
這時看不到任何變化了,表示 staging area區域  working Directory區域 徹底相同

2,查看staging area區域與history區域 發生什麼變化

$  git diff --staged
$

3.查看 workingDirectory 區域與 history區域 發生什麼變化

$  git diff HEAD
$  
$  git diff --stat HEAD     #查看
 list.py | 2 +-      #修改了2個地方,
 1 file changed, 1 insertion(+), 1 deletion(-) 刪除一行,增長一行
$ 
我如今對code.py進行了修改,而後查看
$ git diff  --stat   #比較
$ git status -s
MM list.py
$
$若是我如今進行 git commit -m 'new update'
$ git commit -m 'new update'
[master 08356f2] new update
 1 file changed, 1 insertion(+), 1 deletion(-)
$
$  git status -s
 M list.py        第一個M清空了,第二個M還在
$

$ git diff HEAD
$ git diff  --staged
$

描述:
由於我在code.py添加了1行,執行:git status -s 就會看到兩個MM, 可是我沒有把他add 到staging area區域 ,而直接執行了git commit -m 'new upate' 提交到了History區域, 這個時候working directory新添加的 1行並不會直接把他放到history以前的code.py 裏面去,而是在history裏面產生新的code.py,
圖形分析:

輸入圖片說明

####Day04

如何撤銷一個文件
若是一個文件git add 到了stoging area區域,如何撤銷文件.

$ git status -s 
 M list.py
$ 
$  git diff 
$ git add code.py    #把code.py放到了staging erea裏面
$ 
$  git status -s
M  code.py
$ 

====如今我想撤銷這個操做使用git reset命令======
$  git reset code.py
Unstaged changes after reset:
M       code.py         #意思是說從history區域取出code.py 覆蓋到,stoging area區域裏面的code.py
$ 

$  git status -s    #查看
 M list.py             #如今又回到了原來的狀態
$

若是我想把stoging area區域裏面的code.py取出來覆蓋到working directory區域的code.py 如何操做:

$  git status 
# On branch master
nothing to commit, working directory clean
$  cat list.py 
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hi git '
print 'hi hub'
$
$
如今我又修改了code.py這個文件  
$ vi list.py 
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-
  
print 'hi git '
print 'hi hub'
print 'one'
print 'two'
print 'three'
$
$ git checkout code.py
$ cat code.py
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hi git '
print 'hi hub'
$
如今又回到了 原來狀態.

若是我想把history區域裏面的code.py取出來覆蓋到working directory區域的code.py 如何操做:

比方說我如今又修改了一下文件

$ vi code.py
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world'
print 'hello world'
print 'hi git'

print 'hi git'       //添加四行
print 'hi git'
print 'hi git'
print 'hi git'

如今咱們來操做 ,history區域裏面的code.py取出來覆蓋到working directory區域的code.py

$ git checkout HEAD code.py
$  cat code.py 
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world'
print 'hello world'
print 'hi git'

如今又回到了 原來狀態.

==============================================================
如何從working directory區域 直接提交到history區域:

好比我如今對代碼最了一點修改

$ vi list.py 
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world'
print 'hello world'
print 'hi git'

print 'welcome to git '    //添加一行
$  
$ git status -s
 M list.py        //表示working directory 區域作了修改
$ 
$  git commit -am 'add new code'           //
[master beedb07] add new code
 1 file changed, 3 insertions(+)
$  git status -s   
$           
表示咱們已經提交成功

####Day05

如何在git 中刪除文件

$  ls
code.py  old.py  README.txt        // 好比我在history區域添加了old.py
$
$ git rm old.py         // 如今刪除old.py
rm 'old.py'
$
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    old.py
#
$ git status -s
D  old.py
$
$  git commit -m 'delete old.py'
[master 5642c5d] delete old.py
 1 file changed, 17 deletions(-)
 delete mode 100644 old.py
$
$ ls
code.py   README.txt  
$

好比我想刪除 stoging area區域 裏面的code.py,想保留working directory區域的code.py如何操做:

$
$ git rm --cached code.py
rm 'code.py'
$
$ ls
code.py   README.txt  
$
$  git status -s
D  code.py
?? code.py

 若是咱們如今想撤銷上面這個操做,如何操做呢:      

$ git reset code.py       //從history裏面吧code.py 覆蓋到staging erea裏面  
$ git status -s
$


git 裏面如何對對文件重命名,如何操做:   

$
$ git mv  README.txt   README.md
$ 
$ ls
code.py  README.md
$  git status -s
R README.txt  -> README.md
$
$ git commit -m 'rename README'    //提交
$ 
$

####day06

在開發的過程當中可能遇到不少的突發事件,好比我如今修改了code.py文件

$ vi list.py 
$ vi list.py 
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world'
print 'hello world'
print 'hi git'

print  'git study'         //添加了兩行
print  'git version'
$
$ git status -s      
 M list.py          //working directory 有修改
$

如今我又修改了  README.txt 文件
$ vi README.txt
 abcdefghijkmn
$
$  git status -s
 M code.py
 M README.txt
$
     我如今對文件進行code.py add 到staging erea區域   
$ git add code.py
$ git status -s
MM code.py
  M  README.txt  
$
$

若是在開發過程當中出現 作了不少複雜的修改,如今代碼改到一半,無法提交,沒有測試,可是以前代碼又出現了一個問題,須要緊急修改,如上問題處理      
$ vi code.py 
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world'
print 'hello world'
print 'hi git'

print  'git study'         //添加了兩行
print  'git version'
$
$
 咱們在這樣的狀況下就可使用git stash 來操做
$ git stash
Saved working directory and index state WIP on master: 21b9a6c rename  code.py
HEAD is now at 21b9a6c rename  code.py
$
$ git status
# On branch master
nothing to commit, working directory clean
$
  剛纔修改了不少東西,如今又恢復到了原始狀態
$ vi code.py 
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world'
print 'hello world'
print 'hi git'
$


這裏咱們就能夠吧須要緊急處理的代碼加進去,好比我這裏 少了兩個感嘆號

$ vi code.py 
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world  !'    //加上!號
print 'hello world  !'
print 'hi git'
$
$
$  git commit -am 'quick fix'
[master 7bfbb97] quick fix
 1 file changed, 3 insertions(+), 1 deletion(-)
$
$
如今 修改完了以後,我須要把以前的代碼都拿處理,至關於把以前收拾代碼的抽屜打開,
$ git stash list     //先查看
$ 
$  git stash pop
$
$ git status -s    //查看
$
$vi code.py
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world  !'    
print 'hello world  !'
print 'hi git'
print 'great ,git '
print 'git is fun'
$
$
$git commit -am 'update 2 files'      //提交

================================================================

####day07

history區分析

$ ls
code.py  REDAME.txt  docs         //增長了docs
$
$  tree.
├── code.py
├── docs
│   ├── code.html
│   └── index.html
└── README.txt

1 directory, 4 files
$
$ git log         查看日誌,能夠看到commit的編號
$

輸入圖片說明

$ 
$ git cat-file -t HEAD         //打印HEAD的指向
commit                              //表示指向了commit
$
$ git cat-file -p HEAD      //打印HEAD的內容
tree 34ae6325e61788f961bc966d769d898a194a9bab
parent 7bfbb97b720d85043c8475a3cdd559f46ee01e03
author wutengbiao <wutengbiao@sina.com> 1476977118 -0700
committer wutengbiao <wutengbiao@sina.com> 1476977118 -0700

add docs

$  git cat-file -t 34ae632 
tree                                //指向tree
$	 
$
$ git cat-file -p 34ae63
100644 blob d5e1e2a31e03b64702fc7017bad1495c370c73ab    code.py
100644 blob 23543ec40e22d3b460ce3133f91340b0d585322a    README.txt
100644 blob dfsdfdfec40e22d3b460ce3133f91340b0d5853gfd   docs
$
$ git  cat-file -p  dfsdfdf
100644 blob12we34ed31e03b64702fc7017bad1495c370c73ab    code.html
100644 blob 4r56r22d3b460ce3133f91340b0d585322a    index.html
$
$

==================================================================

day08

tree-ish 定位對象

$ ls  -A    //查看隱藏文件 
$ cd .git/
$
$ ll
total 32
drwxr-xr-x.  2 root root    6 Oct 18 07:01 branches
-rw-r--r--.  1 root root    3 Oct 21 08:45 COMMIT_EDITMSG
-rw-r--r--.  1 root root   92 Oct 18 07:01 config
-rw-r--r--.  1 root root   73 Oct 18 07:01 description
-rw-r--r--.  1 root root   23 Oct 18 07:01 HEAD
drwxr-xr-x.  2 root root 4096 Oct 18 07:01 hooks
-rw-r--r--.  1 root root  367 Oct 21 08:45 index
drwxr-xr-x.  2 root root   20 Oct 18 07:01 info
drwxr-xr-x.  3 root root   28 Oct 18 07:43 logs
drwxr-xr-x. 40 root root 4096 Oct 21 07:51 objects
-rw-r--r--.  1 root root   41 Oct 20 08:14 ORIG_HEAD
drwxr-xr-x.  4 root root   41 Oct 20 08:14 refs
$
查看 HEAD文件
$ cat HEAD
ref: refs/heads/master
$
$ tree refs/
refs/
├── heads
│   └── master
├── stash
└── tags

2 directories, 2 files
$
$ cat refs/heads/master 
b9ea1014735aae7cd0821df77e65627b7fb23af9     //哈希碼
$
$ 
$ git  cat-file -t  b9ea1014735aae7cd0821df77e65627b7fb23af9 
commit
$
$ git log  --oneline       //打印git commit 的 日誌信息
beedb07 add docs
7bfbb97 quick fix
5642c5d delete old.py
11660c4 new upate

因此咱們這個master的哈希碼就是指向beedb07 這個哈希值
$ 
$
$   git rev-parse HEAD               //表示指向HEAD的哈希碼
b9ea1014735aae7cd0821df77e65627b7fb23af9
$
$ git rev-parse  HEAD~            //表示指向第一個HEAD
$
$ git rev-parse  HEAD~4           //表示指向第四個HEAD
$
$
$git rev-parse  HEAD~4^{tree}     //打印tree的哈希碼
dfdfwe43735aae7cd0821df77e65627bdfdfs
$
$ git  cat-file -p  dfdfwe43735aae7cd0821df77e65627bdfdfs     //打印到內容
$
$
$ git cat-file -p HEAD~4:code.py
   或者
$ git show HEAD~4:code.py

####Day09 branch 分支

$  git branch      //列出因此的brach
$ * master
$git branch  tryideal       //建立一個名爲tryideal的brach
$
$git branch    
* master
  tryideal
表示當前咱們在 master branch 上.

//切換branch分支
$ git checkout tryideal
Switched to branch tryideal
$
$ git branch 
 master
* tryideal          //切換到了tryideal branch


//咱們來驗證 一下是否切換到了分支tryideal分支上
$ cd .git/
$cd refs/heads
$ ls 
master  tryideal
$
$cat *
b9ea1014735aae7cd0821df77e65627b7fb23af9 
b9ea1014735aae7cd0821df77e65627b7fb23af9 

打印出來的信息徹底相同
$ cd ../
$ cat HEAD
ref: refs/heads/tryideal

如今已經切換到了tryideal分支上

如圖:

輸入圖片說明

若是如今咱們又想切回到master分支上

$ git  checkout  master    //如今又切換到了master分支上  
$
$cat  .git/HEAD       //查看
ref: refs/heads/master

咱們如何刪除分支:

$ git branch  -d  tryideal     //刪除分支
Delete branch tryideal 
$ 
$ git branch
* master
$
$ ls

如何使用更簡便的方法進行建立分支和切換分支:

$ git branch 
* master
$ git  checkout  -b   tryideal    //快速建立分支切換分支
Switched to a new branch  'tryideal'
$
$ git branch 
 master
* tryideal

如今我修改一下code.py代碼

$  vi code.py
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world  !'    
print 'hello world  !'
print 'hi git'
print " new ideal"
$
$ git commit  -am 'new idea' 
$
如今我想切換回到mastrer分支
$ git  checkout  master       //切到master分支
Switched to branch 'master'
$
$git branch   
* master
  tryideal
$
$
$  git  checkout  -b   tryideal    //這樣刪除 會報錯 ,不容許刪除

$
$ git merge tryideal   //把tryidel新功能合併到master上面
$
  如今就能夠直接刪除 tryideal 分支
$ git branch  -d tryidea
delete branch tryideal 
$
$ git branch 
* master
$
$

Day09

分支的合併 描述如圖:

輸入圖片說明

如今如何把bugfix分支合併到master裏面去

$git branch 
* master
$ 
$ git chechout  -b bugfix    //建立bugfix
$ vi code.py                //第一次修改
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world  '  //修改!號    
print 'hello world  '   //修改!號    
print 'hi git'
print 'great git '
print 'git is fun'
print " new ideal"
$ git commit -am 'fix 2 bugs'
$
$ vi code.py      //第二次修改
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world  '      
print 'hello world  '       
print 'hi git ! ! !'        //修改
print 'great git '
print 'git is fun'
print " new ideal"
$
$ git commit -am 'fix 1 bugs'    //提交
$
 // 切換到master分支上
$
$
$ git chechout master 
$
$vi code.py
#!/usr/bin/env python
#  -*- coding:UTF-8 -*-

print 'hello world  ! '  
print 'hello world  ! '    
print 'hi git'
print 'great git '
print 'git is fun'
print " new ideal"
print  'yet another new feature'    // master分支上新加的內容
$
$ git commit -am " updata"
$
如今就須要把 bugfix 分支的代碼合併到master分支裏面
$
$ git  merge bugfix    //

$
$ git log          //能夠看到新建立的一個新的commit,咱們的 bugfix修改的代碼就合併到了裏面

$ git branch 
 bugfix
* master
$
$
如今就能夠把bugfix 這個分支刪除.
$ git branch -d bugfix     //刪除
$

圖形解析以下:

輸入圖片說明

1.爲了進行合併,先找到他們共同的部分c ,而後是e ,f
2.在建立g以前他先用c和f進行比較,比較完了以後建立一個pach
3.產生的pach 會應用到e上面,而後在產生g (three way merge)

經常使用的查看命令: git branch: 查看分支信息。檢查本身正工做在哪個分支 git branch –a: 查看本地和遠程的全部分支 git remote –v: 查看當前關聯的遠程庫及對應的名稱 git log: 查看提交的log信息 git status: 查看當前狀態 git remote show: 查看遠程庫的名稱

相關文章
相關標籤/搜索