GitHub安裝與使用

  GitHub是一個基於git的代碼託管平臺,付費用戶可以建私人倉庫,一般的免費用戶只能使用公共倉庫,也就是代碼要公開。

  Github 由Chris Wanstrath, PJ Hyett 與Tom Preston-Werner三位開發者在2008年4月創辦,主要提供基於git的版本託管服務。

  GitHub對於程序員的幫助如下圖所示:

  一.GitHub下載與安裝

  要想使用github,第一步是註冊github賬號,github官網地址:https://github.com/。 之後就可以創建倉庫了(免費用戶只能建公共倉庫)Create a New Repository,填好名稱後Create,之後會出現一些倉庫的配置信息。

  以win7 32位系統爲例,下載對應版本的GitHub(下載地址: https://git-for-windows.github.io/,在官方下載完後,安裝到Windows Explorer integration的時候,將選項中的“Git Bash here”和“Git GUI here”打對勾。

  然後就一直next直到Finish即可。

  安裝完成後,在開始菜單裏找到“Git”->“Git Bash”,出現一個類似命令行窗口的東西,就說明Git安裝成功。如下圖所示:

  安裝完成後,還需要最後一步設置,在命令行輸入:

 

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

 

   因爲Git是分佈式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎麼辦?這個不必擔心,首先我們相信大家都是善良無知的羣衆,其次,真的有冒充的也是有辦法可查的。

  注意git config命令的--global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

  二.GitHub使用

  我們先來創建一個版本庫。

  什麼是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裏面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。

 

  其實,創建一個版本庫非常簡單。

  第一步,選擇一個合適的地方,創建一個空目錄:   

Administrator@LZY-PC MINGW32 /e/Git (master)
$ mkdir test2

Administrator@LZY-PC MINGW32 /e/Git (master)
$ cd test2

Administrator@LZY-PC MINGW32 /e/Git/test2 (master)
$ pwd
/e/Git/test2

   pwd命令用於顯示當前目錄。在Windows系統下,爲了避免遇到各種莫名其妙的問題,請確保目錄名(包括父目錄)不包含中文。

  第二步,通過git init命令把這個目錄變成Git可以管理的倉庫:

$ git init
Initialized empty Git repository in E:/Git/test2/.git/

   這樣的話,Git瞬間就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),細心的讀者可以發現當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裏面的文件,不然改亂了,就把Git倉庫給破壞了。

  如果你沒有看到.git目錄,那是因爲這個目錄默認是隱藏的,用ls -ah命令就可以看見。  

$ ls -an
total 4
drwxr-xr-x 1 197108 197121 0 五月  1 13:34 ./
drwxr-xr-x 1 197108 197121 0 五月  1 13:30 ../
drwxr-xr-x 1 197108 197121 0 五月  1 13:34 .git/

   當然,我們也不一定必須在空目錄下創建Git倉庫,選擇一個已經有東西的目錄也是可以的。

  第三步,把文件添加到版本庫。

  首先這裏再明確一下,所有的版本控制系統,其實只能跟蹤文本文件的改動,比如TXT文件,網頁,所有的程序代碼等,Git也不例外。版本控制系統可以告訴你每次的改動,比如在第5行加了一個單詞“Linux”,在第8行刪了一個單詞“Windows”。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但沒法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是隻知道圖片從100KB改成了120KB,但到底改了啥,版本控制系統不知道,也沒法知道。

  不幸的是,Microsoft的Word格式是二進制格式,因此,版本控制系統是沒法跟蹤Word文件的改動的,前面我們舉的例子只是爲了演示,如果要真正使用版本控制系統,就要以純文本方式編寫文件。

  因爲文本是有編碼的,比如中文有常用的GBK編碼,日文有Shift_JIS編碼,如果沒有歷史遺留問題,強烈建議使用標準的UTF-8編碼,所有語言使用同一種編碼,既沒有衝突,又被所有平臺所支持。

  建議你下載Notepad++代替記事本,不但功能強大,而且免費!記得把Notepad++的默認編碼設置爲UTF-8 without BOM即可:

  接着,我們編寫一個test2.txt文件,內容如下:

Hellow my friend!
Where are you from?

   一定要放到test2目錄下(子目錄也行),因爲這是一個Git倉庫,若放到其他地方,Git再厲害也找不到這個文件。

  把一個文件放到Git倉庫只需要兩步:

  ①用命令git add告訴Git,把文件添加到倉庫:

$ git add test2.txt

   執行上面的命令,沒有任何顯示,這就對了,Unix的哲學是“沒有消息就是好消息”,說明添加成功。

  ②用命令git commit告訴Git,把文件提交到倉庫:

$ git commit -m "create a new txt file"
[master (root-commit) 7795d01] create a new txt file
 1 file changed, 2 insertions(+)
 create mode 100644 test2.txt

   簡單解釋一下,git commit命令,-m後面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄裏方便地找到改動記錄。

  如果嫌麻煩不想輸入-m "xxx"行不行?確實有辦法可以這麼幹,但是強烈不建議你這麼幹,因爲輸入說明對自己、對別人閱讀都很重要。

  git commit命令執行成功後會告訴你,1個文件被改動(我們新添加的readme.txt文件),插入了兩行內容(readme.txt有兩行內容)。

  另外,commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:  

Administrator@LZY-PC MINGW32 /e/Git/test2 (master)
$ git add test2.txt test3.txt

Administrator@LZY-PC MINGW32 /e/Git/test2 (master)
$ git commit -m "2 files"
[master fc816cb] 2 files
 1 file changed, 1 insertion(+)
 create mode 100644 test3.txt

   總的來說,初始化一個Git倉庫,使用git init命令。

  添加文件到Git倉庫,分兩步:

  • 第一步,使用命令git add <file>,注意,可反覆多次使用,添加多個文件;

  • 第二步,使用命令git commit,完成。

  現在,我們已經成功地添加並提交了一個test2.txt文件,我們繼續修改該文件,改成如下內容:

Hellow my friend!!
Where are you from?
關關雎鳩,在河之洲,
窈窕淑女,君子好逑。

   接着,運行git status命令看看結果:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test2.txt

no changes added to commit (use "git add" and/or "git commit -a")

   git status命令可以讓我們時刻掌握倉庫當前的狀態,上面的命令告訴我們,test2.txt被修改過了,但還沒有準備提交的修改。

  雖然Git告訴我們test2.txt被修改了,但如果能看看具體修改了什麼內容,自然是很好的。比如你休假兩週從國外回來,第一天上班時,已經記不清上次怎麼修改的test2.txt,所以,需要用git diff這個命令看看:

$ git diff
diff --git a/test2.txt b/test2.txt
index fd65289..a84a92a 100644
--- a/test2.txt
+++ b/test2.txt
@@ -1,2 +1,4 @@
 Hellow my friend!!
-Where are you from?
\ No newline at end of file
+Where are you from?
+關關雎鳩,在河之洲,
+窈窕淑女,君子好逑。
\ No newline at end of file

   git log命令顯示從最近到最遠的提交日誌。  

$ git log
commit fc816cbfbb61bf90d66bf01e3ad67b08f07de80e (HEAD -> master)
Author: lzy666 <[email protected]>
Date:   Tue May 1 13:57:30 2018 +0800

    2 files

commit 7795d017ddd7d11b2d9959acaad734a8877ac3bd
Author: lzy666 <[email protected]>
Date:   Tue May 1 13:49:31 2018 +0800

    create a new txt file

   如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數:

$ git log --pretty=oneline
fc816cbfbb61bf90d66bf01e3ad67b08f07de80e (HEAD -> master) 2 files
7795d017ddd7d11b2d9959acaad734a8877ac3bd create a new txt file

   需要友情提示的是,上面顯示的一大串類似3628164...882e1e0的是commit id(版本號),和SVN不一樣,Git的commit id不是1,2,3……遞增的數字,而是一個SHA1計算出來的一個非常大的數字,用十六進制表示。爲什麼commit id需要用這麼一大串數字表示呢?因爲Git是分佈式的版本控制系統,後面我們還要研究多人在同一個版本庫裏工作,如果大家都用1,2,3……作爲版本號,那肯定就衝突了。

  每提交一個新版本,實際上Git就會把它們自動串成一條時間線。如果使用可視化工具查看Git歷史,就可以更清楚地看到提交歷史的時間線:

  Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本。上一個版本是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。

  比如說,我們要把當前版本回退到上一個版本“add distributed”,就可以使用git reset命令:

$ git reset --hard HEAD^

   如果要查看當前版本的文件的內容,則操作如下:

$ cat test2.txt
Hellow my friend!!
Where are you from?

   總的來說,HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id;在穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本;要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

  Git有工作區和暫存區兩個區域,即工作區和暫存區。相比較而言,其他版本控制系統如SVN無暫存區的概念。

  工作區(Working Directory)是我們在電腦裏能看到的目錄,比如我的test2文件夾就是一個工作區:

  

  工作區內有一個隱藏目錄.git,這個.git其實不算工作區,而是Git的版本庫。

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

  

  前面講了,我們把文件往Git版本庫裏添加的時候,是分兩步執行的:

  第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;

  第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。

  因爲我們創建Git版本庫時,Git自動爲我們創建了唯一一個master分支,所以,git commit就是往master分支上提交更改。

  你可以簡單理解爲,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。

  現在,我們修改test2.txt裏的內容,再創建LICENSE文件(內容隨意),然後查看狀態:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   test2.txt
  Untracked files:
  (use "git add <file>..." to include in what will be committed)
        LICENSE

   這時,暫存區的狀態就變成這樣了:

  所以,git add命令實際上就是把要提交的所有修改放到暫存區(Stage),然後,執行git commit就可以一次性把暫存區的所有修改提交到分支。  

$ git commit -m "aa"

   現在版本庫變成了這樣,暫存區就沒有任何內容了:

  應該說,暫存區是Git非常重要的概念,弄明白了暫存區,就弄明白了Git的很多操作到底幹了什麼。

  git checkout -- file可以丟棄工作區的修改:

$ git checkout -- test2.txt

   命令git checkout -- test2.txt意思就是,把test2.txt文件在工作區的修改全部撤銷,這裏有兩種情況:一種是test2.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;一種是test2.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。

  總之,就是讓這個文件回到最近一次git commitgit add時的狀態。

  git checkout其實是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。

  git checkout -- file命令中的--很重要,沒有--,就變成了“切換到另一個分支”的命令。 

  另外,命令git rm file用於刪除一個文件。如果一個文件已經被提交到版本庫,那麼你永遠不用擔心誤刪,但是要小心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容

  到目前爲止,我們已經掌握瞭如何在Git倉庫裏對一個文件進行時光穿梭,你再也不用擔心文件備份或者丟失的問題了。

  Git是分佈式版本控制系統,同一個Git倉庫,可以分佈到不同的機器上。怎麼分佈呢?最早,肯定只有一臺機器有一個原始版本庫,此後,別的機器可以“克隆”這個原始版本庫,而且每臺機器的版本庫其實都是一樣的,並沒有主次之分。

  由於我們的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以,需要一點設置:

  第1步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsaid_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

   你需要把郵件地址換成你自己的郵件地址,然後一路回車,使用默認值即可。如果一切順利的話,可以在用戶主目錄裏找到.ssh目錄,裏面有id_rsaid_rsa.pub兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

  第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面,然後點點擊“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容;然後點“Add Key”,你就應該看到已經添加的Key:

  爲什麼GitHub需要SSH Key呢?因爲GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。

  當然,GitHub允許你添加多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裏提交,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了。

  最後友情提示,在GitHub上免費託管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放進去。

  如果你不想讓別人看到Git庫,有兩個辦法,一個是交點保護費,讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)。另一個辦法是自己動手,搭一個  Git服務器,因爲是你自己的Git服務器,所以別人也是看不見的。這個方法我們後面會講到的,相當簡單,公司內部開發必備。

  確保你擁有一個GitHub賬號後,我們就即將開始遠程倉庫的學習。

  現在的情景是,你已經在本地創建了一個Git倉庫後,又想在GitHub創建一個Git倉庫,並且讓這兩個倉庫進行遠程同步,這樣,GitHub上的倉庫既可以作爲備份,又可以讓其他人通過該倉庫來協作,真是一舉多得。

  首先,登陸GitHub,然後,在右上角找到“Create a new repo”按鈕,在Repository name填入test2,其他保持默認設置,點擊“Create repository”按鈕,就成功地創建了一個新的Git倉庫。

  目前,在GitHub上的這個test2倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。

  爲了測試方面,我在本地再新建一個test3的文件夾,在裏面再新建一個名稱爲a.txt的文件,操作如下:

$ git init
Initialized empty Git repository in E:/Git/test3/.git/

$ touch a.txt


$ vim a.txt

$ cat a.txt
hello world
how do you do?

$ git add a.txt
warning: LF will be replaced by CRLF in a.txt.
The file will have its original line endings in your working directory.

$ git commit -m ppp
[master (root-commit) 95bc7cc] ppp
 1 file changed, 2 insertions(+)
 create mode 100644 a.txt 

  接着,在GitHub裏再建一個Git倉庫test3。

  現在,我們根據GitHub的提示,在本地的test3倉庫下運行命令: 

 

$ git remote add origin3 [email protected]:lzy666/test3.git

   添加後,遠程庫的名字就是origin3,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。

  下一步,就可以把本地庫的所有內容推送到遠程庫上:

$ git push -u origin3 master

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

  由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。

  推送成功後,可以立刻在GitHub頁面中看到遠程庫的內容已經和本地一模一樣:

  從現在起,只要本地作了add與commit提交,也就是可以通過下述命令:

$ git add c.txt

$ git commit -m ee

$ git push origin3 master

   便可以把本地master分支的最新修改推送至GitHub,現在,你就擁有了真正的分佈式版本庫!

  另外,在SSH警告方面,當你第一次使用Git的clone或者push命令連接GitHub時,會得到一個警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

   這是因爲Git使用SSH連接,而SSH連接在第一次驗證GitHub服務器的Key時,需要你確認GitHub的Key的指紋信息是否真的來自GitHub的服務器,輸入yes回車即可。

Git會輸出一個警告,告訴你已經把GitHub的Key添加到本機的一個信任列表裏了:  

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

   這個警告只會出現一次,後面的操作就不會有任何警告了。

  如果你實在擔心有人冒充GitHub服務器,輸入yes前可以對照GitHub的RSA Key的指紋信息是否與SSH連接給出的一致。

  要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git

  關聯後,使用命令git push -u origin master第一次推送master分支的所有內容;

  此後,每次本地提交後,只要有必要,就可以使用命令git push origin master推送最新修改;

  分佈式版本系統的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是有沒有聯網都可以正常工作,而SVN在沒有聯網的時候是拒絕幹活的!當有網絡的時候,再把本地提交推送一下就完成了同步,給我們的工作和學習提供了很多方便。

  總的來說,我們上面學習的內容是:先有本地庫,後有遠程庫的時候,如何關聯遠程庫。

  接下來,我們學習從遠程庫克隆。

  首先,登陸GitHub,創建一個新的倉庫,名字叫test4;我們勾選Initialize this repository with a README,這樣GitHub會自動爲我們創建一個README.md文件。創建完畢後,可以看到README.md文件:

  現在,遠程庫已經準備好了,下一步是用命令git clone克隆一個本地庫:

  這時,在E:\Git目錄下會增加一個名稱爲test4.txt:

  如果有多個人協作開發,那麼每個人各自從遠程克隆一份就可以了。

  你也許還注意到,GitHub給出的地址不止一個,還可以用 https://github.com/lzy666/test4.git 這樣的地址。實際上,Git支持多種協議,默認的git://使用ssh,但也可以使用https等其他協議。使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https

  GitHub裏有個分支的概念。分支在實際中有什麼用呢?假設你準備開發一個新功能,但是需要兩週才能完成,第一週你寫了50%的代碼,如果立刻提交,由於代碼還沒寫完,不完整的代碼庫會導致別人不能幹活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。

  現在有了分支,就不用怕了。你創建了一個屬於你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工作。

  在版本回退裏,我們已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向mastermaster纔是指向提交的,所以,HEAD指向的就是當前分支。

  一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:

  

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

 當我們創建新的分支,例如dev時,Git新建了一個指針叫dev,再把HEAD指向dev,就表示當前分支在dev上:

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

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

  

  可見,Git合併分支也很快,就是改改指針,工作區內容也不變。合併完分支後,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉後,我們就剩下了一條master分支:

  接下來,我們就進行操作分支的實踐。

  首先,我們創建dev分支,然後切換到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

   git checkout命令加上-b參數表示創建並切換。

$ git branch
* dev
  master

   git branch命令會列出所有分支,當前分支前面會標一個*號。如果要從dev分支切換到master分支,執行如下:

$ git checkout master
Switched to branch 'master'

   接下來,我們先在dev分支上增加一行並提交後,在該分支下可以看到,如果切換到master分支上,就會看不到:

$ cat README.md
# test4
從遠程庫克隆
gggg
xxxxxxxx
dev下的一行,哈哈

$ git branch
* dev
  master

$ git add README.md

$ git commit -m dd
[dev 9ae2ae0] dd
 1 file changed, 1 insertion(+)

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.

$ cat README.md
# test4
從遠程庫克隆
gggg

   可見,我們從dev切換回master分支後,再查看一個README.md文件,剛會發現dev分支下添加的內容不見了。這是因爲那個提交是在dev分支上,而master分支此刻的提交點並沒有變:

  

  現在,我們把dev分支的工作成果合併到master分支上:

$ git merge dev
Updating 00c0186..9ae2ae0
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)

$ git branch
  dev
* master

$ cat README.md
# test4
從遠程庫克隆
gggg
xxxxxxxx
dev下的一行,哈哈

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

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

  當然,也不是每次合併都能Fast-forward,我們後面會講其他方式的合併。合併完成後,就可以放心地刪除dev分支了:

$ git branch -d dev
Deleted branch dev (was 9ae2ae0).

$ git branch
* master

   刪除後,查看branch,就只剩下master分支了。因爲創建、合併和刪除分支非常快,所以Git鼓勵你使用分支完成某個任務,合併後再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。

查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>

   另外,當分支dev修改一個文件並提交,master也修改該文件並提交後,master在執行合併分支時,會出現衝突:  

$ git merge dev
Auto-merging b.txt
CONFLICT (add/add): Merge conflict in b.txt
Automatic merge failed; fix conflicts and then commit the result.

   這說明,兩個分支各有提交,如下圖所示:

 

  打開工作區的文件:

$ cat b.txt
<<<<<<< HEAD
from master
=======
from dev
>>>>>>> dev

   Git用<<<<<<<=======>>>>>>>標記出不同分支的內容。

  我們根據需要修改後再次提交,如下圖所示:

  這時再合併分支就會顯示正常:

$ git merge dev
Already up to date.

$ cat b.txt

from master

from dev

   關於GitHub的操作,先介紹到這裏。以後待續。

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