一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

一個小時學(xué)會Git

 獵狐肥 2019-11-20

目錄

最近要與部門同事一起做技術(shù)分享,我選擇了Git,因為Git 是一種在全球范圍都廣受歡迎的版本控制系統(tǒng)。在開發(fā)過程中,為了跟蹤代碼,文檔,項目等信息中的變化,版本控制變得前所未有的重要。

一、版本控制概要 工作區(qū) 暫存區(qū) 本地倉庫 遠程倉庫

1.1、什么是版本控制

版本控制(Revision control)是一種在開發(fā)的過程中用于管理我們對文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。

  • 實現(xiàn)跨區(qū)域多人協(xié)同開發(fā)
  • 追蹤和記載一個或者多個文件的歷史記錄
  • 組織和保護你的源代碼和文檔
  • 統(tǒng)計工作量
  • 并行開發(fā)、提高開發(fā)效率
  • 跟蹤記錄整個軟件的開發(fā)過程
  • 減輕開發(fā)人員的負(fù)擔(dān),節(jié)省時間,同時降低人為錯誤

簡單說就是用于管理多人協(xié)同開發(fā)項目的技術(shù)。

沒有進行版本控制或者版本控制本身缺乏正確的流程管理,在軟件開發(fā)過程中將會引入很多問題,如軟件代碼的一致性、軟件內(nèi)容的冗余、軟件過程的事物性、軟件開發(fā)過程中的并發(fā)性、軟件源代碼的安全性,以及軟件的整合等問題。

1.2、常用術(shù)語

1)、倉庫(Repository)
受版本控制的所有文件修訂歷史的共享數(shù)據(jù)庫

2)、工作空間(Workspace)
本地硬盤或Unix 用戶帳戶上編輯的文件副本

3)、工作樹/區(qū)(Working tree)
工作區(qū)中包含了倉庫的工作文件。您可以修改的內(nèi)容和提交更改作為新的提交到倉庫。

4)、暫存區(qū)(Staging area)
暫存區(qū)是工作區(qū)用來提交更改(commit)前可以暫存工作區(qū)的變化。

5)、索引(Index)
索引是暫存區(qū)的另一種術(shù)語。

6)、簽入(Checkin)
將新版本復(fù)制回倉庫

7)、簽出(Checkout)
從倉庫中將文件的最新修訂版本復(fù)制到工作空間

8)、提交(Commit)
對各自文件的工作副本做了更改,并將這些更改提交到倉庫

9)、沖突(Conflict)
多人對同一文件的工作副本進行更改,并將這些更改提交到倉庫

10)、合并(Merge)
將某分支上的更改聯(lián)接到此主干或同為主干的另一個分支

11)、分支(Branch)
從主線上分離開的副本,默認(rèn)分支叫master

12)、鎖(Lock)
獲得修改文件的專有權(quán)限。

13)、頭(HEAD)
頭是一個象征性的參考,最常用以指向當(dāng)前選擇的分支。

14)、修訂(Revision)
表示代碼的一個版本狀態(tài)。Git通過用SHA1 hash算法表示的ID來標(biāo)識不同的版本。

15)、標(biāo)記(Tags)
標(biāo)記指的是某個分支某個特定時間點的狀態(tài)。通過標(biāo)記,可以很方便的切換到標(biāo)記時的狀態(tài)。

1.3、常見的版本控制器

主流的版本控制器有如下這些:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

版本控制產(chǎn)品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),現(xiàn)在影響力最大且使用最廣泛的是Git與SVN

1.4、版本控制分類

1.4.1、本地版本控制

記錄文件每次的更新,可以對每個版本做一個快照,或是記錄補丁文件,適合個人用,如RCS。

1.4.2、集中版本控制

所有的版本數(shù)據(jù)都保存在服務(wù)器上,協(xié)同開發(fā)者從服務(wù)器上同步更新或上傳自己的修改

所有的版本數(shù)據(jù)都存在服務(wù)器上,用戶的本地只有自己以前所同步的版本,如果不連網(wǎng)的話,用戶就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有數(shù)據(jù)都保存在單一的服務(wù)器上,有很大的風(fēng)險這個服務(wù)器會損壞,這樣就會丟失所有的數(shù)據(jù),當(dāng)然可以定期備份。代表產(chǎn)品:SVN、CVS、VSS

1.4.3、分布式版本控制

所有版本信息倉庫全部同步到本地的每個用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網(wǎng)時push到相應(yīng)的服務(wù)器或其他用戶那里。由于每個用戶那里保存的都是所有的版本數(shù)據(jù),只要有一個用戶的設(shè)備沒有問題就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲空間的占用

1.5、Git與SVN最主要區(qū)別

SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的,而工作的時候,用的都是自己的電腦,所以首先要從中央服務(wù)器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,對網(wǎng)絡(luò)帶寬要求較高。

 

Git是分布式版本控制系統(tǒng),沒有中央服務(wù)器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯(lián)網(wǎng)了,因為版本都在自己電腦上。協(xié)同的方法是這樣的:比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

二、Git安裝與配置

2.1、什么是Git

Git是目前世界上最先進的分布式版本控制系統(tǒng)。

Git是免費、開源的

最初Git是為輔助 Linux 內(nèi)核開發(fā)的,來替代 BitKeeper

作者:Linux和Git之父李納斯·托沃茲(Linus Benedic Torvalds)1969、芬蘭

優(yōu)點:

  • 適合分布式開發(fā),強調(diào)個體。
  • 公共服務(wù)器壓力和數(shù)據(jù)量都不會太大。
  • 速度快、靈活。
  • 任意兩個開發(fā)者之間可以很容易的解決沖突。
  • 離線工作。

缺點:

  • 模式上比SVN更加復(fù)雜。
  • 不符合常規(guī)思維。
  • 代碼保密性差,一旦開發(fā)者把整個庫克隆下來就可以完全公開所有代碼和版本信息。

官網(wǎng)https:///

源碼: https://github.com/git/git/

2.2、搭建Git工作環(huán)境

2.2.1、下載Git

打開 git官網(wǎng),下載git對應(yīng)操作系統(tǒng)的版本。

選擇版本:

這里我選擇下載64-bit Git for Windows Setup

2.2.2、安裝Git

選擇安裝配置信息

一直Next默認(rèn)就好了,如果需要設(shè)置就要仔細(xì)讀一下安裝界面上的選項。

2.2.3、啟動Git

安裝成功后在開始菜單中會有Git項,菜單下有3個程序:

Git Bash:Unix與Linux風(fēng)格的命令行,使用最多,推薦最多

與DOS風(fēng)格的命令有些區(qū)別,不習(xí)慣可以選擇Git CMD

Git CMD:Windows風(fēng)格的命令行

Git GUI:圖形界面的Git,不建議初學(xué)者使用,盡量先熟悉常用命令

點擊Create New Repository可以直接創(chuàng)建一個新的倉庫。

2.2.4、Linux與Mac OS安裝Git

Linux安裝Git:sudo apt-get install git 命令行就可以安裝了。

Mac OS安裝Git: https:///download/mac,下載雙擊.pkg安裝

2.2.5、Bash基本操作命令

~就是home

進入Bash默認(rèn)位置,注意標(biāo)題欄

1)、cd : 改變目錄。

  cd ~ 回Home(windows是當(dāng)前用戶所在目錄)

  

2)、cd . . 回退到上一個目錄,直接cd進入默認(rèn)目錄

3)、pwd : 顯示當(dāng)前所在的目錄路徑。

4)、ls(ll): 都是列出當(dāng)前目錄中的所有文件,只不過ll(兩個ll)列出的內(nèi)容更為詳細(xì)。

5)、touch : 新建一個文件 如 touch index.js 就會在當(dāng)前目錄下新建一個index.js文件。

6)、rm: 刪除一個文件, rm index.js 就會把index.js文件刪除。

7)、mkdir: 新建一個目錄,就是新建一個文件夾。

8)、rm -r : 刪除一個文件夾, rm -r src 刪除src目錄, 好像不能用通配符。

9)、mv 移動文件, mv index.html src index.html 是我們要移動的文件, src 是目標(biāo)文件夾,當(dāng)然, 這樣寫,必須保證文件和目標(biāo)文件夾在同一目錄下。

10)、reset 重新初始化終端/清屏。

11)、clear 清屏。

12)、history 查看命令歷史。

13)、help 幫助。

14)、exit 退出。

15)、#表示注釋

16)、輸出與注釋

17)、創(chuàng)建文件

復(fù)制代碼
小于號:命令默認(rèn)從鍵盤獲得的輸入,改成從文件,或者其它打開文件以及設(shè)備輸入

>> 是追加內(nèi)容

> 是覆蓋原有內(nèi)容
復(fù)制代碼

 18、顯示文件內(nèi)容 cat

 

2.3、Git配置 - git config

2.3.1、查看配置 - git config -l

使用git config -l 可以查看現(xiàn)在的git環(huán)境詳細(xì)配置

查看不同級別的配置文件:

復(fù)制代碼
#查看系統(tǒng)config
git config --system --list
  
#查看當(dāng)前用戶(global)配置
git config --global  --list
 
#查看當(dāng)前倉庫配置信息
git config --local  --list
復(fù)制代碼

2.3.2、Git配置文件分類

Windows系統(tǒng)中,Git在$HOME目錄中查找.gitconfig文件(一般位于C:\Documents and Settings$USER下)

Git相關(guān)的配置文件有三個:

1)、 /etc/gitconfig:包含了適用于系統(tǒng)所有用戶和所有項目的值。(Win:C:\Program Files\Git\mingw64\etc\gitconfig) --system 系統(tǒng)級

 

2)、~/.gitconfig:只適用于當(dāng)前登錄用戶的配置。(Win:C:\Users\Administrator\.gitconfig)  --global 全局

3)、位于git項目目錄中的.git/config:適用于特定git項目的配置。(Win:C:\gitProject) --local當(dāng)前項目

注意:對于同一配置項,三個配置文件的優(yōu)先級是1<2<3

這里可以直接編輯配置文件,通過命令設(shè)置后會響應(yīng)到這里。

2.3.3、設(shè)置用戶名與郵箱(用戶標(biāo)識,必要)

當(dāng)你安裝Git后首先要做的事情是設(shè)置你的用戶名稱和e-mail地址。這是非常重要的,因為每次Git提交都會使用該信息。它被永遠的嵌入到了你的提交中:

   $ git config --global user.name "zhangguo"  #名稱
   $ git config --global user.email zhangguo@qq.com   #郵箱

只需要做一次這個設(shè)置,如果你傳遞了--global 選項,因為Git將總是會使用該信息來處理你在系統(tǒng)中所做的一切操作。如果你希望在一個特定的項目中使用不同的名稱或e-mail地址,你可以在該項目中運行該命令而不要--global選項。 總之--global為全局配置,不加為某個項目的特定配置

2.3.4、添加或刪除配置項

1)、添加配置項 
git config [--local|--global|--system]  section.key value
[--local|--global|--system]  #可選的,對應(yīng)本地,全局,系統(tǒng)不同級別的設(shè)置,請看2.3.2
section.key #區(qū)域下的鍵
value #對應(yīng)的值

--local 項目級

--global 當(dāng)前用戶級

--system 系統(tǒng)級 

例如我們要在student區(qū)域下添加一個名稱為height值為198的配置項,執(zhí)行結(jié)果如下:

2)、刪除配置項 

git config [--local|--global|--system] --unset section.key

 將系統(tǒng)級的height配置項移除

2.3.5、更多配置項

復(fù)制代碼
git config --global color.ui true   #打開所有的默認(rèn)終端著色
git config --global alias.ci commit   #別名 ci 是commit的別名
[alias]  
co = checkout  
ci = commit  
st = status  
pl = pull  
ps = push  
dt = difftool  
l = log --stat  
cp = cherry-pick  
ca = commit -a  
b = branch 

user.name  #用戶名
user.email  #郵箱
core.editor  #文本編輯器  
merge.tool  #差異分析工具  
core.paper "less -N"  #配置顯示方式  
color.diff true  #diff顏色配置  
alias.co checkout  #設(shè)置別名
git config user.name  #獲得用戶名
git config core.filemode false  #忽略修改權(quán)限的文件  
復(fù)制代碼

所有config命令參數(shù)

復(fù)制代碼
語法: git config [<options>]        
        
文件位置        
    --global                  #use global config file 使用全局配置文件
    --system                  #use system config file 使用系統(tǒng)配置文件
    --local                   #use repository config file    使用存儲庫配置文件
    -f, --file <file>         #use given config file    使用給定的配置文件
    --blob <blob-id>          #read config from given blob object    從給定的對象中讀取配置
        
動作        
    --get                     #get value: name [value-regex]    獲得值:[值]名[正則表達式]
    --get-all                 #get all values: key [value-regex]    獲得所有值:[值]名[正則表達式]
    --get-regexp          #get values for regexp: name-regex [value-regex]    得到的值根據(jù)正則
    --get-urlmatch            #get value specific for the URL: section[.var] URL    為URL獲取特定的值
    --replace-all             #replace all matching variables: name value [value_regex]    替換所有匹配的變量:名稱值[ value_regex ]
    --add                     #add a new variable: name value    添加一個新變量:name值
    --unset                   #remove a variable: name [value-regex]    刪除一個變量名[值]:正則表達式
    --unset-all               #remove all matches: name [value-regex]    刪除所有匹配的正則表達式:名稱[值]
    --rename-section          #rename section: old-name new-name    重命名部分:舊名稱 新名稱
    --remove-section          #remove a section: name    刪除部分:名稱
    -l, --list                #list all    列出所有
    -e, --edit            #open an editor    打開一個編輯器
    --get-color               #find the color configured: slot [default]    找到配置的顏色:插槽[默認(rèn)]
    --get-colorbool           #find the color setting: slot [stdout-is-tty]    發(fā)現(xiàn)顏色設(shè)置:槽[ stdout是TTY ]
        
類型        
    --bool                    #value is "true" or "false"    值是“真”或“假”。
    --int                     #value is decimal number    值是十進制數(shù)。
    --bool-or-int             #value is --bool or --int    值--布爾或int
    --path                    #value is a path (file or directory name)    值是路徑(文件或目錄名)
        
其它        
    -z, --null                #terminate values with NUL byte    終止值與null字節(jié)
    --name-only               #show variable names only    只顯示變量名
    --includes                #respect include directives on lookup    尊重包括查找指令
    --show-origin             #show origin of config (file, standard input, blob, command line)    顯示配置(文件、標(biāo)準(zhǔn)輸入、數(shù)據(jù)塊、命令行)的來源
復(fù)制代碼

三、Git理論基礎(chǔ)

3.1、工作區(qū)域

Git本地有三個工作區(qū)域:工作目錄(Working Directory)、暫存區(qū)(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠程的git倉庫(Remote Directory)就可以分為四個工作區(qū)域。文件在這四個區(qū)域之間的轉(zhuǎn)換關(guān)系如下:

  • Workspace:工作區(qū),就是你平時存放項目代碼的地方
  • Index / Stage:暫存區(qū),用于臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息
  • Repository:倉庫區(qū)(或本地倉庫),就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉庫的版本
  • Remote:遠程倉庫,托管代碼的服務(wù)器,可以簡單的認(rèn)為是你項目組中的一臺電腦用于遠程數(shù)據(jù)交換

本地的三個區(qū)域確切的說應(yīng)該是git倉庫中HEAD指向的版本

  • Directory:使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作空間和Git的管理空間。
  • WorkSpace:需要通過Git進行版本控制的目錄和文件,這些目錄和文件組成了工作空間。
  • .git:存放Git管理信息的目錄,初始化倉庫的時候自動創(chuàng)建。
  • Index/Stage:暫存區(qū),或者叫待提交更新區(qū),在提交進入repo之前,我們可以把所有的更新放在暫存區(qū)。
  • Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當(dāng)前的開發(fā)分支(branch)。
  • Stash:隱藏,是一個工作狀態(tài)保存棧,用于保存/恢復(fù)WorkSpace中的臨時狀態(tài)。

3.2、工作流程

git的工作流程一般是這樣的:

1、在工作目錄中添加、修改文件;

2、將需要進行版本管理的文件放入暫存區(qū)域;

3、將暫存區(qū)域的文件提交到git倉庫。

因此,git管理的文件有三種狀態(tài):已修改(modified),已暫存(staged),已提交(committed)

3.3、圖解教程

個人認(rèn)為Git的原理相比別的版本控制器還是復(fù)雜一些的,有一份圖解教程比較直觀:

圖解教程英文原版

圖解教程中文版

四、Git操作

4.1、創(chuàng)建工作目錄與常用指令

工作目錄(WorkSpace)一般就是你希望Git幫助你管理的文件夾,可以是你項目的目錄,也可以是一個空目錄,建議不要有中文。

日常使用只要記住下圖6個命令:

4.2、獲得GIT倉庫

創(chuàng)建本地倉庫的方法有兩種:一種是創(chuàng)建全新的倉庫,另一種是克隆遠程倉庫。

4.2.1、創(chuàng)建全新倉庫

需要用GIT管理的項目的根目錄執(zhí)行:

# 在當(dāng)前目錄新建一個Git代碼庫
$ git init

執(zhí)行:

結(jié)果:

 

執(zhí)行后可以看到,僅僅在項目目錄多出了一個.git目錄,關(guān)于版本等的所有信息都在這個目錄里面。

當(dāng)然如果使用如下命令,可以把創(chuàng)建目錄與倉庫一起完成:

# 新建一個目錄,將其初始化為Git代碼庫
$ git init [project-name]

 執(zhí)行命令與運行結(jié)果:

4.2.2、克隆遠程倉庫

 另一種方式是克隆遠程目錄,由于是將遠程服務(wù)器上的倉庫完全鏡像一份至本地,而不是取某一個特定版本,所以用clone而不是checkout,語法格式如下:

# 克隆一個項目和它的整個代碼歷史(版本信息)
$ git clone [url]

執(zhí)行:

比如我們要從克隆的遠程倉庫托管在github上,地址為:https://github.com/zhangguo5/SuperPlus.git,這是一個公開的項目

結(jié)果:

4.3、GIT文件操作

版本控制就是對文件的版本控制,要對文件進行修改、提交等操作,首先要知道文件當(dāng)前在什么狀態(tài),不然可能會提交了現(xiàn)在還不想提交的文件,或者要提交的文件沒提交上。GIT不關(guān)心文件兩個版本之間的具體差別,而是關(guān)心文件的整體是否有改變,若文件被改變,在添加提交時就生成文件新版本的快照,而判斷文件整體是否改變的方法就是用SHA-1算法計算文件的校驗和

4.3.1、文件4種狀態(tài)

  • Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)?code>Staged.

  • Unmodify: 文件已經(jīng)入庫, 未修改, 即版本庫中的文件快照內(nèi)容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變?yōu)?code>Modified. 如果使用git rm移出版本庫, 則成為Untracked文件

  • Modified: 文件已修改, 僅僅是修改, 并沒有進行其他的操作. 這個文件也有兩個去處, 通過git add可進入暫存staged狀態(tài), 使用git checkout 則丟棄修改過, 返回到unmodify狀態(tài), 這個git checkout即從庫中取出文件, 覆蓋當(dāng)前修改

  • Staged: 暫存狀態(tài). 執(zhí)行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify狀態(tài). 執(zhí)行git reset HEAD filename取消暫存, 文件狀態(tài)為Modified

4.3.2、查看文件狀態(tài)

上面說文件有4種狀態(tài),通過如下命令可以查看到文件的狀態(tài):

復(fù)制代碼
#查看指定文件狀態(tài)
git status [filename]

#查看所有文件狀態(tài)
git status
復(fù)制代碼

命令:

結(jié)果:

foo.htm文件的狀態(tài)為untracked(未跟蹤),提示通過git add可以暫存

GIT在這一點做得很好,在輸出每個文件狀態(tài)的同時還說明了怎么操作,像上圖就有怎么暫存、怎么跟蹤文件、怎么取消暫存的說明。

4.3.3、添加文件與目錄

工作區(qū)(Working Directory)就是你在電腦里能看到的目錄。

版本庫(Repository)工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū),而是Git的版本庫。

Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD。

將untracked狀態(tài)的文件添加到暫存區(qū),語法格式如下:

復(fù)制代碼
# 添加指定文件到暫存區(qū)
$ git add [file1] [file2] ...

# 添加指定目錄到暫存區(qū),包括子目錄
$ git add [dir]

# 添加當(dāng)前目錄的所有文件到暫存區(qū)
$ git add .
復(fù)制代碼

執(zhí)行:

4.3.4、移除文件與目錄(撤銷add)

當(dāng)執(zhí)行如下命令時,會直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變

#直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變
git rm --cached <file>

執(zhí)行命令

通過重寫目錄樹移除add文件:

#如果已經(jīng)用add 命令把文件加入stage了,就先需要從stage中撤銷
git reset HEAD <file>...

當(dāng)執(zhí)行 “git reset HEAD” 命令時,暫存區(qū)的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。

示例:把f1.txt文件從暫存區(qū)撤回工作區(qū)

移除所有未跟蹤文件

#移除所有未跟蹤文件
#一般會加上參數(shù)-df,-d表示包含目錄,-f表示強制清除。
git clean [options] 

示例:

移除前:

執(zhí)行移除:

移除后:

復(fù)制代碼
#只從stage中刪除,保留物理文件
git rm --cached readme.txt 

#不但從stage中刪除,同時刪除物理文件
git rm readme.txt 

#把a.txt改名為b.txt
git mv a.txt b.txt 
復(fù)制代碼

當(dāng)執(zhí)行提交操作(git commit)時,暫存區(qū)的目錄樹寫到版本庫(對象庫)中,master 分支會做相應(yīng)的更新。即 master 指向的目錄樹就是提交時暫存區(qū)的目錄樹。

當(dāng)執(zhí)行 “git reset HEAD” 命令時,暫存區(qū)的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。

當(dāng)執(zhí)行 “git rm –cached <file>” 命令時,會直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。

當(dāng)執(zhí)行 “git checkout .” 或者 “git checkout — <file>” 命令時,會用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個操作很危險,會清除工作區(qū)中未添加到暫存區(qū)的改動。

當(dāng)執(zhí)行 “git checkout HEAD .” 或者 “git checkout HEAD <file>” 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個命令也是極具危險性的,因為不但會清除工作區(qū)中未提交的改動,也會清除暫存區(qū)中未提交的改 動。

4.3.5、查看文件修改后的差異

git diff用于顯示W(wǎng)orkSpace中的文件和暫存區(qū)文件的差異

用"git status"只能查看對哪些文件做了改動,如果要看改動了什么,可以用:

#查看文件修改后的差異
git diff [files]

命令:

 ---a表示修改之前的文件,+++b表示修改后的文件

#比較暫存區(qū)的文件與之前已經(jīng)提交過的文件
git diff --cached

也可以把WorkSpace中的狀態(tài)和repo中的狀態(tài)進行diff,命令如下:

#比較repo與工作空間中的文件差異
git diff HEAD~n

4.3.6、簽出

如果倉庫中已經(jīng)存在文件f4.txt,在工作區(qū)中對f4修改了,如果想撤銷可以使用checkout,簽出覆蓋

檢出命令git checkout是git最常用的命令之一,同時也是一個很危險的命令,因為這條命令會重寫工作區(qū)

語法:

復(fù)制代碼
#用法一
git checkout [-q] [<commit>] [--] <paths>...
#用法二
git checkout [<branch>]
#用法三
git checkout [-m] [[-b]--orphan] <new_branch>] [<start_point>]
復(fù)制代碼

<commit>是可選項,如果省略則相當(dāng)于從暫存區(qū)(index)進行檢出

復(fù)制代碼
$ git checkout branch
#檢出branch分支。要完成圖中的三個步驟,更新HEAD以指向branch分支,以及用branch  指向的樹更新暫存區(qū)和工作區(qū)。

$ git checkout
#匯總顯示工作區(qū)、暫存區(qū)與HEAD的差異。

$ git checkout HEAD
#同上

$ git checkout -- filename
#用暫存區(qū)中filename文件來覆蓋工作區(qū)中的filename文件。相當(dāng)于取消自上次執(zhí)行g(shù)it add filename以來(如果執(zhí)行過)的本地修改。

$ git checkout branch -- filename
#維持HEAD的指向不變。用branch所指向的提交中filename替換暫存區(qū)和工作區(qū)中相   應(yīng)的文件。注意會將暫存區(qū)和工作區(qū)中的filename文件直接覆蓋。

$ git checkout -- . 或?qū)懽?git checkout .
#注意git checkout 命令后的參數(shù)為一個點(“.”)。這條命令最危險!會取消所有本地的  #修改(相對于暫存區(qū))。相當(dāng)于用暫存區(qū)的所有文件直接覆蓋本地文件,不給用戶任何確認(rèn)的機會!

$ git checkout commit_id -- file_name
#如果不加commit_id,那么git checkout -- file_name 表示恢復(fù)文件到本地版本庫中最新的狀態(tài)。
復(fù)制代碼

示例: 

4.3.6、忽略文件

有些時候我們不想把某些文件納入版本控制中,比如數(shù)據(jù)庫文件,臨時文件,設(shè)計文件等

在主目錄下建立".gitignore"文件,此文件有如下規(guī)則:

  1. 忽略文件中的空行或以井號(#)開始的行將會被忽略。
  2. 可以使用Linux通配符。例如:星號(*)代表任意多個字符,問號(?)代表一個字符,方括號([abc])代表可選字符范圍,大括號({string1,string2,...})代表可選的字符串等。
  3. 如果名稱的最前面有一個感嘆號(!),表示例外規(guī)則,將不被忽略。
  4. 如果名稱的最前面是一個路徑分隔符(/),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略。
  5. 如果名稱的最后面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認(rèn)文件或目錄都忽略)。

如:

復(fù)制代碼
#為注釋
*.txt #忽略所有 .txt結(jié)尾的文件
!lib.txt #但lib.txt除外
/temp #僅忽略項目根目錄下的TODO文件,不包括其它目錄temp
build/ #忽略build/目錄下的所有文件
doc/*.txt #會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
復(fù)制代碼

更多規(guī)則請點這里

示例:

創(chuàng)建一個.gitignore文件忽視所有的日志文件

查看狀態(tài):

從上圖中可以看出2個日志文件并沒有添加到暫存區(qū),直接被忽視了。

針對各種語言與項目的Git忽視文件: https://github.com/kaedei/gitignore   https://github.com/github/gitignore

通用的java忽視文件:

復(fù)制代碼
# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www./en/download/help/error_hotspot.xml
hs_err_pid*
復(fù)制代碼

通用的Visual Studio開發(fā)項目忽視文件:

View Code

idea忽視文件:

復(fù)制代碼
.idea/
*.iml
out/
gen/
idea-gitignore.jar
resources/templates.list
resources/gitignore/*
build/
build.properties
junit*.properties
IgnoreLexer.java~
.gradle

/verification
復(fù)制代碼

 

4.3.7、提交

通過add只是將文件或目錄添加到了index暫存區(qū),使用commit可以實現(xiàn)將暫存區(qū)的文件提交到本地倉庫。

復(fù)制代碼
# 提交暫存區(qū)到倉庫區(qū)
$ git commit -m [message]

# 提交暫存區(qū)的指定文件到倉庫區(qū)
$ git commit [file1] [file2] ... -m [message]

# 提交工作區(qū)自上次commit之后的變化,直接到倉庫區(qū),跳過了add,對新文件無效
$ git commit -a

# 提交時顯示所有diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新變化
$ git commit --amend [file1] [file2] ...
復(fù)制代碼

示例:

提交前的狀態(tài)

提交:

提交后的狀態(tài):

從上圖中可以看出暫存區(qū)中沒有了bar.htm

修訂提交

如果我們提交過后發(fā)現(xiàn)有個文件改錯了,或者只是想修改提交說明,這時可以對相應(yīng)文件做出修改,將修改過的文件通過"git add"添加到暫存區(qū),然后執(zhí)行以下命令:

#修訂提交
git commit --amend

撤銷提交(commit)

原理就是放棄工作區(qū)和index的改動,同時HEAD指針指向前一個commit對象

#撤銷上一次的提交
git reset --hard HEAD~1

 要通過git log查看提交日志,也可直接指定提交編號或序號

示例:

撤銷提交
git revert <commit-id>
這條命令會把指定的提交的所有修改回滾,并同時生成一個新的提交。

4.3.8、日志與歷史

查看提交日志可以使用git log指令,語法格式如下:

#查看提交日志
git log [<options>] [<revision range>] [[\--] <path>…?]

示例:

"git log --graph"以圖形化的方式顯示提交歷史的關(guān)系,這就可以方便地查看提交歷史的分支信息,當(dāng)然是控制臺用字符畫出來的圖形。

"git log -1"則表示顯示1行。

使用history可以查看您在bash下輸入過的指令:

幾乎所有輸入過的都被記錄下來的,不愧是做版本控制的。

查看所有分支日志

"git reflog"中會記錄這個倉庫中所有的分支的所有更新記錄,包括已經(jīng)撤銷的更新。

4.3.9、查看文件列表

使用git ls-files指令可以查看指定狀態(tài)的文件列表,格式如下:

#查看指定狀態(tài)的文件
git ls-files [-z] [-t] [-v] (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])* (-[c|d|o|i|s|u|k|m])*

示例:

4.3.10、撤銷更新

1)、撤銷暫存區(qū)更新

使用"git add"把更新提交到了暫存區(qū)。這時"git status"的輸出中提示我們可以通過"git reset HEAD <file>..."把暫存區(qū)的更新移出到WorkSpace中

示例:f6已經(jīng)提交,工作區(qū)修改,暫存區(qū)修改,撤銷

2)、撤銷本地倉庫更新

使用git log查看提交日志

撤銷提交有兩種方式:使用HEAD指針使用commit id

在Git中,有一個HEAD指針指向當(dāng)前分支中最新的提交。當(dāng)前版本,我們使用"HEAD^",那么再錢一個版本可以使用"HEAD^^",如果想回退到更早的提交,可以使用"HEAD~n"。(也就是,HEAD^=HEAD~1,HEAD^^=HEAD~2)

git reset --hard HEAD^
git reset --hard HEAD~1
git reset --59cf9334cf957535cb328f22a1579b84db0911e5

示例:回退到添加f6

回退前:

回退后:

 

現(xiàn)在又想恢復(fù)被撤銷的提交可用"git reflog"查看倉庫中所有的分支的所有更新記錄,包括已經(jīng)撤銷的更新,撤銷方法與前面一樣。

git reset --hard HEAD@{7}
git reset --hard e0e79d7

--hard:撤銷并刪除相應(yīng)的更新

--soft:撤銷相應(yīng)的更新,把這些更新的內(nèi)容放到Stage中

4.3.11、刪除文件

1)、刪除未跟蹤文件

如果文件還是未跟蹤狀態(tài),直接刪除文件就可了,bash中使用rm可以刪除文件,示例如下:

2)、刪除已提交文件

 

-f 強制刪除,物理刪除了,同時刪除工作區(qū)和暫存區(qū)中的文件

撤銷刪除:

#to discard changes in working directory
git checkout -- <file>...

3)、刪除暫存區(qū)的文件,不刪除工作區(qū)的文件

 

使用git reset HEAD <file>...同樣可以實現(xiàn)上面的功能

4.3.12、文件操作小結(jié)

 Git很強大,很靈活,這是毋庸置疑的。但也正因為它的強大造成了它的復(fù)雜,因此會有很多奇奇怪怪的問題出現(xiàn),多用就好了。

4.4、GIT分支

分支在GIT中相對較難

分支就是科幻電影里面的平行宇宙,當(dāng)你正在電腦前努力學(xué)習(xí)Git的時候,另一個你正在另一個平行宇宙里努力學(xué)習(xí)SVN。

如果兩個平行宇宙互不干擾,那對現(xiàn)在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合并了,結(jié)果,你既學(xué)會了Git又學(xué)會了SVN!

分支在實際中有什么用呢?假設(shè)你準(zhǔn)備開發(fā)一個新功能,但是需要兩周才能完成,第一周你寫了50%的代碼,如果立刻提交,由于代碼還沒寫完,不完整的代碼庫會導(dǎo)致別人不能干活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風(fēng)險。

現(xiàn)在有了分支,就不用怕了。你創(chuàng)建了一個屬于你自己的分支,別人看不到,還繼續(xù)在原來的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開發(fā)完畢后,再一次性合并到原來的分支上,這樣,既安全,又不影響別人工作。

Git分支的速度非??臁?/p>

截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master分支。HEAD嚴(yán)格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當(dāng)前分支。

特性分支的圖示

git分支中常用指令:

復(fù)制代碼
# 列出所有本地分支
$ git branch

# 列出所有遠程分支
$ git branch -r

# 列出所有本地分支和遠程分支
$ git branch -a

# 新建一個分支,但依然停留在當(dāng)前分支
$ git branch [branch-name]

# 新建一個分支,并切換到該分支
$ git checkout -b [branch]

# 新建一個分支,指向指定commit
$ git branch [branch] [commit]

# 新建一個分支,與指定的遠程分支建立追蹤關(guān)系
$ git branch --track [branch] [remote-branch]

# 切換到指定分支,并更新工作區(qū)
$ git checkout [branch-name]

# 切換到上一個分支
$ git checkout -

# 建立追蹤關(guān)系,在現(xiàn)有分支與指定的遠程分支之間
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到當(dāng)前分支
$ git merge [branch]

# 選擇一個commit,合并進當(dāng)前分支
$ git cherry-pick [commit]

# 刪除分支
$ git branch -d [branch-name]

# 刪除遠程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
復(fù)制代碼

4.4.1、新建分支與切換分支

每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master分支。HEAD嚴(yán)格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當(dāng)前分支。
一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當(dāng)前分支,以及當(dāng)前分支的提交點:

每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長:

默認(rèn)分支是這樣的,master是主分支

git-br-initial

1)、新建一個分支,但依然停留在當(dāng)前分支,使用:$ git branch [branch-name]

切換分支到dev1后的結(jié)果:

關(guān)于分支廖雪峰解釋的比較清楚,我們引用一下

當(dāng)我們創(chuàng)建新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當(dāng)前分支在dev上:

git-br-create

你看,Git創(chuàng)建一個分支很快,因為除了增加一個dev指針,改改HEAD的指向,工作區(qū)的文件都沒有任何變化!

不過,從現(xiàn)在開始,對工作區(qū)的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而master指針不變:

git-br-dev-fd

假如我們在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最簡單的方法,就是直接把master指向dev的當(dāng)前提交,就完成了合并:

git-br-ff-merge

所以Git合并分支也很快!就改改指針,工作區(qū)內(nèi)容也不變!

合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支:

git-br-rm

動畫演示:

2)、切換分支,git branch <name>,如果name為-則為上一個分支

切換為上一個分支

3)、新建一個分支,并切換到該分支,$ git checkout -b [branch]

4)、新建一個分支,指向指定commit使用命令:$ git branch [branch] [commit]

 

上面創(chuàng)建了dev3分支且指向了master中首次提交的位置,切換到dev3查看日志如下:

master上本來有兩個提交記錄的,此時的dev3指向的是第1次提交的位置

 5)、新建一個分支,與指定的遠程分支建立追蹤關(guān)系使用命令:$ git branch --track [branch] [remote-branch]

4.4.2、查看分支

1)、列出所有本地分支使用$ git branch

2)、列表所有遠程分支使用$ git branch -r

3)、列出所有本地分支和遠程分支使用$ git branch -a

4.4.3、分支合并

合并指定分支到當(dāng)前分支使用指令$ git merge [branch]

這里的合并分支就是對分支的指針操作,我們先創(chuàng)建一個分支再合并到主分支:

這里的file11.txt主分支與dev6的內(nèi)容現(xiàn)在是不同的,因為在dev6中已被修改過,我們可以使用指令查看:

現(xiàn)在我們將dev6合并到主分支中去,從下圖中可以看出dev6中有一次提交,而master并沒有

合并后在master上查看file11.txt文件內(nèi)容與dev6上的內(nèi)容就一樣了,合并后dev6中多出的提交在master也擁有了。

4.4.4、解決沖突

如果同一個文件在合并分支時都被修改了則會引起沖突,如下所示:

提交前兩個分支的狀態(tài)

在dev6分支中同樣修改file11.txt

dev6與master分支中file11.txt文件都被修改且提交了,現(xiàn)在合并分支

提示沖突,現(xiàn)在我們看看file11.txt在master分支中的狀態(tài)

Git用<<<<<<<,=======,>>>>>>>標(biāo)記出不同分支的內(nèi)容,其中<<<HEAD是指主分支修改的內(nèi)容,>>>>>dev6 是指dev6上修改的內(nèi)容

解決的辦法是我們可以修改沖突文件后重新提交,請注意當(dāng)前的狀態(tài)產(chǎn)master | MERGING:

重新提交后沖突解決:

手動解決完沖突后就可以把此文件添 加到索引(index)中去,用git commit命令來提交,就像平時修改了一個文件 一樣。

git log --graph命令可以看到分支合并圖。

分支策略

master主分支應(yīng)該非常穩(wěn)定,用來發(fā)布新版本,一般情況下不允許在上面工作,工作一般情況下在新建的dev分支上工作,工作完后,比如上要發(fā)布,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來。

4.4.5、刪除分支

刪除本地分支可以使用命令:$ git branch -d [branch-name],-D(大寫)強制刪除

刪除遠程分支可以使用如下指令:

$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

-d表示刪除分支。分支必須完全合并在其上游分支,或者在HEAD上沒有設(shè)置上游

-r表示遠程的意思remotes,如果-dr則表示刪除遠程分支

4.5、Git GUI 操作

通過命令行可以深刻的理解Git,Git GUI或IDE插件卻可以更加直觀操作Git,常用的Git GUI有如下這些:

4.5.1、GitHub for Desktop

全球開發(fā)人員交友俱樂部提供的強大工具,功能完善,使用方便。對于使用GitHub的開發(fā)人員來說是非常便捷的工具。

GitHub for Desktop不帶三方合并工具,你必須自己手動解決沖突才可以。

– 免費
– 同時支持 Windows 和 Mac:對于需要經(jīng)常在不同的操作系統(tǒng)間切換的開發(fā)人員來說非常方便。
– 漂亮的界面:作為每天盯著看的工具,顏值是非常重要的
– 支持Pull Request:直接從客戶端提交PR,很方便
– Timeline 支持:直接在時間線上顯示每次提交的時間點和大小
– 支持git LFS:存儲大文件更加節(jié)省空間和高效
– 不支持三方合并:需要借助第三方工具才行

4.5.2、Source Tree

SourceTree是老牌的Git GUI管理工具了,也號稱是最好用的Git GUI工具。強大,功能豐富,基本操作和高級操作都設(shè)計得非常流暢,適合初學(xué)者上手,支持Git Flow。

– 免費
– 功能強大:無論你是新手還是重度用戶,SourceTree 都會讓你覺得很順手。對于非常重度用戶,Source Tree還支持自定義腳本的執(zhí)行。
– 同時支持 Windows 和 Mac 操作系統(tǒng)
– 同時支持 Git 和 Mercurial 兩種 VCS
– 內(nèi)置GitHub, BitBucket 和 Stash 的支持:直接綁定賬號即可操作遠程repo

4.5.3、TortoiseGit

小烏龜,SVN的超廣泛使用也使得這個超好用的Svn客戶端成了幾乎每個開發(fā)人員的桌面必備軟件。小烏龜只提供Windows版本,提供中文版支持的。

– 免費
– 只支持Windows操作系統(tǒng):與文件管理器的良好集成
– 中文界面
– 與TortoiseSVN一脈相承的操作體驗

4.5.4、Git集成Gui工具

安裝Git時會集成安裝Gui工具,在Git菜單下可以找到,特點是:免費、簡單、不需要額外安裝

4.6、IDE集成的Git客戶端

對于使用IDE進行開發(fā)的程序員來說,可以不離開常用的IDE就直接操作源代碼管理系統(tǒng)是最好的選擇,以下是我對幾個常見的IDE集成的git客戶端:

4.6.1、Eclipse – Egit

作為Java集成開發(fā)環(huán)境的代表,Eclipse內(nèi)置了egit這個插件來提供git的集成支持。實話實說,這個插件的功能非常豐富,無論是普通的clone, commit, pull/push操作;還是復(fù)雜一些的git flow都有支持。

4.6.2、Visual Studio – Git Integration & GitHub Extension

VS里面的Git支持已經(jīng)相當(dāng)?shù)耐晟啤V苯涌寺ithub上的repo

 

4.6.3、IntelliJ IDEA

4.7、幫助與代碼統(tǒng)計

1)、幫助文檔

完整的安裝了Git后有一個官方幫助,這是最權(quán)威的資料,方法如下:

比如我們要查看git commit的使用

執(zhí)行時會打開對應(yīng)的git幫助文檔,其實就在本地,當(dāng)然您也可以去官網(wǎng)在線搜索,地址是: https:///docs。

2)、信息查看與統(tǒng)計命令

復(fù)制代碼
#統(tǒng)計某人的代碼提交量,包括增加,刪除:
git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf 
"added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -

#倉庫提交者排名前 5(如果看全部,去掉 head 管道即可):
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5

#倉庫提交者(郵箱)排名前 5:這個統(tǒng)計可能不會太準(zhǔn),因為很多人有不同的郵箱,但會使用相同的名字
git log --pretty=format:%ae | gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }' | sort -u -n -r | head -n 5 

#貢獻者統(tǒng)計:
git log --pretty='%aN' | sort -u | wc -l

#提交數(shù)統(tǒng)計:
git log --oneline | wc -l 

# 顯示有變更的文件
$ git status

# 顯示當(dāng)前分支的版本歷史
$ git log

# 顯示commit歷史,以及每次commit發(fā)生變更的文件
$ git log --stat

# 搜索提交歷史,根據(jù)關(guān)鍵詞
$ git log -S [keyword]

# 顯示某個commit之后的所有變動,每個commit占據(jù)一行
$ git log [tag] HEAD --pretty=format:%s

# 顯示某個commit之后的所有變動,其"提交說明"必須符合搜索條件
$ git log [tag] HEAD --grep feature

# 顯示某個文件的版本歷史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]

# 顯示指定文件相關(guān)的每一次diff
$ git log -p [file]

# 顯示過去5次提交
$ git log -5 --pretty --oneline

# 顯示所有提交過的用戶,按提交次數(shù)排序
$ git shortlog -sn

# 顯示指定文件是什么人在什么時間修改過
$ git blame [file]

# 顯示暫存區(qū)和工作區(qū)的差異
$ git diff

# 顯示暫存區(qū)和上一個commit的差異
$ git diff --cached [file]

# 顯示工作區(qū)與當(dāng)前分支最新commit之間的差異
$ git diff HEAD

# 顯示兩次提交之間的差異
$ git diff [first-branch]...[second-branch]

# 顯示今天你寫了多少行代碼
$ git diff --shortstat "@{0 day ago}"

# 顯示某次提交的元數(shù)據(jù)和內(nèi)容變化
$ git show [commit]

# 顯示某次提交發(fā)生變化的文件
$ git show --name-only [commit]

# 顯示某次提交時,某個文件的內(nèi)容
$ git show [commit]:[filename]

# 顯示當(dāng)前分支的最近幾次提交
$ git reflog
復(fù)制代碼

示例:

五、遠程倉庫

Git是分布式版本控制系統(tǒng),同一個Git倉庫,可以分布到不同的機器上,但開發(fā)參與者必須在同一個網(wǎng)絡(luò)中,且必須有一個項目的原始版本,通常的辦法是讓一臺電腦充當(dāng)服務(wù)器的角色,每天24小時開機,其他每個人都從這個“服務(wù)器”倉庫克隆一份到自己的電腦上,并且各自把各自的提交推送到服務(wù)器倉庫里,也從服務(wù)器倉庫中拉取別人的提交。完全可以自己搭建一臺運行Git的服務(wù)器但現(xiàn)在更適合的做法是使用免費的托管平臺。

同時相較于傳統(tǒng)的代碼都是管理到本機或者內(nèi)網(wǎng)。 一旦本機或者內(nèi)網(wǎng)機器出問題,代碼可能會丟失,使用遠端代碼倉庫將永遠存在一個備份。同時也免去了搭建本地代碼版本控制服務(wù)的繁瑣。 云計算時代 Git 以其強大的分支和克隆功能,更加方便了開發(fā)者遠程協(xié)作。

5.1、托管平臺

Git代碼托管平臺,首先推薦的是GitHub,好多好的開源項目都來自GitHub,但是GitHub只能新建公開的Git倉庫,私有倉庫要收費,有時候訪問比較卡,如果你做的是一個開源項目,可以首選GitHub。下面推薦幾個比較好的Git代碼托管平臺:

5.1.1、GitHub

關(guān)于GItHub相信大家都有耳聞,我就不詳細(xì)介紹了。GitHub地址: https://github.com/,其首頁如圖:

5.1.2、Gitlab

對于有些人,提到GitHub就會自然的想到Gitlab,Gitlab支持無限的公有項目和私有項目。Gitlab地址: https://about./,其首頁截圖如圖:

5.1.3、Bitbucket

bitbucket免費支持5個開發(fā)成員的團隊創(chuàng)建無限私有代碼托管庫。bitbucket地址:

5.1.4、開源中國代碼托管

開源中國一個賬號最多可以創(chuàng)建1000個項目,包含公有和私有,開源中國代碼托管地址: http://git.oschina.net/,其首頁如圖:

5.1.5、(推薦)

談到,首先必須提的是速度快,功能與開源中國相似,同樣一個賬號最多可以創(chuàng)建1000個項目(5個私有),也支持任務(wù)的創(chuàng)建等。地址: https:///

我個人比較推薦Coding.net、GItHub。

當(dāng)然還有許多,如CSDN,百度,阿里等,歡迎大家比較后推薦。

選擇國外的主機請考慮網(wǎng)速,選擇國內(nèi)的主機請考慮穩(wěn)定與安全性。

5.2、申請賬號與設(shè)置

因為免費,可以創(chuàng)建私有項目,且速度不錯,這里我們以為托管平臺完成遠程倉庫的賬號申請與操作。

5.2.1、申請賬號

1)、打開 https:///,點擊右上角的注冊按鈕:

 2)、填寫好注冊信息通過郵箱或手機驗證后注冊就成功了。登錄到個人首頁。

如果是QQ郵箱請注意激活郵件可能會被當(dāng)著垃圾郵件,到垃圾箱中可以找到。

5.2.2、創(chuàng)建項目

登錄成功后,點擊左側(cè)菜單項目,點擊加號新建項目,這里創(chuàng)建的是一個公開項目,沒有Readme.md、許可證與忽視文件,原因是如果你本地已經(jīng)有一個項目了,想提交到遠程倉庫而新創(chuàng)建的3個文件本地沒有,當(dāng)然有辦法但初學(xué)避免麻煩這里我就不添加這三個文件了,輸入相關(guān)信息后點擊創(chuàng)建就成功了。

5.2.3、提交源代碼到遠程倉庫

從上圖可以看出創(chuàng)建地址有兩種:

https 類型的:https://git./zhangguoGit/project7.git

SSH類型的:git@git.:zhangguoGit/project7.git

HTTPS(推薦輕量級用戶使用)

使用加密的網(wǎng)頁訪問通道讀寫倉庫,使用用戶名及密碼進行鑒權(quán)。 避免重復(fù)輸入密碼,查看 怎樣在每次 Push 時不用重復(fù)輸入密碼?

提示:Git 用戶名為 Coding 的賬戶郵箱或者個性后綴,密碼為 Coding 的賬戶密碼。
注意:HTTPS 方式 push 大文件可能引發(fā)錯誤,查看  Push 出錯怎么辦?

SSH(推薦資深用戶或經(jīng)常推送大型文件用戶使用)

SSH全稱(Secure SHell)是一種網(wǎng)絡(luò)協(xié)議,顧名思義就是非常安全的shell,主要用于計算機間加密傳輸。
使用加密通道讀寫倉庫,無單次上傳限制,需先設(shè)置 “賬戶 SSH 公鑰”,完成配對驗證。

導(dǎo)入倉庫可以將已存在的Git項目或SVN項目直接導(dǎo)入。

在命令行創(chuàng)建項目:

復(fù)制代碼
#1、創(chuàng)建目錄
mkdir project7

#2、進入目錄
cd project7

#3、初始化目錄為git項目
git init

#4、創(chuàng)建md文件追加內(nèi)容# project7(一級標(biāo)題)
echo "# project7" >> README.md

#5、添加說明文件到暫存區(qū)
git add README.md

#6、提交到本地倉庫并寫日志
git commit -m "first commit"

#7、添加遠程主機,主機名為origin 地址為https://git./zhangguoGit/project7.git
git remote add origin https://git./zhangguoGit/project7.git

#8、本地的master分支推送到origin主機,同時指定origin為默認(rèn)主機,后面就可以不加任何參數(shù)使用git push了,-u 參數(shù)指定一個默認(rèn)主機
git push -u origin master
復(fù)制代碼

如果創(chuàng)建已經(jīng)創(chuàng)建則只需要第7步與第8步就好了。

5.2.4、Markdown文件(.md文件)

Markdown 是一種輕量級標(biāo)記語言,它允許人們“使用易讀易寫的純文本格式編寫文檔,然后轉(zhuǎn)換成有效的XHTML(或者HTML)文檔。

Markdown 語法的目標(biāo)是:成為一種適用于網(wǎng)絡(luò)的書寫語言。

1.標(biāo)題

# 一級標(biāo)題
## 二級標(biāo)題
### 三級標(biāo)題
#### 四級標(biāo)題
##### 五級標(biāo)題
###### 六級標(biāo)題

####### 七級標(biāo)題

效果:

2.列表

分為有序列表和無序列表。

有序列表

1. 1
2. 2
3. 3

無序列表

* 1
* 2
* 3

3.引用

> 這是引用

4.圖片和鏈接

兩者格式區(qū)別在于“ ! ”。

![圖片描述](圖片鏈接)

[鏈接描述](鏈接地址)

5.粗體和斜體

**這是粗體**

*這是斜體*

6.表格

| Tables | Are | Cool |
| ------------ |:------------:| -----:|
| col 3 is | right-aligned| $1600 |
| col 2 is | centered | $12 |
| zebra stripes| are neat | &1 |

7.代碼框

用``這個把代碼包裹起來

8.分割線

輸入***即可。

示例:

View Code

對應(yīng)的HTML:

View Code

結(jié)果:

在線實時預(yù)覽工具

5.3、遠程倉庫操作

申請到了Git遠程倉庫的賬號并創(chuàng)建了一個空的遠程倉庫現(xiàn)在我們就可以結(jié)合本地的倉庫與遠程倉庫一起協(xié)同工作了,模擬多人協(xié)同開發(fā),這里我們?nèi)渴褂妹钔瓿伞?/p>

5.3.1、常用操作指令

復(fù)制代碼
# 下載遠程倉庫的所有變動
$ git fetch [remote]

# 顯示所有遠程倉庫
$ git remote -v

# 顯示某個遠程倉庫的信息
$ git remote show [remote]

# 增加一個新的遠程倉庫,并命名
$ git remote add [shortname] [url]

# 取回遠程倉庫的變化,并與本地分支合并
$ git pull [remote] [branch]

# 上傳本地指定分支到遠程倉庫
$ git push [remote] [branch]

# 強行推送當(dāng)前分支到遠程倉庫,即使有沖突
$ git push [remote] --force

# 推送所有分支到遠程倉庫
$ git push [remote] --all

#簡單查看遠程---所有倉庫
git remote  (只能查看遠程倉庫的名字)
#查看單個倉庫 git remote show [remote-branch-name] #新建遠程倉庫 git remote add [branchname] [url] #修改遠程倉庫 git remote rename [oldname] [newname] #刪除遠程倉庫 git remote rm [remote-name] #獲取遠程倉庫數(shù)據(jù) git fetch [remote-name] (獲取倉庫所有更新,但不自動合并當(dāng)前分支) git pull (獲取倉庫所有更新,并自動合并到當(dāng)前分支) #上傳數(shù)據(jù),如git push origin master git push [remote-name] [branch]
復(fù)制代碼

5.3.2、git clone 克隆

遠程操作的第一步,通常是從遠程主機克隆一個版本庫,這時就要用到git clone命令。

$ git clone <版本庫的網(wǎng)址>

比如,克隆一個上課示例的版本庫。

$ git clone https://github.com/zhangguo5/AngularJS04_BookStore.git

該命令會在本地主機生成一個目錄,與遠程主機的版本庫同名。如果要指定不同的目錄名,可以將目錄名作為git clone命令的第二個參數(shù)。

$ git clone <版本庫的網(wǎng)址> <本地目錄名>

git clone支持多種協(xié)議,除了HTTP(s)以外,還支持SSH、Git、本地文件協(xié)議等,下面是一些例子。

復(fù)制代碼
$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git 
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/
復(fù)制代碼

SSH協(xié)議還有另一種寫法。

$ git clone [user@]example.com:path/to/repo.git/

通常來說,Git協(xié)議下載速度最快,SSH協(xié)議用于需要用戶認(rèn)證的場合。各種協(xié)議優(yōu)劣的詳細(xì)討論請參考 官方文檔

示例:

結(jié)果:

5.3.3、git remote

為了便于管理,Git要求每個遠程主機都必須指定一個主機名。git remote命令就用于管理主機名。

不帶選項的時候,git remote命令列出所有遠程主機。

$ git remote

 

使用-v選項,可以參看遠程主機的網(wǎng)址。

$ git remote -v

 

上面命令表示,當(dāng)前只有一臺遠程主機,叫做origin,以及它的網(wǎng)址。

克隆版本庫的時候,所使用的遠程主機自動被Git命名為origin。如果想用其他的主機名,需要用git clone命令的-o選項指定。

$ git clone -o WeUI https://github.com/Tencent/weui.git
$ git remote

 

上面命令表示,克隆的時候,指定遠程主機叫做WeUI。

git remote show命令加上主機名,可以查看該主機的詳細(xì)信息。

$ git remote show <主機名>

 

git remote add命令用于添加遠程主機。

$ git remote add <主機名> <網(wǎng)址>

 

git remote rm命令用于刪除遠程主機。

$ git remote rm <主機名>

 

git remote rename命令用于遠程主機的改名。

$ git remote rename <原主機名> <新主機名>

 

5.3.4、git fetch

一旦遠程主機的版本庫有了更新(Git術(shù)語叫做commit),需要將這些更新取回本地,這時就要用到git fetch命令。

$ git fetch <遠程主機名>

 

上面命令將某個遠程主機的更新,全部取回本地。

git fetch命令通常用來查看其他人的進程,因為它取回的代碼對你本地的開發(fā)代碼沒有影響。

默認(rèn)情況下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

$ git fetch <遠程主機名> <分支名>

 

比如,取回origin主機的master分支。

$ git fetch origin master

所取回的更新,在本地主機上要用"遠程主機名/分支名"的形式讀取。比如origin主機的master,就要用origin/master讀取。

git branch命令的-r選項,可以用來查看遠程分支,-a選項查看所有分支。

復(fù)制代碼
$ git branch -r
origin/master

$ git branch -a
* master
  remotes/origin/master
復(fù)制代碼

上面命令表示,本地主機的當(dāng)前分支是master,遠程分支是origin/master。

取回遠程主機的更新以后,可以在它的基礎(chǔ)上,使用git checkout命令創(chuàng)建一個新的分支。

$ git checkout -b newBrach origin/master

上面命令表示,在origin/master的基礎(chǔ)上,創(chuàng)建一個新分支。

此外,也可以使用git merge命令或者git rebase命令,在本地分支上合并遠程分支。

$ git merge origin/master
# 或者
$ git rebase origin/master

上面命令表示在當(dāng)前分支上,合并origin/master。

5.3.5、git pull

git pull命令的作用是,取回遠程主機某個分支的更新,再與本地的指定分支合并。它的完整格式稍稍有點復(fù)雜。

$ git pull <遠程主機名> <遠程分支名>:<本地分支名>

比如,取回origin主機的next分支,與本地的master分支合并,需要寫成下面這樣。

$ git pull origin next:master

如果遠程分支是與當(dāng)前分支合并,則冒號后面的部分可以省略。

$ git pull origin next

上面命令表示,取回origin/next分支,再與當(dāng)前分支合并。實質(zhì)上,這等同于先做git fetch,再做git merge。

$ git fetch origin
$ git merge origin/next

在某些場合,Git會自動在本地分支與遠程分支之間,建立一種追蹤關(guān)系(tracking)。比如,在git clone的時候,所有本地分支默認(rèn)與遠程主機的同名分支,建立追蹤關(guān)系,也就是說,本地的master分支自動"追蹤"origin/master分支。

Git也允許手動建立追蹤關(guān)系。

git branch --set-upstream master origin/next

上面命令指定master分支追蹤origin/next分支。

如果當(dāng)前分支與遠程分支存在追蹤關(guān)系,git pull就可以省略遠程分支名。

$ git pull origin

上面命令表示,本地的當(dāng)前分支自動與對應(yīng)的origin主機"追蹤分支"(remote-tracking branch)進行合并。

如果當(dāng)前分支只有一個追蹤分支,連遠程主機名都可以省略。

$ git pull

上面命令表示,當(dāng)前分支自動與唯一一個追蹤分支進行合并。

如果合并需要采用rebase模式,可以使用--rebase選項。

$ git pull --rebase <遠程主機名> <遠程分支名>:<本地分支名>

如果遠程主機刪除了某個分支,默認(rèn)情況下,git pull 不會在拉取遠程分支的時候,刪除對應(yīng)的本地分支。這是為了防止,由于其他人操作了遠程主機,導(dǎo)致git pull不知不覺刪除了本地分支。

但是,你可以改變這個行為,加上參數(shù) -p 就會在本地刪除遠程已經(jīng)刪除的分支。

$ git pull -p
# 等同于下面的命令
$ git fetch --prune origin 
$ git fetch -p

5.3.6、git push

git push命令用于將本地分支的更新,推送到遠程主機。它的格式與git pull命令相仿。

$ git push <遠程主機名> <本地分支名>:<遠程分支名>

注意,分支推送順序的寫法是<來源地>:<目的地>,所以git pull是<遠程分支>:<本地分支>,而git push是<本地分支>:<遠程分支>。

如果省略遠程分支名,則表示將本地分支推送與之存在"追蹤關(guān)系"的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建。

$ git push origin master

 

上面命令表示,將本地的master分支推送到origin主機的master分支。如果后者不存在,則會被新建。

如果省略本地分支名,則表示刪除指定的遠程分支,因為這等同于推送一個空的本地分支到遠程分支。

$ git push origin :master
# 等同于
$ git push origin --delete master

 

上面命令表示刪除origin主機的master分支。

如果當(dāng)前分支與遠程分支之間存在追蹤關(guān)系,則本地分支和遠程分支都可以省略。

$ git push origin

上面命令表示,將當(dāng)前分支推送到origin主機的對應(yīng)分支。

如果是新建分支第一次push,會提示:
  fatal: The current branch dev1 has no upstream branch.
  To push the current branch and set the remote as upstream, use
  git push --set-upstream origin dev1
  輸入這行命令,然后輸入用戶名和密碼,就push成功了。

  以后的push就只需要輸入git push origin

原因是:

復(fù)制代碼
#因為在git的全局配置中,有一個push.default屬性,其決定了git push操作的默認(rèn)行為。在Git 2.0之前,這個屬性的默認(rèn)被設(shè)為'matching',2.0之后則被更改為了'simple'。

#我們可以通過git version確定當(dāng)前的git版本(如果小于2.0,更新是個更好的選擇),通過git config --global push.default 'option'改變push.default的默認(rèn)行為(或者也可直接編輯~/.gitconfig文件)。

push.default 有以下幾個可選值:
nothing, current, upstream, simple, matching

其用途分別為:
nothing - push操作無效,除非顯式指定遠程分支,例如git push origin develop(我覺得。。??梢越o那些不愿學(xué)git的同事配上此項)。
current - push當(dāng)前分支到遠程同名分支,如果遠程同名分支不存在則自動創(chuàng)建同名分支。
upstream - push當(dāng)前分支到它的upstream分支上(這一項其實用于經(jīng)常從本地分支push/pull到同一遠程倉庫的情景,這種模式叫做central workflow)。
simple - simple和upstream是相似的,只有一點不同,simple必須保證本地分支和它的遠程
upstream分支同名,否則會拒絕push操作。
matching - push所有本地和遠程兩端都存在的同名分支。
因此如果我們使用了git2.0之前的版本,push.default = matching,git push后則會推送當(dāng)前分支代碼到遠程分支,而2.0之后,push.default = simple,如果沒有指定當(dāng)前分支的upstream分支,就會收到上文的fatal提示。
復(fù)制代碼

如果當(dāng)前分支只有一個追蹤分支,那么主機名都可以省略。

$ git push

如果當(dāng)前分支與多個主機存在追蹤關(guān)系,則可以使用-u選項指定一個默認(rèn)主機,這樣后面就可以不加任何參數(shù)使用git push。

$ git push -u origin master

上面命令將本地的master分支推送到origin主機,同時指定origin為默認(rèn)主機,后面就可以不加任何參數(shù)使用git push了。

不帶任何參數(shù)的git push,默認(rèn)只推送當(dāng)前分支,這叫做simple方式。此外,還有一種matching方式,會推送所有有對應(yīng)的遠程分支的本地分支。Git 2.0版本之前,默認(rèn)采用matching方法,現(xiàn)在改為默認(rèn)采用simple方式。如果要修改這個設(shè)置,可以采用git config命令。

$ git config --global push.default matching
# 或者
$ git config --global push.default simple

還有一種情況,就是不管是否存在對應(yīng)的遠程分支,將本地的所有分支都推送到遠程主機,這時需要使用--all選項。

$ git push --all origin

上面命令表示,將所有本地分支都推送到origin主機。

如果遠程主機的版本比本地版本更新,推送時Git會報錯,要求先在本地做git pull合并差異,然后再推送到遠程主機。這時,如果你一定要推送,可以使用--force選項。

$ git push --force origin 

上面命令使用--force選項,結(jié)果導(dǎo)致遠程主機上更新的版本被覆蓋。除非你很確定要這樣做,否則應(yīng)該盡量避免使用--force選項。

最后,git push不會推送標(biāo)簽(tag),除非使用--tags選項。

$ git push origin --tags

5.4、在命令行中同步本地倉庫示例

假定我們創(chuàng)建好了一個遠程倉庫地址為:https:///u/zhangguo5/p/project7/git,現(xiàn)在我們在本地創(chuàng)建一個項目并同步到遠程倉庫中。

1)、創(chuàng)建文件添加到暫存區(qū)

2)、提交到本地倉庫

3)、提交到遠程倉庫

添加遠程主機地址:

推送文件:

結(jié)果:

說明:這里我使用的是SSH方式提交的,所有并沒有讓我輸入用戶名與密碼,如果你使用https方式提交則要配置用戶名與郵箱,還要輸入密碼。

5.5、IDEA中Git的使用

工作中多人使用版本控制軟件協(xié)作開發(fā),常見的應(yīng)用場景歸納如下:

假設(shè)小組中有兩個人,組長蓋茨,組員艾倫

場景一:蓋茨創(chuàng)建項目并提交到遠程Git倉庫

場景二:艾倫從遠程Git倉庫上獲取項目源碼

場景三:艾倫修改了部分源碼,提交到遠程倉庫

場景四:蓋茨從遠程倉庫獲取艾倫的提交

場景五:艾倫接受了一個新功能的任務(wù),創(chuàng)建了一個分支并在分支上開發(fā)

場景六:艾倫把分支提交到遠程Git倉庫

場景七:蓋茨獲取艾倫提交的分支

場景八:蓋茨把分支合并到主干

下面來看以上各場景在IDEA中對應(yīng)的操作。

場景一:蓋茨創(chuàng)建項目并提交到遠程Git倉庫

在IDEA中配置Git

測試環(huán)境是否正常

創(chuàng)建好項目,這里創(chuàng)建了一個Maven項目,結(jié)構(gòu)如下,當(dāng)然可以是任意項目:

選擇VCS - > Enable Version Control Integration,允許將項目集成到版本控制器中

選擇版本控制器類型

完成后當(dāng)前項目就變成一個Git項目,是工作空間

點擊OK后創(chuàng)建完成本地倉庫,注意,這里僅僅是本地的。下面把項目源碼添加到本地倉庫。

下圖是Git與提交有關(guān)的三個命令對應(yīng)的操作,Add命令是把文件從IDE的工作目錄添加到本地倉庫的stage區(qū),Commit命令把stage區(qū)的暫存文件提交到當(dāng)前分支的倉庫,并清空stage區(qū)。Push命令把本地倉庫的提交同步到遠程倉庫。

IDEA中對操作做了一定的簡化,Commit和Push可以在一步中完成。

具體操作,在項目上點擊右鍵,選擇Git菜單,如果使用Add則將文件從工作空間提交到暫存庫,Commit Directory則是同時完成提交到暫存與本地倉庫。

 選擇要提交的文件,填寫消息

將本地倉庫的內(nèi)容提交到遠程倉庫

 定義遠程地址的別名

 

 輸入名稱與URL

 點擊push將本地倉庫的內(nèi)容推送到遠程服務(wù)器

 

 提示Push Successful就成功了

 提交后的遠程庫

 

場景二:艾倫從遠程Git倉庫上獲取項目源碼

即克隆項目,操作如下:

輸入蓋茨Push時填寫的遠程倉庫地址

填寫倉庫地址、要克隆到的父目錄與項目目錄

接下來按向?qū)Р僮?,即可把項目從遠程倉艾倫隆到本地倉庫和IDE工作區(qū)。

當(dāng)提示簽出成功點擊打開就可以看到項目了

下載到本地的文件

其它方法

場景三:艾倫修改了部分源碼,提交到遠程倉庫

這個操作和首次提交的流程基本一致,分別是 Add -> Commit -> Push。請參考場景一

 添加一個類,并提交

 

提交到本地倉庫

提交到遠程倉庫

場景四:蓋茨從遠程倉庫獲取艾倫的提交

獲取更新有兩個命令:Fetch和Pull,F(xiàn)etch是從遠程倉庫下載文件到本地的origin/master,然后可以手動對比修改決定是否合并到本地的master庫。Pull則是直接下載并合并。如果各成員在工作中都執(zhí)行修改前先更新的規(guī)范,則可以直接使用Pull方式以簡化操作。

選擇分支

場景五:艾倫接受了一個新功能的任務(wù),創(chuàng)建了一個分支并在分支上開發(fā)

建分支也是一個常用的操作,例如臨時修改bug、開發(fā)不確定是否加入的功能等,都可以創(chuàng)建一個分支,再等待合適的時機合并到主干。

創(chuàng)建流程如下:

選擇New Branch并輸入一個分支的名稱

創(chuàng)建完成后注意IDEA的右下角,如下圖,Git: dev表示已經(jīng)自動切換到dev分支,當(dāng)前工作在這個分支上。

點擊后彈出一個小窗口,在Local Branches中有其他可用的本地分支選項,點擊后選擇Checkout即可切換當(dāng)前工作的分支(見場景7操作切換其他分支)。

如下圖,點擊Checkout

注意,這里創(chuàng)建的分支僅僅在本地倉庫,如果想讓組長蓋茨獲取到這個分支,還需要提交到遠程倉庫。

場景六:艾倫把分支提交到遠程Git倉庫

切換到新建的分支,使用Push功能

提交到遠程

艾倫將新開發(fā)的功能提交到遠程

提交到遠程

場景七:蓋茨獲取艾倫提交的分支

使用Pull功能打開更新窗口,點擊Remote欄后面的刷新按鈕,會在Branches to merge欄中刷新出新的分支。這里并不想做合并,所以不要選中任何分支,直接點擊Pull按鈕完成操作。

 

更新后,再點擊右下角,可以看到在Remote Branches區(qū)已經(jīng)有了新的分支,點擊后在彈出的子菜單中選擇Checkout as new local branch,在本地倉庫中創(chuàng)建該分支。完成后在Local Branches區(qū)也會出現(xiàn)該分支的選項,可以按上面的方法,點擊后選擇Checkout切換。

切換遠程分支:

切換本地分支:

場景八:蓋茨把分支合并到主干

新功能開發(fā)完成,體驗很好,項目組決定把該功能合并到主干上。

切換到master分支,選擇Merge Changes

選擇要合并的分支,點擊Merge完成

六、作業(yè)與評分標(biāo)準(zhǔn)

作業(yè)要求:

1、申請一個遠程git賬號,創(chuàng)建一個倉庫

2、將本人第一次提升時提交的IDEA作業(yè)升級為一個git項目并提交到遠程倉庫中

3、在git bash下執(zhí)行: history > mylog.txt,并提交到遠程倉庫 (把本地執(zhí)行過的git指令導(dǎo)出到mylog.txt文件中)

提交內(nèi)容:

將您同步的遠程倉庫地址,如:https:///u/yourname/p/ideaproject/git 

發(fā)送到我的郵箱99510309#qq.com或在當(dāng)前博客下留言

提交時間:

2017-09-28 星期四 中午12:00前

七、資源與資料下載

資料鏈接: https://pan.baidu.com/s/1c20DVOW  密碼: p9ri

Git教程下載_王亮(大神)

 

示例1:

View Code

示例2:

View Code

示例3:

View Code

項目驗收標(biāo)準(zhǔn)

八、視頻

https://www.bilibili.com/video/av14813510/

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    免费在线观看激情小视频| 东京热电东京热一区二区三区| 国产成人综合亚洲欧美日韩| 国产一区二区三区成人精品| 国产色偷丝袜麻豆亚洲| 久久这里只精品免费福利| 亚洲欧美日韩在线看片| 日本高清一道一二三区四五区 | 九九热精品视频免费观看| 欧美激情视频一区二区三区| av一区二区三区天堂| 在线观看欧美视频一区| 日韩毛片视频免费观看| 美女激情免费在线观看| 人妻久久这里只有精品| 国产丝袜极品黑色高跟鞋| 亚洲熟妇中文字幕五十路| 日本成人三级在线播放| 日韩色婷婷综合在线观看| 成年人黄片大全在线观看| 99久久精品国产日本| 大香蕉伊人精品在线观看| 精品国产av一区二区三区不卡蜜| 国产超薄黑色肉色丝袜| 91人妻久久精品一区二区三区| 亚洲综合激情另类专区老铁性| 99日韩在线视频精品免费| 加勒比人妻精品一区二区| 在线精品首页中文字幕亚洲| 中文字幕一区久久综合| 国产熟女一区二区精品视频| 久久精品久久久精品久久| 91人人妻人人爽人人狠狠| 欧美三级不卡在线观线看| 欧美日韩中国性生活视频| 男人操女人下面国产剧情| 国产原创中文av在线播放| 婷婷九月在线中文字幕| 亚洲欧美国产中文色妇| 不卡在线播放一区二区三区| 亚洲精选91福利在线观看|