GIT 學習手冊簡介
本站為 Git 學習參考手冊。目的是為學習與記憶 Git 使用中最重要、最普遍的命令提供快速翻閱。 這些命令以你可能需要的操作類型劃分,並且將提供日常使用中需要的一些常用的命令以及參數。
本手冊將從入門到精通指導大家。 首先,我們要從如何以 Git 的思維方式管理原始碼開始。 如何以 GIT 的方式思考(這節可以不用看懂,接著看下面的內容,看完就全懂了。)
懂得 Git,第一件重要的事情就是要知道它與 Subversion、Perforce 或者任何你用過的版本控制工具都有著很大的差別。 通常,忘掉你預想的版本控制方式,改以 Git 的方式思考,能夠協助你更好地學習 Git。
讓我們從頭開始。假設你正在設計一個新的原始程式碼控制系統。在你使用某個工具之前,是如何完成基本的源碼版本控制工作的呢。 十有八九,你只是在項目到達某些階段的時候,對項目做一份拷貝。
$ cp -R project project.bak
這樣,你就可以在事情變得一團糟的時候很方便的返回到之前的狀態,或者通過對比當前的項目與之前的拷貝,看看自己在之後的工作中,都做了哪些修改。
如果你有點偏執,你可能會經常作上面說的事情,或許還會給項目拷貝加個日期:
$ cp -R project project.2010-06-01.bak
如此,你就有了一堆項目在各個階段的快照,來作比較、查看。使用這種模式,你還可以有效地與人分享項目變更。 如果你會在項目到達一定階段的時候給它打個包,丟到自己的網站上,那其他的開發人員們,就能很方便地下載它,做點改動,並給你補丁回饋。
$ wget http://example.com/project.2010-06-01.zip $ unzip project.2010-06-01.zip $ cp -R project.2010-06-01 project-my-copy $ cd project-my-copy $ (做了某些修改) $ diff project-my-copy project.2010-06-01 > change.patch $ (通過E-mail發送修改補丁)
以此方式,原先的開發人員就能將其他人的改動應用到他的項目中去,其他開發人員也能瞭解你做的變更。其實這便是許多開源項目採用過多年的協作方式。
這辦法其實很好使,所以假設我們現在想要寫個工具,讓這個辦法更快、更簡單。 我們與其實現一個工具以記錄每個檔案的版本,可能不如去實現個工具以使建立、儲存項目的快照更加方便,不用每次都去人肉作整個項目的拷貝。
這就是 Git 的精要所在。你通過 git commit告訴 Git 你想儲存一份項目快照, Git 就會為你的項目中的各個檔案的目前狀態存一份記錄。之後,絕大部分的 Git 命令都圍繞這些記錄展開。 比如查看它們的區別(diff),提取它們的內容,等等。
如果你將 Git 看作一個排序、對比以及合併專案更新的工具,那就容易理解狀況和正確做事了。
目錄 擷取與建立項目 Git使用前配置 設定Git本地項目開發庫預設路徑 配置本機使用者和郵箱 init clone 基本的快照 add status diff commit reset rm, mv 分支與合并 branch checkout merge log tag 分享與更新項目 fetch, pull push remote 檢查與比較 log diff 一、擷取與建立項目
你得先有一個 Git 倉庫,才能用它進行操作。倉庫是 Git 存放你要儲存的快照的資料的地方。
擁有一個 Git 倉庫的途徑有兩種。在已有的目錄中,初始化一個新的,其一。 比如一個新的項目,或者一個已存在的項目,但該項目尚未有版本控制。如果你想要複製一份別人的項目, 或者與別人合作某個項目,也可以從一個公開的 Git 倉庫複製,其二。本章將對兩者都做介紹。 Git使用前配置
如果設定了,在輸入命令示介面可以很方便的使用複製和粘貼(用左鍵選取要複製的,點右鍵直接就可以複製,粘貼時只需點一下右鍵。)設定方法:Git Bash快捷表徵圖(案頭表徵圖)右鍵屬性-選項,把快速編輯模式勾上就可以,如下圖:
設定Git本地項目開發庫預設路徑
如果設定了,就不用每次開啟Git再cd開啟目錄了。方法:右鍵Git Bash快捷表徵圖(案頭表徵圖)屬性,找到捷徑-起始位置,把你的項目地址放在這裡就可以了。如下圖:
配置本機使用者和郵箱
使用者名稱郵箱作用 : 我們需要設定一個使用者名稱 和 郵箱, 這是用來上傳本地倉庫到GitHub中, 在GitHub中顯示代碼上傳者;
使用命令 :
git config --global user.name "HanShuliang" //設定使用者名稱 git config --global user.email "13241153187@163.com" //設定郵箱
到此Git用戶端已安裝及GitHub配置完成,現在可以從GitHub傳輸代碼了。 git init 將一個目錄初始化為 Git 倉庫
在目錄中執行 git init,就可以建立一個 Git 倉庫了。比如,我們恰好有個目錄,裡頭有些許檔案,如下:
$ cd konnichiwa$ lsREADME hello.rb
在這個項目裡頭,我們會用各種程式設計語言寫 “Hello World” 執行個體。 到目前為止,我們只有 Ruby 的,不過,這才剛上路嘛。為了開始用 Git 對這個項目作版本控制,我們執行一下 git init。
$ git initInitialized empty Git repository in /opt/konnichiwa/.git/# 在 /opt/konnichiwa/.git 目錄初始化空 Git 倉庫完畢。
現在你可以看到在你的項目目錄中有個 .git 的子目錄。 這就是你的 Git 倉庫了,所有有關你的此項目的快照資料都存放在這裡。
$ ls -a. .. .git README hello.rb
恭喜,現在你就有了一個 Git 倉庫的架子,可以開始快照你的項目了。
簡而言之,用 git init 來在目錄中建立新的 Git 倉庫。 你可以在任何時候、任何目錄中這麼做,完全是本地化的。 git clone 複製一個 Git 倉庫,以上下其手
如果你需要與他人合作一個項目,或者想要複製一個項目,看看代碼,你就可以複製那個項目。 執行 git clone [url],[url] 為你想要複製的項目,就可以了。
$ git clone git://github.com/schacon/simplegit.gitInitialized empty Git repository in /private/tmp/simplegit/.git/remote: Counting objects: 100, done.remote: Compressing objects: 100% (86/86), done.remote: Total 100 (delta 35), reused 0 (delta 0)Receiving objects: 100% (100/100), 9.51 KiB, done.Resolving deltas: 100% (35/35), done.$ cd simplegit/$ lsREADME Rakefile lib
上述操作將複製該項目的全部記錄,讓你本地擁有這些。並且該操作將拷貝該項目的主分支, 使你能夠查看代碼,或編輯、修改。進到該目錄中,你會看到 .git 子目錄。 所有的項目資料都存在那裡。
$ ls -a. .. .git README Rakefile lib$ cd .git$ lsHEAD description info packed-refsbranches hooks logs refsconfig index objects
預設情況下,Git 會按照你提供的 URL 所指示的項目的名稱建立你的本地項目目錄。 通常就是該 URL 最後一個 / 之後的任何東西。如果你想要一個不一樣的名字, 你可以在該命令後加上它,就在那個 URL 後面。
簡而言之,使用 git clone 拷貝一個 Git 倉庫到本地,讓自己能夠查看該項目,或者進行修改。 二、基本快照
Git 的工作就是建立和儲存你的項目的快照及與之後的快照進行對比。本章將對有關建立與提交你的項目的快照的命令作介紹。
這裡有個重要的概念,Git 有一個叫做“索引”的東東,有點像是你的快照的緩衝區。這就使你能夠從更改的檔案中建立出一系列組織良好的快照,而不是一次提交所有的更改。
簡而言之,使用 git add 添加需要追蹤的新檔案和待提交的更改, 然後使用 git status 和 git diff 查看有何改動, 最後用 git commit 將你的快照記錄。這就是你要用的基本流程,絕大部分時候都是這樣的。 git add 添加檔案到緩衝
在 Git 中,在提交你修改的檔案之前,你需要把它們添加到緩衝。如果該檔案是新建立的,你可以執行 git add 將該檔案添加到緩衝,但是,即使該檔案已經被追蹤了 —— 也就是說,曾經提交過了 —— 你仍然需要執行 git add 將新更改的檔案添加到緩衝去。讓我們看幾個例子:
回到我們的 Hello World 樣本,初始化該項目之後,我們就要用 git add 將我們的檔案添加進去了。 我們可以用 git status 看看我們的項目的目前狀態。
$ git status -s?? README?? hello.rb
我們有倆尚未被追蹤的檔案,得添加一下。
$ git add README hello.rb
現在我們再執行 git status,就可以看到這倆檔案已經加上去了。
$ git status -sA READMEA hello.rb
新項目中,添加所有檔案很普遍,可以在當前工作目錄執行命令:git add .。 因為 Git 會遞迴地將你執行命令時所在的目錄中的所有檔案添加上去,所以如果你將當前的工作目錄作為參數, 它就會追蹤那兒的所有檔案了。如此,git add . 就和 git add README hello.rb 有一樣的效果。 此外,效果一致的還有