Git 快速上手精華梳理

Sandy發表於2017-09-16

Git介紹

分散式 : Git版本控制系統是一個分散式的系統, 是用來儲存工程原始碼歷史狀態的命令列工具;

儲存點 : Git的儲存點可以追蹤原始碼中的檔案, 並能得到某一個時間點上的整個工程專案額狀態; 可以在該儲存點將多人提交的原始碼合併, 也可以會退到某一個儲存點上;

Git離線操作性 :Git可以離線進行程式碼提交, 因此它稱得上是完全的分散式處理, Git所有的操作不需要線上進行; 這意味著Git的速度要比SVN等工具快得多, 因為SVN等工具需要線上時才能操作, 如果網路環境不好, 提交程式碼會變得非常緩慢;

Git基於快照 : SVN等老式版本控制工具是將提交點儲存成補丁檔案, Git提交是將提交點指向提交時的專案快照, 提交的東西包含一些後設資料(作者, 日期, GPG等);

Git的分支和合並 : 分支模型是Git最顯著的特點, 因為這改變了開發者的開發模式, SVN等版本控制工具將每個分支都要放在不同的目錄中, Git可以在同一個目錄中切換不同的分支;
分支即時性 : 建立和切換分支幾乎是同時進行的, 使用者可以上傳一部分分支, 另外一部分分支可以隱藏在本地, 不必將所有的分支都上傳到GitHub中去;
分支靈活性 : 使用者可以隨時 建立 合併 刪除分支, 多人實現不同的功能, 可以建立多個分支進行開發, 之後進行分支合併, 這種方式使開發變得快速, 簡單, 安全;

下載Git

下載 git OSX 版:git-scm.com/download/ma…
下載 git Windows 版:git-scm.com/download/wi…
下載 git Linux 版:git-scm.com/download/li…

安裝Git

Linux
$ sudo yum install git
或者
$ sudo apt-get install git
Mac
直接在 Terminal 執行 git 命令, 如果沒有會提示安裝方法.

Git 工作流程

簡單說Git的一些用法

.gitignore檔案
遮蔽檔案 : .gitignore檔案是告訴Git哪些目錄或者檔案需要忽略, 這些檔案將不被提交;
常用場景 : 寫完程式碼後會執行變異除錯等操作, 使用 .gitignore 檔案將這些編譯後的檔案遮蔽, 這些檔案不需要Git工具進行管理;
Android中的.gitignore : 在Android中 bin 和 gen 兩個目錄可以忽略;
.gitignore位置 : 專案根目錄下;

過濾模式 : Git中的 .gitignore 中有兩種模式,開放模式 和保守模式,保守模式的優先順序要高於開放模式;

開放模式 : 設定哪些檔案 活 目錄 被過濾, 凡是在檔案中列出的檔案或者目錄都要被過濾掉;
-- 過濾目錄 : /bin/ 就是將bin目錄過濾, 該檔案下的所有目錄和檔案都不被提交;
-- 過濾某個型別檔案 : .zip .class 就是過濾zip 和 class 字尾的檔案, 這些檔案不被提交;
-- 過濾指定檔案 : /gen/R.Java, 過濾該檔案, 該檔案不被提交;

保守模式 : 設定哪些檔案不被過濾, 凡是列在其中的檔案都要完整的提交上去;
-- 跟蹤目錄 : !/src , 該目錄下的所有檔案都要被提交;
-- 跟蹤某類檔案 : !*.Java , 凡是java檔案都要保留;
-- 跟蹤指定檔案 : !/AndroidManifest.xml , 該檔案需要保留, 提交上去;

配置原則 : 一般情況下采用開放模式魚保守模式共同使用;
eg : 一個目錄下有很多目錄和檔案, 當我們只需要保留其中的一個檔案的時候, 先用開放模式不保留這些檔案, 然後用保守模式將這個檔案留下來, 保守模式的優先順序要高於開放模式;

git常用命令速查表

Git配置

git config --global user.name "robbin"
git config --global user.email "fankai@gmail.com"
git config --global color.ui true
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global core.editor "mate -w"    # 設定Editor使用textmate
git config -l  # 列舉所有配置
使用者的git配置檔案~/.gitconfig
Git常用命令
檢視、新增、提交、刪除、找回,重置修改檔案
git help <command>  # 顯示command的help
git show            # 顯示某次提交的內容
git show $id

git co  -- <file>   # 拋棄工作區修改
git co  .           # 拋棄工作區修改

git add <file>      # 將工作檔案修改提交到本地暫存區
git add .           # 將所有修改過的工作檔案提交暫存區

git rm <file>       # 從版本庫中刪除檔案
git rm <file> --cached  # 從版本庫中刪除檔案,但不刪除檔案

git reset <file>    # 從暫存區恢復到工作檔案
git reset -- .      # 從暫存區恢復到工作檔案
git reset --hard    # 恢復最近一次提交過的狀態,即放棄上次提交後的所有本次修改

git ci <file>
git ci .
git ci -a           # 將git add, git rm和git ci等操作都合併在一起做
git ci -am "some comments"
git ci --amend      # 修改最後一次提交記錄

git revert <$id>    # 恢復某次提交的狀態,恢復動作本身也建立了一次提交物件
git revert HEAD     # 恢復最後一次提交的狀態
檢視檔案diff
git diff <file>     # 比較當前檔案和暫存區檔案差異
git diff
git diff <$id1> <$id2>   # 比較兩次提交之間的差異
git diff <branch1>..<branch2> # 在兩個分支之間比較
git diff --staged   # 比較暫存區和版本庫差異
git diff --cached   # 比較暫存區和版本庫差異
git diff --stat     # 僅僅比較統計資訊
檢視提交記錄
git log
git log <file>      # 檢視該檔案每次提交記錄
git log -p <file>   # 檢視每次詳細修改內容的diff
git log -p -2       # 檢視最近兩次詳細修改內容的diff
git log --stat      # 檢視提交統計資訊
tig
Mac上可以使用tig代替diff和log,brew install tig
Git 本地分支管理
檢視、切換、建立和刪除分支
git br -r           # 檢視遠端分支
git br <new_branch> # 建立新的分支
git br -v           # 檢視各個分支最後提交資訊
git br --merged     # 檢視已經被合併到當前分支的分支
git br --no-merged  # 檢視尚未被合併到當前分支的分支

git co <branch>     # 切換到某個分支
git co -b <new_branch> # 建立新的分支,並且切換過去
git co -b <new_branch> <branch>  # 基於branch建立新的new_branch

git co $id          # 把某次歷史提交記錄checkout出來,但無分支資訊,切換到其他分支會自動刪除
git co $id -b <new_branch>  # 把某次歷史提交記錄checkout出來,建立成一個分支

git br -d <branch>  # 刪除某個分支
git br -D <branch>  # 強制刪除某個分支 (未被合併的分支被刪除的時候需要強制)
分支合併和rebase
git merge <branch>               # 將branch分支合併到當前分支
git merge origin/master --no-ff  # 不要Fast-Foward合併,這樣可以生成merge提交

git rebase master <branch>       # 將master rebase到branch,相當於:
git co <branch> && git rebase master && git co master && git merge <branch>
Git補丁管理(方便在多臺機器上開發同步時用)
git diff > ../sync.patch         # 生成補丁
git apply ../sync.patch          # 打補丁
git apply --check ../sync.patch  # 測試補丁能否成功
Git暫存管理
git stash                        # 暫存
git stash list                   # 列所有stash
git stash apply                  # 恢復暫存的內容
git stash drop                   # 刪除暫存區
Git遠端分支管理
git pull                         # 抓取遠端倉庫所有分支更新併合併到本地
git pull --no-ff                 # 抓取遠端倉庫所有分支更新併合併到本地,不要快進合併
git fetch origin                 # 抓取遠端倉庫更新
git merge origin/master          # 將遠端主分支合併到本地當前分支
git co --track origin/branch     # 跟蹤某個遠端分支建立相應的本地分支
git co -b <local_branch> origin/<remote_branch>  # 基於遠端分支建立本地分支,功能同上

git push                         # push所有分支
git push origin master           # 將本地主分支推到遠端主分支
git push -u origin master        # 將本地主分支推到遠端(如無遠端主分支則建立,用於初始化遠端倉庫)
git push origin <local_branch>   # 建立遠端分支, origin是遠端倉庫名
git push origin <local_branch>:<remote_branch>  # 建立遠端分支
git push origin :<remote_branch>  #先刪除本地分支(git br -d <branch>),然後再push刪除遠端分支
Git遠端倉庫管理
git remote -v                    # 檢視遠端伺服器地址和倉庫名稱
git remote show origin           # 檢視遠端伺服器倉庫狀態
git remote add origin git@github:robbin/robbin_site.git         # 新增遠端倉庫地址
git remote set-url origin git@github.com:robbin/robbin_site.git # 設定遠端倉庫地址(用於修改遠端倉庫地址)
git remote rm <repository>       # 刪除遠端倉庫
建立遠端倉庫
git clone --bare robbin_site robbin_site.git  # 用帶版本的專案建立純版本倉庫
scp -r my_project.git git@git.csdn.net:~      # 將純倉庫上傳到伺服器上

mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在伺服器建立純倉庫
git remote add origin git@github.com:robbin/robbin_site.git    # 設定遠端倉庫地址
git push -u origin master                                      # 客戶端首次提交
git push -u origin develop  # 首次將本地develop分支提交到遠端develop分支,並且track

git remote set-head origin master   # 設定遠端倉庫的HEAD指向master分支
也可以命令設定跟蹤遠端庫和本地庫
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop複製程式碼

4張詳解 git思維導圖

部分圖片來源於網路,如有侵權,請告知!複製程式碼

由於高清圖檔案過大,大家可以關注公眾號daimajiqiao 回覆18 即可獲得高清git思維導圖,感謝支援

學習資料

GitX (L) (OSX, open source):gitx.laullon.com/
Tower (OSX):www.git-tower.com/
Source Tree (OSX, free):www.sourcetreeapp.com/
GitHub for Mac (OSX, free):mac.github.com/
GitBox (OSX):itunes.apple.com/gb/app/gitb…
Git 社群參考書:book.git-scm.com/
專業 Git:progit.org/book/
如 git 思考:think-like-a-git.net/
GitHub 幫助:help.github.com/
圖形化的 Git 指南一則:marklodato.github.com/visual-git-…
Git教程:www.liaoxuefeng.com/wiki/001373…

關注公眾號ID:daimajiqiao 回覆 18 即可獲得git學習資料以及git高清常用命名圖譜,付出總會有收穫

相關文章