1. 程式人生 > >Git簡明指南

Git簡明指南

一:Git是什麼?

  Git是目前世界上最先進的分散式版本控制系統。

  二:SVN與Git的最主要的區別?

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

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

  三:在windows上如何安裝Git?

  msysgit是 windows版的Git,如下:

     

  需要從網上下載一個,然後進行預設安裝即可。安裝完成後,在開始選單裡面找到 "Git --> Git Bash",如下:

  

  會彈出一個類似的命令視窗的東西,就說明Git安裝成功。如下:

 

  安裝完成後,還需要最後一步設定,在命令列輸入如下:

 

  因為Git是分散式版本控制系統,所以需要填寫使用者名稱和郵箱作為一個標識。

  注意:git config  --global 引數,有了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然你也可以對某個倉庫指定的不同的使用者名稱和郵箱。

  四:如何操作?

  一:建立版本庫。

  什麼是版本庫?版本庫又名倉庫,英文名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 如下:

 

  如上可以看到,readme.txt檔案內容從一行11111111改成 二行 添加了一行22222222內容。

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

  如下:

 

  二:版本回退:

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

  內容為33333333333333.繼續執行命令如下:

   

  現在我已經對readme.txt檔案做了三次修改了,那麼我現在想檢視下歷史記錄,如何查呢?我們現在可以使用命令 git log 演示如下所示:

  

  git log命令顯示從最近到最遠的顯示日誌,我們可以看到最近三次提交,最近的一次是,增加內容為333333.上一次是新增內容222222,第一次預設是 111111.如果嫌上面顯示的資訊太多的話,我們可以使用命令 git log –pretty=oneline 演示如下:

  

  現在我想使用版本回退操作,我想把當前的版本回退到上一個版本,要使用什麼命令呢?可以使用如下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 remote add origin https://github.com/tugenhua0707/testgit.git

  所有的如下:

  

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

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

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

  git push origin master

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

  2. 如何從遠端庫克隆?

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

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

  首先,登入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

  1. 如何解決衝突?

  下面我們還是一步一步來,先新建一個新分支,比如名字叫fenzhi1,在readme.txt新增一行內容8888888,然後提交,如下所示:

  同樣,我們現在切換到master分支上來,也在最後一行新增內容,內容為99999999,如下所示:

  現在我們需要在master分支上來合併fenzhi1,如下操作:

  Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,其中<<<HEAD是指主分支修改的內容,>>>>>fenzhi1 是指fenzhi1上修改的內容,我們可以修改下如下後儲存:

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

  3.分支管理策略。

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

  1. 建立一個dev分支。
  2. 修改readme.txt內容。
  3. 新增到暫存區。
  4. 切換回主分支(master)。
  5. 合併dev分支,使用命令 git merge –no-ff  -m “註釋” dev
  6. 檢視歷史記錄

  截圖如下:

 

  分支策略:首先master主分支應該是非常穩定的,也就是用來發布新版本,一般情況下不允許在上面幹活,幹活一般情況下在新建的dev分支上幹活,幹完後,比如上要釋出,或者說dev分支程式碼穩定後可以合併到主分支master上來。

相關推薦

git - 簡明指南

lock index html 之前 itunes mat pat get 你在 助你入門 git 的簡明指南,木有高深內容 ;) 作者:羅傑·杜德勒 感謝:@tfnico, @fhd 和 Namics如有紕漏,請在 github 提報問題 安裝 下載 git

Git簡明指南

一:Git是什麼?  Git是目前世界上最先進的分散式版本控制系統。  二:SVN與Git的最主要的區別?  SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央伺服器哪裡得到最新的版本,然後幹活,幹完後,需要把自己做完

RESTful 接口實現簡明指南

represent 好的 origin 了解 data err 風格 搜索 隊列 REST 簡介 REST 是一個術語的縮寫,REpresentational State Transfer,中文直譯「表征狀態轉移」,這是個很拗口的詞。我的建議是先不要強行理解,直接看怎麽做,

golang 項目實戰簡明指南

視頻 cer quest best 有一個 搭建 命令行 字符 模塊劃分 原文地址 開發環境搭建 golang 的開發環境搭建比較簡單,由於是編譯型語言,寫好 golang 源碼後,只需要執行 go build 就能將源碼編譯成對應平臺(本文中默認為 linux)上的可執行

GIT操作指南

記錄 log for delet ret nload http push 顯示 一.本地安裝Git,並配置全局用戶信息 https://git-scm.com/downloads 下載客戶端 配置用戶名和emailgit config --global user.na

Github 簡明指南

Github 簡明教程 分類 程式設計技術 如果你是一枚Coder,但是你不知道Github,那麼我覺的你就不是一個菜鳥級別的Coder,因為你壓根不是真正Coder,你只是一個Code搬運工。 但是你如果已經在讀這篇文章了,我覺的你已經知道Github了。 正是Git

golang簡明指南

開發環境搭建 golang 的開發環境搭建比較簡單,由於是編譯型語言,寫好 golang 原始碼後,只需要執行 go build 就能將原始碼編譯成對應平臺(本文中預設為 linux)上的可執行程式。本文不再贅述如何搭建 golang 開發環境,只說明下需要注意的地方。 從官

Git學習指南》學習筆記(一)

第二章 入門 git的安裝 在Linux下,git的安裝很簡單。以我的系統Deepin/Ubuntu為例,只需在終端敲入sudo apt-get install git即可。其他Linux發行版可嘗試yum install git-core。 第一個Git專案 初學時,建議使用一個新建立的目錄來進行測

詳細的Git使用指南

在我們的日常工作生活中,沒有人可以記住所有應該記住的東西,以前人們可能使用紙質或其他一些易於丟失,損壞的媒介來做工作生活記錄,隨著社會的進步,我認為有一種工作方式可以十分理想的幫助我們進行工作的記錄,那就是Git+Github+Markdown。    本文詳細

golang 專案實戰簡明指南

原文地址 開發環境搭建 golang 的開發環境搭建比較簡單,由於是編譯型語言,寫好 golang 原始碼後,只需要執行 go build 就能將原始碼編譯成對應平臺(本文中預設為 linux)上的可執行程式。本文不再贅述如何搭建 golang 開發環境,只說明下需要注意的地方。 從官網下載對應平臺的 gol

git 學習指南 學習資料筆記

學習資料地址 王爵的技術小黑屋 https://www.youtube.com/watch?v=29q6zwRGywk 01.什麼是Git Git是一個分散式的版本管理系統 每次修改後必須commit 本地資料庫 02.萌新也看的懂的 Git 基本操作 安裝git : brew insta

Git權威指南 pdf下載

這本書基本上講解了作為版本管理的基本操作。最關鍵的是每一個操作後面都告訴你這個操作的原理是什麼。授之以漁才是書本最重要的東西。 當然可能有些人不是很習慣,會覺得有點雜亂無章。我個人認為,這是方法不對。我推薦先全文瀏覽一遍,然後再上機操作。加入自己的想法,根據後面給的驗證方法進

Jupyter Notebook簡明指南

文章目錄 1. 安裝 2. 執行 2.1 基本執行命令 2.2 在伺服器上執行 2.3 設定預設配置 2.3.1生成配置檔案 2.3.2 生成金鑰

pip簡明指南

pip常用方法和簡單例項 文章目錄 1、pip安裝包 2、pip檢視已安裝的包(包括安裝路徑等詳細資訊) 3、pip檢查哪些包需要更新 4、pip升級包 5、pip解除安裝包

Ubuntu16.04 網路配置-簡明指南(未完待續)

逐步實驗完善ing... 一、配置檔案簡介 在Ubuntu系的Linux系統裡,與網路相關的主要設定檔案如下: /etc/host.conf  配置域名服務客戶端的控制檔案 /etc/hosts 配置主機名和IP地址的對映 /etc/resolv.conf 域名服務客戶端的配置檔

RESTful 介面實現簡明指南

在前後端分離的 Web 應用架構中,前端專注於頁面,同時與後端進行資料互動;而後端則專注於提供 API 介面。在這樣的結構下,REST 是一個很流行的前後端互動形式的約定。這只是一套約定,並不是某個技術標準,所以在實際的應用中,對器實現程度完全取決於後端開發者;一些號稱 RESTful 的介面

Git-操作指南

建立新倉庫 建立新資料夾,開啟,然後執行git init建立新的git倉庫。 檢出倉庫 執行如下命令以建立一個本地倉庫的克隆版本: git clone /path/to/repository 如果是遠端伺服器上的倉庫,命令為:git clone

MySQL優化簡明指南

一、在編譯時優化MySQL  如果你從原始碼分發安裝MySQL,要注意,編譯過程對以後的目標程式效能有重要的影響,不同的編譯方式可能得到類似的目標檔案,但效能可能相差很大,因此,在編譯安裝MySQL適應仔細根據你的應用型別選擇最可能好的編譯選項。這種定製的MySQL可以為你的

Git入門指南四:跟蹤新檔案和忽略某些檔案

六. 跟蹤新檔案 git add 檔案test2已被跟蹤,並處於暫存狀態 git add 後面可以指明要跟蹤的檔案或目錄路徑。如果是目錄的話,就說明要遞迴跟蹤該目錄下的所有檔案。 git add 的潛臺詞就是把目標檔案快照放入暫存區域,也就是 add file in

Teamcity+SVN+VisualStudio之持續整合簡明指南

Teamcity+SVN+VisualStudio之持續整合 簡明指南 一、寫在最前: 1.      各元件版本如下: Teamcity(簡稱tc)版本:8.1.4 SVN版本:TortoiseSVN 1.8.7 VS版本:VS2010. 10.0.30319.1 2.