1. 程式人生 > >APP實用開發——版本控制Git使用總結

APP實用開發——版本控制Git使用總結

1. 什麼是Git?

這裡寫圖片描述

Git是一款免費、開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案
Git 是 Linux 發明者 Linus 開發的一款新時代的版本控制系統,這裡我只舉幾個例子來幫助你們理解。

熟悉程式設計的知道,我們在軟體開發中原始碼其實是最重要的,那麼對原始碼的管理變得異常重要:

比如為了防止程式碼的丟失,肯定本地機器與遠端伺服器都要存放一份,而且還需要有一套機制讓本地可以跟遠端同步;

又比如我們經常是好幾個人做同一個專案,都要對一份程式碼做更改,這個時候需要大家互不影響,又需要各自可以同步別人的程式碼;

又比如我們開發的時候免不了有bug,有時候剛釋出的功能就出現了嚴重的bug,這個時候需要緊急對程式碼進行還原;

又比如隨著我們版本迭代的功能越來越多,但是我們需要清楚的知道歷史每一個版本的程式碼更改記錄,甚至知道每個人歷史提交程式碼的情況;

等等等類似以上的情況,這些都是版本控制系統能解決的問題。所以說,版本控制是一種記錄一個或若干檔案內容變化,以便將來查閱特定版本修訂情況的系統,對於軟體開發領域來說版本控制是最重要的一環,而 Git 毫無疑問是當下最流行、最好用的版本控制系統。

使用Git進行版本控制有兩種方式,一是使用msysgit命令列方式,另一種則是使用圖形化工具TortoiseGit,但兩種方式都需安裝msysgit。

Git為了提高效率,對於沒有被修改的檔案,則不會重複儲存,而是建立一個連結指向之前儲存過的檔案。


在正式使用前,我們還需要弄清楚Git的三種重要模式,分別是已提交、已修改、已暫存。

已提交(committed):表示資料檔案已經順利提交到Git資料庫中。

已修改(modified):表示資料檔案已經被修改,但未被儲存到Git資料庫中。

已暫存(staged):表示資料檔案已經被修改,並會在下次提交時提交到Git資料庫中。

提交前的資料檔案可能會被隨意修改或丟失,但只要把檔案快照順利提交到Git資料庫中,那就可以完全放心了,流程為:

在工作目錄中修改資料檔案。

將檔案的快照放入暫存區域。

將暫存區域的檔案快照提交到Git倉庫中。

TortoiseGIT 是Git版本控制系統的一個免費開源客戶端,它是git版本控制的 Windows擴充套件。可以使你避免使用枯燥而且不方便的命令列。它完全嵌入 Windows Explorer,使用時只需在正常的窗口裡點選右鍵操作就可以了。

TortoiseGIT

Git的優勢: (說到優勢,那麼自然是相對與SVN而言的)

  1. 版本庫本地化,支援離線提交,相對獨立不影響協同開發。每個開發者都擁有自己的版本控制庫,在自己的版本庫上可以任意的執行提交程式碼、建立分支等行為。例如,開發者認為自己提交的程式碼有問題?沒關係,因為版本庫是自己的,回滾歷史、反覆提交、歸併分支並不會影響到其他開發者。
  2. 更少的“倉庫汙染”。git對於每個工程只會產生一個.git目錄,這個工程所有的版本控制資訊都在這個目錄中,不會像SVN那樣在每個目錄下都產生.svn目錄。
  3. 把內容按元資料方式儲存,完整克隆版本庫。所有版本資訊位於.git目錄中,它是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標籤、分支、版本記錄等。
  4. 支援快速切換分支方便合併,比較合併效能好。在同一目錄下即可切換不同的分支,方便合併,且合併檔案速度比SVN快。
  5. 分散式版本庫,無單點故障,內容完整性好。內容儲存使用的是SHA-1雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。

SVN與Git的最主要的區別?

  SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央伺服器哪裡得到最新的版本,然後幹活, 幹完後,需要把自己做完的活推送到中央伺服器。集中式版本控制系統是必須聯網才能工作,如果在區域網還可以,頻寬夠大,速度夠快,如果在網際網路下,如果網 速慢的話,就納悶了。

  Git是分散式版本控制系統,那麼它就沒有中央伺服器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦 上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了檔案A,其他人也在電腦上改了檔案A,這時,你們兩之間只需把各 自的修改推送給對方,就可以互相看到對方的修改了。

Git 安裝

上面說了,Git 是一個版本控制系統,你也可以理解成是一個工具,跟 Java 類似,使用之前必須得先下載安裝,所以第一步必須要安裝,這裡Windows平臺的安裝方式,這部分就不過多介紹,相信大家這裡搞的定。
Windows:

下載完成後,雙擊安裝即可,雙擊開啟安裝設定介面。然後點選“Next”,出現如下介面進行配置安裝元件,預設即可,包括建立桌面快捷方式、Git Bash、Git GUi、已經目錄和字尾關聯等。點選“Next”。
這裡寫圖片描述

在“Adjusting your PATH environment”選項中,預設即可。這個步驟最好選擇第二項“Use Git from the Windows Command Prompt”, 這樣在Windows的命令列cmd中也可以執行git命令了。點選“Next”繼續:
這裡寫圖片描述
第一個意思是隻能通過git bash輸入命令,

第二個指可以通過cmd啟動git,輸入git相關命令必須等它啟動後

第三個指將可以在cmd中直接輸入git的相關命令,注意這個可能會覆蓋cmd中原有的命令

這裡寫圖片描述

是為了處理windows和linux/unix中換行符的不同(windows中換行符是CRLF,linux/unix中是LF)

第一個選項:會將所有的LF轉換為CRLF,如何你是在windows下使用,建議勾選

第二個選項:會將所有的CRLF轉換為LF,如何你是在linux/unix下使用,建議勾選;
第三個選項:不進行換行符的轉換

在終端模擬器選擇頁面,預設即可,配置後Git Bash的終端比較易用。然後點選“Next”
這裡寫圖片描述

最後配置Git額外選擇預設即可。然後點選“Install”開始安裝。如果之前安裝過舊版本,會先解除安裝然後再安裝新版本。
這裡寫圖片描述

安裝完成後,在開始選單裡面找到 “Git –> Git Bash”

會彈出一個類似的命令視窗的東西,就說明Git安裝成功。如下:
這裡寫圖片描述
安裝完成後,還需要最後一步設定,在命令列輸入如下:
這裡寫圖片描述
因為Git是分散式版本控制系統,所以需要填寫使用者名稱和郵箱作為一個標識。

TortoiseGit的安裝

雙擊下載好的安裝包,前面幾個選項可預設即可,當出現進入Choose SSH Client頁面時,選擇TortoisePLink選項:
這裡寫圖片描述
選擇next按鈕,進入Custom Setup頁面,使用預設或者指定路徑安裝;
這裡寫圖片描述
當出現如下視窗,那麼恭喜你安裝成功了,接下來就可以使用了。
這裡寫圖片描述

安裝完成之後對其進行配置
右鍵TortoiseGit進入設定介面
這裡寫圖片描述
設定使用者名稱和郵箱
這裡寫圖片描述

使用Git的優勢
任意兩個開發者之間可以很容易的解決衝突。
為什麼使用Git容易解決衝突,先請看開源專案工作流程圖:
這裡寫圖片描述
如上圖所示,使用Git進行版本控制的時候,有一個主開發者和若干開發者,其只有主開發者有提交程式碼到github,其他開發者完成功能後都是通過create patch傳送補丁給主開發者,然後由主開發者獲取補丁apply patch並Push到伺服器,這樣就有效解決了程式碼衝突問題。

建立遠端倉庫:

要使用git,首先得有一個遠端倉庫吧,下面是在自己的主頁中新建一個遠端倉庫:
ps:其中倉庫型別要選擇public(公開),私有的是要收費的
這裡寫圖片描述

這裡寫圖片描述

建立遠端倉庫之後會有這樣一個頁面,點選箭頭所指按鈕,拷貝倉庫地址: (這個地址一會要用)
這裡寫圖片描述

使用TortoiseGit工具 Clone 剛才建立的倉庫

這裡寫圖片描述
這裡寫圖片描述
當出現如下圖,那麼恭喜你,專案成功克隆下來了。
這裡寫圖片描述
然後你再本地會發現有這樣一個資料夾
這裡寫圖片描述
接下來你只要上傳檔案即可,如下本人是上傳一個工程名為ClearEditText的資料夾;
這裡寫圖片描述
首先使用TortoiseGit的add命令將新新增的檔案或資料夾add進來,然後再使用Git Commit將檔案提交的本地,在使用TortoiseGit的Push將檔案上傳到Github。這裡需要注意TortoiseGit的pull和TortoiseSvn的update是一樣的功能,即將伺服器的最新程式碼同步到本地。

簡單使用

在自己的電腦上新建一個資料夾作為專案目錄;到專案目錄下點選右鍵,選擇Git Bash Here,調出命令列介面,如輸入 git init, 就會把這個目錄變成git可以管理的倉庫
這裡寫圖片描述

這裡寫圖片描述
之後可以在目錄下建立檔案,寫程式碼了,寫完程式碼之後,右鍵選擇
tortoiseGit->add 將目錄下的檔案新增到暫存區裡面去,此時目錄下的檔案會呈現相應的圖示樣式,如下圖:具體什麼樣的圖示代表什麼這裡不過多介紹
這裡寫圖片描述
這裡寫圖片描述
右鍵:git commont ->”master” 把檔案提交到倉庫的主分支 ,寫上註釋
右鍵:tortoiseGit 選擇push操作,把本地庫的內容推送到遠端,輸入在遠端程式碼倉庫建立專案的遠端地址,之後輸入使用者名稱和密碼有能夠提交了
這裡寫圖片描述
這裡寫圖片描述

命令列

初次執行Git前的配置
使用者資訊
當安裝完 Git 應該做的第一件事就是設定你的使用者名稱稱與郵件地址 這樣做很重要,因為每一個 Git 的提交都會使用這些資訊,並且它會寫入到你的每一次提交中,不可更改:

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

如果使用了 –global 選項,那麼該命令只需要執行一次,因為之後無論你在該系統上做任何事情, Git 都會使用那些資訊當你想針對特定專案使用不同的使用者名稱稱與郵件地址時,可以在那個專案目錄下執行沒有 –global 選項的命令來配置

文字編輯器
既然使用者資訊已經設定完畢,你可以配置預設文字編輯器了,當 Git 需要你輸入資訊時會呼叫它 如果未配置,Git 會使用作業系統預設的文字編輯器,通常是 Vim 如果你想使用不同的文字編輯器,例如 Emacs,可以這樣做:

git config --global core.editor emacs

檢查配置資訊
如果想要檢查你的配置,可以使用 git config –list 命令來列出所有 Git 當時能找到的配置

你可以通過輸入 git config : 來檢查 Git 的某一項配置,如:

git config user.name

建立版本庫。

 什麼是版本庫?版本庫又名倉庫,英文名repository,你可以簡單的理解一個目錄,這個目錄裡面的所有檔案都可以被Git管理起來,每個檔案的修改,刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將檔案”還原”。
    所以建立一個版本庫也非常簡單,如下我是D盤 –> www下 目錄下新建一個testgit版本庫。

這裡寫圖片描述
pwd 命令是用於顯示當前的目錄。

  1. 通過命令 git init 把這個目錄變成git可以管理的倉庫,如下:

這裡寫圖片描述

這時候你當前testgit目錄下會多了一個.git的目錄,這個目錄是Git來跟蹤管理版本的,沒事千萬不要手動亂改這個目錄裡面的檔案,否則,會把git倉庫給破壞了。如下:

這裡寫圖片描述

2. 把檔案新增到版本庫中。

      首先要明確下,所有的版本控制系統,只能跟蹤文字檔案的改動,比如txt檔案,網頁,所有程式的程式碼等,Git也不列外,版本控制系統可以告訴你每次的改 動,但是圖片,視訊這些二進位制檔案,雖能也能由版本控制系統管理,但沒法跟蹤檔案的變化,只能把二進位制檔案每次改動串起來,也就是知道圖片從1kb變成 2kb,但是到底改了啥,版本控制也不知道。

下面先看下demo如下演示:

 我在版本庫testgit目錄下新建一個記事本檔案 readme.txt 內容如下:11111111

 第一步:使用命令 git add readme.txt新增到暫存區裡面去。如下:

這裡寫圖片描述
如果和上面一樣,沒有任何提示,說明已經新增成功了。
第二步:用命令 git commit告訴Git,把檔案提交到倉庫。
這裡寫圖片描述
現在我們已經提交了一個readme.txt檔案了,我們下面可以通過命令git status來檢視是否還有檔案未提交,如下:
這裡寫圖片描述
說明沒有任何檔案未提交,但是我現在繼續來改下readme.txt內容,比如我在下面新增一行2222222222內容,繼續使用git status來檢視下結果,如下:
這裡寫圖片描述
上面的命令告訴我們 readme.txt檔案已被修改,但是未被提交的修改。

接下來我想看下readme.txt檔案到底改了什麼內容,如何檢視呢?可以使用如下命令:
git diff readme.txt 如下:
這裡寫圖片描述
件內容從一行11111111改成 二行 添加了一行22222222內容。

知道了對readme.txt檔案做了什麼修改後,我們可以放心的提交到倉庫了,提交修改和提交檔案是一樣的2步(第一步是git add 第二步是:git commit)。
這裡寫圖片描述

版本回退

 如上,我們已經學會了修改檔案,現在我繼續對readme.txt檔案進行修改,再增加一行

內容為33333333333333.繼續執行命令如下:
這裡寫圖片描述
現在我已經對readme.txt檔案做了三次修改了,那麼我現在想檢視下歷史記錄,如何查呢?我們現在可以使用命令 git log 演示如下所示:
這裡寫圖片描述
現在我想使用版本回退操作,我想把當前的版本回退到上一個版本,要使用什麼命令呢?可以使用如下2種命令,第一種是:git reset –hard HEAD^ 那麼如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^ 以此類推。那如果要回退到前100個版本的話,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:git reset –hard HEAD~100 即可。未回退之前的readme.txt內容如下:
這裡寫圖片描述
如果想回退到上一個版本的命令如下操作:
這裡寫圖片描述

再來檢視下 readme.txt內容如下:通過命令cat readme.txt檢視

這裡寫圖片描述

可以看到,內容已經回退到上一個版本了。我們可以繼續使用git log 來檢視下歷史記錄資訊,如下:
這裡寫圖片描述
我們看到 增加333333 內容我們沒有看到了,但是現在我想回退到最新的版本,如:有333333的內容要如何恢復呢?我們可以通過版本號回退,使用命令方法如下:
git reset –hard 版本號 ,但是現在的問題假如我已經關掉過一次命令列或者333內容的版本號我並不知道呢?要如何知道增加3333內容的版本號呢?可以通過如下命令即可獲取到版本號:git reflog 演示如下:
這裡寫圖片描述
通過上面的顯示我們可以知道,增加內容3333的版本號是 6fcfc89.我們現在可以命令

git reset –hard 6fcfc89來恢復了。演示如下:
這裡寫圖片描述
可以看到 目前已經是最新的版本了。

理解工作區與暫存區的區別

 工作區:就是你在電腦上看到的目錄,比如目錄下testgit裡的檔案(.git隱藏目錄版本庫除外)。或者以後需要再新建的目錄檔案等等都屬於工作區範疇。

  版本庫(Repository):工作區有一個隱藏目錄.git,這個不屬於工作區,這是版本庫。其中版本庫裡面存了很多東西,其中最重要的就是stage(暫存區),還有Git為我們自動建立了第一個分支master,以及指向master的一個指標HEAD。

我們前面說過使用Git提交檔案到版本庫有兩步:
第一步:是使用 git add 把檔案新增進去,實際上就是把檔案新增到暫存區。

第二步:使用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支上。
我們繼續使用demo來演示下:

我們在readme.txt再新增一行內容為4444444,接著在目錄下新建一個檔案為test.txt 內容為test,我們先用命令 git status來檢視下狀態,如下:
這裡寫圖片描述
現在我們先使用git add 命令把2個檔案都新增到暫存區中,再使用git status來檢視下狀態,如下:
這裡寫圖片描述
接著我們可以使用git commit一次性提交到分支上,如下:
這裡寫圖片描述

Git撤銷修改和刪除檔案操作

一:撤銷修改:

比如我現在在readme.txt檔案裡面增加一行 內容為555555555555,我們先通過命令檢視如下:

這裡寫圖片描述

在我未提交之前,我發現新增5555555555555內容有誤,所以我得馬上恢復以前的版本,現在我可以有如下幾種方法可以做修改:

第一:如果我知道要刪掉那些內容的話,直接手動更改去掉那些需要的檔案,然後add新增到暫存區,最後commit掉。

第二:我可以按以前的方法直接恢復到上一個版本。使用 git reset –hard HEAD^

但是現在我不想使用上面的2種方法,我想直接想使用撤銷命令該如何操作呢?首先在做撤銷之前,我們可以先用 git status 檢視下當前的狀態。如下所示:
這裡寫圖片描述

可以發現,Git會告訴你,git checkout — file 可以丟棄工作區的修改,如下命令:

git checkout – readme.txt,如下所示:
這裡寫圖片描述
命令 git checkout –readme.txt 意思就是,把readme.txt檔案在工作區做的修改全部撤銷,這裡有2種情況,如下:

  1. readme.txt自動修改後,還沒有放到暫存區,使用 撤銷修改就回到和版本庫一模一樣的狀態。
  2. 另外一種是readme.txt已經放入暫存區了,接著又作了修改,撤銷修改就回到新增暫存區後的狀態。
    對於第二種情況,我想我們繼續做demo來看下,假如現在我對readme.txt新增一行 內容為6666666666666,我git add 增加到暫存區後,接著新增內容7777777,我想通過撤銷命令讓其回到暫存區後的狀態。如下所示:
    這裡寫圖片描述

注意:命令git checkout — readme.txt 中的 — 很重要,如果沒有 — 的話,那麼命令變成建立分支了。

二:刪除檔案
假如我現在版本庫testgit目錄新增一個檔案b.txt,然後提交。如下:

這裡寫圖片描述
如上:一般情況下,可以直接在檔案目錄中把檔案刪了,或者使用如上rm命令:rm b.txt ,如果我想徹底從版本庫中刪掉了此檔案的話,可以再執行commit命令 提交掉,現在目錄是這樣的,
這裡寫圖片描述

只要沒有commit之前,如果我想在版本庫中恢復此檔案如何操作呢?

可以使用如下命令 git checkout — b.txt,如下所示:

這裡寫圖片描述

再來看看我們testgit目錄,添加了3個檔案了。如下所示:
這裡寫圖片描述

遠端倉庫

在瞭解之前,先註冊github賬號,由於你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點設定:

第一步:建立SSH Key。在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個檔案,如果有的話,直接跳過此如下命令,如果沒有的話,開啟命令列,輸入如下命令:
ssh-keygen -t rsa –C “[email protected]”, 由於我本地此前執行過一次,所以本地有,如下所示:
這裡寫圖片描述
id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

第二步:登入github,開啟” settings”中的SSH Keys頁面,然後點選“Add SSH Key”,填上任意title,在Key文字框裡黏貼id_rsa.pub檔案的內容。
這裡寫圖片描述
點選 Add Key,你就應該可以看到已經新增的key。
這裡寫圖片描述
1.如何新增遠端庫?
現在的情景是:我們已經在本地建立了一個Git倉庫後,又想在github建立一個Git倉庫,並且希望這兩個倉庫進行遠端同步,這樣github的倉庫可以作為備份,又可以其他人通過該倉庫來協作。
首先,登入github上,然後在右上角找到“create a new repo”建立一個新的倉庫。如下:
這裡寫圖片描述
在Repository name填入testgit,其他保持預設設定,點選“Create repository”按鈕,就成功地建立了一個新的Git倉庫:
這裡寫圖片描述
目前,在GitHub上的這個testgit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。
現在,我們根據GitHub的提示,在本地的testgit倉庫下執行命令:

這裡寫圖片描述

把本地庫的內容推送到遠端,使用 git push命令,實際上是把當前分支master推送到遠端。

由於遠端庫是空的,我們第一次推送master分支時,加上了 –u引數,Git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來, 在以後的推送或者拉取時就可以簡化命令。推送成功後,可以立刻在github頁面中看到遠端庫的內容已經和本地一模一樣了,上面的要輸入github的用 戶名和密碼如下所示:
這裡寫圖片描述

從現在起,只要本地作了提交,就可以通過如下命令:

git push origin master

把本地master分支的最新修改推送到github上了,現在你就擁有了真正的分散式版本庫了。

如何從遠端庫克隆

上面我們瞭解了先有本地庫,後有遠端庫時候,如何關聯遠端庫。

現在我們想,假如遠端庫有新的內容了,我想克隆到本地來 如何克隆呢?

首先,登入github,建立一個新的倉庫,名字叫testgit2.如下:
這裡寫圖片描述
如下,我們看到:
這裡寫圖片描述

現在,遠端庫已經準備好了,下一步是使用命令git clone克隆一個本地庫了。如下所示:
這裡寫圖片描述

接著在我本地目錄下 生成testgit2目錄了,如下所示:
這裡寫圖片描述

建立與合併分支

在 版本回填退裡,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裡,這個分支叫主 分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。
首先,我們來建立dev分支,然後切換到dev分支上。如下操作:
這裡寫圖片描述

git checkout 命令加上 –b引數表示建立並切換,相當於如下2條命令
git branch dev
git checkout dev

git branch檢視分支,會列出所有的分支,當前分支前面會新增一個星號。然後我們在dev分支上繼續做demo,比如我們現在在readme.txt再增加一行 7777777777777

首先我們先來檢視下readme.txt內容,接著新增內容77777777,如下:
這裡寫圖片描述

現在dev分支工作已完成,現在我們切換到主分支master上,繼續檢視readme.txt內容如下:
這裡寫圖片描述

現在我們可以把dev分支上的內容合併到分支master上了,可以在master分支上,使用如下命令 git merge dev 如下所示:
這裡寫圖片描述

git merge命令用於合併指定分支到當前分支上,合併後,再檢視readme.txt內容,可以看到,和dev分支最新提交的是完全一樣的。

注意到上面的Fast-forward資訊,Git告訴我們,這次合併是“快進模式”,也就是直接把master指向dev的當前提交,所以合併速度非常快。

合併完成後,我們可以接著刪除dev分支了,操作如下:
這裡寫圖片描述

總結建立與合併分支命令如下:

檢視分支:git branch

建立分支:git branch name

切換分支:git checkout name

建立+切換分支:git checkout –b name

合併某分支到當前分支:git merge name

刪除分支:git branch –d name

如何解決衝突

下面我們還是一步一步來,先新建一個新分支,比如名字叫fenzhi1,在readme.txt新增一行內容8888888,然後提交,如下所示:
這裡寫圖片描述
同樣,我們現在切換到master分支上來,也在最後一行新增內容,內容為99999999,如下所示:
這裡寫圖片描述

現在我們需要在master分支上來合併fenzhi1,如下操作:
這裡寫圖片描述

Git用<<<<<<<,=======,>>>>>>>標記出 不同分支的內容,其中>>>>fenzhi1 是指fenzhi1上修改的內容,我們可以修改下如下後儲存:
這裡寫圖片描述

如果我想檢視分支合併的情況的話,需要使用命令 git log.命令列

分支管理策略

  通常合併分支時,git一般使用”Fast forward”模式,在這種模式下,刪除分支後,會丟掉分支資訊,現在我們來使用帶引數 –no-ff來禁用”Fast forward”模式。首先我們來做demo演示下:

建立一個dev分支。
修改readme.txt內容。
新增到暫存區。
切換回主分支(master)。
合併dev分支,使用命令 git merge –no-ff -m “註釋” dev
檢視歷史記錄
截圖如下:
這裡寫圖片描述
分支策略:首先master主分支應該是非常穩定的,也就是用來發布新版本,一般情況下不允許在上面幹活,幹活一般情況下在新建的dev分支上幹活,幹完後,比如上要釋出,或者說dev分支程式碼穩定後可以合併到主分支master上來。

bug分支:
在開發中,會經常碰到bug問題,那麼有了bug就需要修復,在Git中,分支是很強大的,每個bug都可以通過一個臨時分支來修復,修復完成後,合併分支,然後將臨時的分支刪除掉。

比如我在開發中接到一個404 bug時候,我們可以建立一個404分支來修復它,但是,當前的dev分支上的工作還沒有提交。比如如下:
這裡寫圖片描述
並不是我不想提交,而是工作進行到一半時候,我們還無法提交,比如我這個分支bug要2天完成,但是我issue-404 bug需要5個小時內完成。怎麼辦呢?還好,Git還提供了一個stash功能,可以把當前工作現場 ”隱藏起來”,等以後恢復現場後繼續工作。如下:
這裡寫圖片描述

所以現在我可以通過建立issue-404分支來修復bug了。

首先我們要確定在那個分支上修復bug,比如我現在是在主分支master上來修復的,現在我要在master分支上建立一個臨時分支,演示如下:
這裡寫圖片描述
修復完成後,切換到master分支上,並完成合並,最後刪除issue-404分支。演示如下:
這裡寫圖片描述

現在,我們回到dev分支上幹活了。
這裡寫圖片描述

工作區是乾淨的,那麼我們工作現場去哪裡呢?我們可以使用命令 git stash list來檢視下。如下:

這裡寫圖片描述

工作現場還在,Git把stash內容存在某個地方了,但是需要恢復一下,可以使用如下2個方法:

git stash apply恢復,恢復後,stash內容並不刪除,你需要使用命令git stash drop來刪除。
另一種方式是使用git stash pop,恢復的同時把stash內容也刪除了。
這裡寫圖片描述

多人協作

當你從遠端庫克隆時候,實際上Git自動把本地的master分支和遠端的master分支對應起來了,並且遠端庫的預設名稱是origin。

要檢視遠端庫的資訊 使用 git remote
要檢視遠端庫的詳細資訊 使用 git remote –v
這裡寫圖片描述
推送分支:
推送分支就是把該分支上所有本地提交到遠端庫中,推送時,要指定本地分支,這樣,Git就會把該分支推送到遠端庫對應的遠端分支上:
使用命令 git push origin master

比如我現在的github上的readme.txt程式碼如下:
這裡寫圖片描述

本地的readme.txt程式碼如下:
這裡寫圖片描述
現在我想把本地更新的readme.txt程式碼推送到遠端庫中,使用命令如下:
這裡寫圖片描述
我們可以看到如上,推送成功,我們可以繼續來截圖github上的readme.txt內容 如下:
這裡寫圖片描述

可以看到 推送成功了,如果我們現在要推送到其他分支,比如dev分支上,我們還是那個命令 git push origin dev

那麼一般情況下,那些分支要推送呢?

master分支是主分支,因此要時刻與遠端同步。
一些修復bug分支不需要推送到遠端去,可以先合併到主分支上,然後把主分支master推送到遠端去。
抓取分支:

多人協作時,大家都會往master分支上推送各自的修改。現在我們可以模擬另外一個同事,可以在另一臺電腦上(注意要把SSH key新增到github上)或者同一臺電腦上另外一個目錄克隆,新建一個目錄名字叫testgit2
但是我首先要把dev分支也要推送到遠端去,如下
這裡寫圖片描述
接著進入testgit2目錄,進行克隆遠端的庫到本地來,如下:
這裡寫圖片描述
現在目錄下生成有如下所示:
這裡寫圖片描述
現在我們的小夥伴要在dev分支上做開發,就必須把遠端的origin的dev分支到本地來,於是可以使用命令建立本地dev分支:git checkout –b dev origin/dev

現在小夥伴們就可以在dev分支上做開發了,開發完成後把dev分支推送到遠端庫時。
這裡寫圖片描述
小夥伴們已經向origin/dev分支上推送了提交,而我在我的目錄檔案下也對同樣的檔案同個地方作了修改,也試圖推送到遠端庫時,如下:
這裡寫圖片描述
由上面可知:推送失敗,因為我的小夥伴最新提交的和我試圖推送的有衝突,解決的辦法也很簡單,上面已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然後在本地合併,解決衝突,再推送。
這裡寫圖片描述
git pull也失敗了,原因是沒有指定本地dev分支與遠端origin/dev分支的連結,根據提示,設定dev和origin/dev的連結:如下:
這裡寫圖片描述
這回git pull成功,但是合併有衝突,需要手動解決,解決的方法和分支管理中的 解決衝突完全一樣。解決後,提交,再push:
我們可以先來看看readme.txt內容了。
這裡寫圖片描述
現在手動已經解決完了,我接在需要再提交,再push到遠端庫裡面去。如下所示:
這裡寫圖片描述
因此:多人協作工作模式一般是這樣的:

首先,可以試圖用git push origin branch-name推送自己的修改.
如果推送失敗,則因為遠端分支比你的本地更新早,需要先用git pull試圖合併。
如果合併有衝突,則需要解決衝突,並在本地提交。再用git push origin branch-name推送。

Git基本常用命令如下:

   mkdir:         XX (建立一個空目錄 XX指目錄名)

   pwd:          顯示當前目錄的路徑。

   git init          把當前的目錄變成可以管理的git倉庫,生成隱藏.git檔案。

   git add XX       把xx檔案新增到暫存區去。

   git commit –m “XX”  提交檔案 –m 後面的是註釋。

   git status        檢視倉庫狀態

   git diff  XX      檢視XX檔案修改了那些內容

   git log          檢視歷史記錄

   git reset  –hard HEAD^ 或者 git reset  –hard HEAD~ 回退到上一個版本

                        (如果想回退到100個版本,使用git reset –hard HEAD~100 )

   cat XX         檢視XX檔案內容

   git reflog       檢視歷史記錄的版本號id

   git checkout — XX  把XX檔案在工作區的修改全部撤銷。

   git rm XX          刪除XX檔案

   git remote add origin https://github.com/tugenhua0707/testgit 關聯一個遠端庫

   git push –u(第一次要用-u 以後不需要) origin master 把當前master分支推送到遠端庫

   git clone https://github.com/tugenhua0707/testgit  從遠端庫中克隆

   git checkout –b dev  建立dev分支 並切換到dev分支上

   git branch  檢視當前所有的分支

   git checkout master 切換回master分支

   git merge dev    在當前的分支上合併dev分支

   git branch –d dev 刪除dev分支

   git branch name  建立分支

   git stash 把當前的工作隱藏起來 等以後恢復現場後繼續工作

   git stash list 檢視所有被隱藏的檔案列表

   git stash apply 恢復被隱藏的檔案,但是內容不刪除

   git stash drop 刪除檔案

   git stash pop 恢復檔案的同時 也刪除檔案

   git remote 檢視遠端庫的資訊

   git remote –v 檢視遠端庫的詳細資訊

   git push origin master  Git會把master分支推送到遠端庫對應的遠端分支上 

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

相關推薦

APP實用開發——版本控制Git使用總結

1. 什麼是Git? Git是一款免費、開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案 Git 是 Linux 發明者 Linus 開發的一款新時代的版本控制系統,這裡我只舉幾個例子來幫助你們理解。 熟悉程式設計的知道,我們在軟體開發中

版本控制-Git的基礎使用(windows下)

這裡介紹一下Git的基礎使用。(使用者的key配置可以百度,沒有key不能遠端倉庫push或者pull) 1.安裝Git 下載之後,一路下一步安裝即可。 2.初步瞭解Git 對於git倉庫,有三個區域,分別是: -working directory工作區 -s

分頁器和版本控制總結使用

spa sch lis number from 顯示 list queryset 出版 昨日回顧: 分頁器: 普通分頁 # 普通分頁 from rest_framework.paginatio

Android 程式碼版本控制Git

引言:對於Git的使用已經有一段時間了。不會太多的命令列操作,主要使用基於Android Studio和Eclipse對git進行使用。倉庫的建立,程式碼的提交、更新、衝突解決等等。 時間:2016年7月23日12:12:27 作者:JustDo23 版本:[ Git ][ Wi

版本控制--git+idea

nbsp 分享圖片 idea -- ima bubuko http 控制 bsp 版本控制--git+idea

版本控制-git(二)

  上次文章給大家介紹了Git的一些基本知識(http://www.cnblogs.com/jerehedu/p/4582398.html),並介紹了使用git init初始化化版本庫,使用git add增加檔案到版本庫,使用git status檢視版本庫的狀態資訊,使用git commit最終提交檔案到版本

版本控制git(三)-git分支

  首先,我們要弄明白什麼是分支。通過git log 命令我們可以檢視版本庫的提交日誌,如圖:   那麼這些commit之間存在什麼關係呢?實際上每次commit的時候,提交物件都會儲存一個指向上次一commit版本的指標,經過多次提交之後,git通過這個指標將多個提交版本串成了一個串,如下圖:

版本控制-git

  版本控制是一種記錄一個或者若干檔案內容變化,以便將來查閱特定版本修訂情況的系統,是軟體開發過程中不可缺少的管理手段。   常見的版本控制系統可以分為三大類:本地版本控制、集中式版本控制、分散式版本控制。   本地版本控制:通過複製專案目錄、或者改名來區分儲存不同的版本。好處:簡單;壞處:工作目錄容易混

APP實用開發—自定義載入動畫

彷百度外賣動畫 動畫 我們先來看看Android中的動畫吧: Android中的動畫分為三種: Tween動畫,這一類的動畫提供了旋轉、平移、縮放等效果。 Alpha – 淡入淡出 Scale – 縮放效果 Roate – 旋轉效果 Tran

APP實用開發——TextSwitcher實現文字自動垂直滾動

TextSwitcher 字面理解是文字交換器,是ViewSwitcher的子類,從ViewSwitcher來看,是View交換器,TextSwitcher繼承自ViewSwitcher,顯然是交換TextView。 應用分為三步: 1.得到 TextSw

圖解SVN開發版本控制和釋出流程,Trunk、Tag、Branch的使用

介紹一種比較合理的SVN Trunk、Tag和Branch使用方法。先上圖,再說明: 責職說明: Trunk:用於各版本開發提交程式碼TAG:用於記錄和儲存每個release/milestone

GIT版本控制GIT與SVN的相互轉換 (三)

git-svn git-svn用於Git和SVN的轉換,可以把Git倉庫遷移成SVN倉庫,反之亦可。 詳細介紹可見[1],或者命令列輸入git-svn。 Bidirectional operation between a Subversion repository an

APP實用開發—RxJava 和 Retrofit 結合使用

RxJava 和 Retrofit 結合使用的幾個最常見使用方式舉例。 RxJava中有個叫做Subscription的介面,可以用來取消訂閱. public interface Subscription { void unsubscribe(

版本控制Git學習

1.什麼是GitGit是Linus發明者Linus開發的一款版本控制系統2.Git命令列表首先,需要安裝Git,在命令列中輸入git,如果出現以下提示說明已經安裝成功了(1) 檢視git版本    git --version(2)檢視git狀態   git status  意

APP實用開發—桌面新增快捷圖示

原理: 從圖上可以看出,Android大致分7步完成快捷方式的建立: **第1步:**Android系統的launcher程式會呼叫它的pickShortcut()方法去啟動系統的pickActivity程式(應用); **第2步:**pickActi

APP實用開發——廣告輪播圖

ViewPager是一個常用的android元件,不過通常我們使用ViewPager的時候不能實現左右無限迴圈滑動,在滑到邊界的時候會看到一個不能翻頁的動畫,可能影響使用者體驗。此外,某些區域性的ViewPager(例如展示廣告或者公告之類的ViewPage

版本控制Git(完美整理版)

版本控制Git 一.Git是什麼 版本控制工具!Git是目前世界上最先進的分散式版本控制系統(沒有之一)。 這個軟體用起來就應該像這個樣子,能記錄每次檔案的改動 這樣,你就結束了手動管理多個“版本”的史前時代,進入到版本控制的20世紀。 二

版本控制git之一-倉庫管理

操作 txt文件 問題 哪些 快照 提示 進入 有時 init git ? 再開始這個話題之前,讓我想起了一件很痛苦的事情,在我大學寫畢業論文的時候,我當時的文件是這樣保存的 畢業論文_初稿.doc 畢業論文_修改1.doc 畢業論文_修改2.doc 畢業論文_修改3.

版本控制git之五-標簽管理

add a star 庫服務器 from .com 變化 簽名 auth efs 打標簽 像其他版本控制系統(VCS)一樣,Git 可以給歷史中的某一個提交打上標簽,以示重要。 比較有代表性的是人們會使用這個功能來標記發布結點(v1.0 等等)。 在本節中,你將會學習如何列

版本控制git之三-多人協作

exit 刪除 fir 一個地方 含義 files fas 公開 nothing 如果你想獲得一份已經存在了的 Git 倉庫的拷貝,比如說,你想為某個開源項目貢獻自己的一份力,這時就要用到 `git clone` 命令。 如果你對其它的 VCS 系統(比如說Subve