一、git簡介
概述
git是先進的分佈式版本控制系統,有沒有網都可以工作,相對svn來說更方便、數據更不易丟失。
參考文獻
二、git安裝
Mac OS X上安裝git
1.方法一:通過homebrew安裝git (使用 Homebrew 可以安裝 Apple 沒有預裝但你需要的東西)
安裝brew:$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
安裝git: $ brew install git
具體方法請參考homebrew的文檔:http://brew.sh/
2.方法二:安裝xcode
從AppStore安裝Xcode,Xcode集成了Git,xcode主要用於mac和ios app開發,佔用空間比較大。只用git的話,推薦方法一。
Linux上安裝git
在 Fedora 上用 yum 安裝:
$ yum install git-core
在 Ubuntu 這類 Debian 體系的系統上,可以用 apt-get 安裝:
$ apt-get install git
Windows上安裝Git
下載git: https://git-scm.com/downloads
安裝:初學者選擇默認選項,一路next到安裝結束即可
三、命令行使用git
創建版本庫
1.創建一個空目錄:
$ mkdir gittest
$ cd gittest
pwd命令用於顯示當前目錄(這個蠻常用的)
注意:爲了避免遇到各種莫名其妙的問題,請確保目錄名不包含中文
2.通過git init命令把這個目錄變成Git可以管理的倉庫
$ git init
這是創建版本庫的核心命令,它其實新建了一個隱藏的git目錄,ls -ah命令可以顯示這個隱藏的.git目錄
添加文件到版本庫
首先確保文件已在gittest(版本庫目錄)中,另外強烈建議使用標準的UTF-8編碼。
1.用命令git add告訴Git,把文件添加到倉庫
$ git add gitAddHelloWorld.txt
“沒有消息就是好消息”,說明添加成功。
2.用命令git commit告訴Git,把文件提交到倉庫,引號中是本次版本註釋說明,建議註釋簡明扼要,方便查找。
$ git commit -m “這裏寫的是註釋:git add demo”
刪除文件
用命令git rm刪掉,並且git commit:
git rm <filename>
git commit -m “刪除原因”
誤刪可用git checkout 還原(見下文)
檢出文件
git checkout – <fileName>
該命令其實是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”
假如你想丟棄你在本地的所有改動與提交,可以到服務器上獲取最新的版本歷史,並將你本地主分支指向它:
git fetch origin
git reset --hard origin/master
查看狀態
查看倉庫狀態:
git status
查看文件修改狀態:
$ git diff gitAddHelloworld.txt
查看記錄
查看歷史版本記錄:
git log 命令顯示從最近到最遠的提交日誌
如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上–pretty=oneline參數
$ git log --pretty=oneline
查看命令記錄:
$ git reflog
回退版本
回退到最近版本:HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,上n個版本,可以簡寫成HEAD~n。
$ git reset --hard HEAD^
根據版本號commit id回退:
$ git reset --hard <commit id前幾位>
還原單個文件:
git reset HEAD <file> ,它可以把暫存區的修改撤銷掉(unstage),重新放回工作區
遠程倉庫(github)
GitHub是提供Git倉庫託管服務的網站,註冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。
克隆倉庫
本地倉庫克隆:
git clone /path/to/repository
遠程倉庫克隆:
git clone username@host:/path/to/repository
例如:$ git clone https://github.com/jquery/jquery.git
該命令會在本地主機生成一個目錄,與遠程主機的版本庫同名。如果要指定不同的目錄名,可以將目錄名作爲git clone命令的第二個參數。
$ git clone <版本庫的網址> <本地目錄名>
推送改動
關聯一個遠程庫:
git remote add origin git@server-name:path/repo-name.git
第一次推送master分支的所有內容:
git push -u origin master
此後,每次本地提交後,推送最新修改到遠程庫:
git push origin master
分支(多人協作)
分支是用來將特性開發絕緣開來的。在你創建倉庫的時候,master 是"默認的"分支。在其他分支上進行開發,完成後再將它們合併到主分支上。
1.創建分支
創建一個叫做"leon"的分支,並切換過去:
git checkout -b leon
2.查看分支
git branch
若要查看各個分支最後一個提交對象的信息,運行
git branch -v
要從該清單中篩選出你已經(或尚未)與當前分支合併的分支,可以用 --merged 和 --no-merged 選項(Git 1.5.6 以上版本)
git branch --merged
3.切換回主分支
git checkout master
4.刪除分支
git branch -d leon
5.多人協作
推送分支:除非你將分支推送到遠端倉庫,不然該分支就是 不爲他人所見的,
git push origin
6.獲取更新:
git pull 該命令在你的工作目錄中獲取(fetch) 並 合併(merge) 遠端的改動。
7.合併分支:
合併其他分支到你的當前分支(例如 master)
git merge <其他branch>
8.解決衝突:
pull或merge時可能出現衝突,Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,需要我們手動修改,解決衝突之後,再提交。
9.預覽差異:
在合併改動之前,你可以使用如下命令預覽差異
git diff <source_branch> <target_branch>
10.合併情況:
合併完成後可以用帶參數的git log也可以看到分支的合併情況
git log --graph --pretty=oneline --abbrev-commit
分支策略
master-dev-personal分支
master分支: 僅用來發布新版本,最穩定;
dev分支: 團隊每個人都在dev分支上幹活,每個人都有personal分支,時不時地往dev分支上合併就可以了;該分支是不穩定的,到某個時候,比如1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;
pesonal分支(Bob、Michael): 個人分支,因爲創建、合併和刪除分支非常快,所以Git鼓勵使用分支完成某個任務,合併後再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。
bug分支(保存和恢復工作現場)
修復bug時,我們會通過創建新的bug分支進行修復,然後合併,最後刪除;當手頭工作沒有完成時,先把工作現場git stash一下,然後去修復bug,修復後,再git stash pop,回到工作現場。
典型bug修復git流程:
$ git status // 查看當前狀態
$ git stash // 保護工作現場
$ git checkout master // 切回到主分支
$ git checkout -b issue-101 // 創建修復bug分支issue-101,開始修復bug
$ git add // bug修復完後,添加和本地提交
$ git commit -m “fix bug 101”
$ git checkout master // 切換到主分區
$ git merge --no-ff -m “merged bug fix 101” issue-101 // 合併bug分支
$ git branch -d issue-001 // 刪除bug分支
$ git checkout yourBranck // 切回自己的分支,恢復現場繼續工作
$ git stash list // 查看存儲的工作現場列表
恢復方式一:git stash pop 恢復的同時把stash內容也刪了
恢復方式二:git stash apply 恢復 ,但是恢復後,stash內容並不刪除
feature分支
開發一個新feature,最好新建一個分支
如果要丟棄一個沒有被合併過的分支,可以通過
git branch -D 強行刪除
標籤管理
tag就是一個讓人容易記住的有意義的名字,它跟某個commit綁在一起,我們常用作產品發佈的版本號。
1.創建標籤
git tag 用於新建一個標籤,默認爲HEAD,也可以指定一個commit id;
git tag -a -m “blablabla…” 可以指定標籤信息;
git tag -s -m “blablabla…” 可以用PGP簽名標籤;
git tag可以查看所有標籤。
$ git show v0.9 可以查看當前標籤信息
2.操作標籤
git push origin 可以推送一個本地標籤;
git push origin --tags可以推送全部未推送過的本地標籤;
git tag -d 可以刪除一個本地標籤;
git push origin :refs/tags/可以刪除一個遠程標籤。
eclipse中使用git
下列將結合github講解eclipse中使用git, 其他ide中使用git大同小異。
step1: 克隆倉庫
新建或搜索一個github遠程倉庫,複製其url (ssh或https , 這裏我們暫時先選擇https,ssh之後補充)
eclipse中打開git資源庫,git clone資源庫:複製url然後一路next即可
這裏可以選擇資源庫克隆存放位置
step2:導入工程
資源庫目錄/Working Tree -> Import Projects
或
[常見問題] 導入工程出現紅叉或歎號
原因分析:markers選項卡其實會說明原因,一般是jdk或server的jar包問題
解決方案:
右鍵項目->Build Path->configure build path
將有問題的jar包替換爲eclipse已配置的可用的jar包即可
step3:體驗常見的版本控制功能
- (1)Add to Index:添加文件到版本庫
- (2)Commit:提交修改本地倉庫
- (3)Push:推送至遠程倉庫,位置 Push Head 或者 Commit…->Commit and Push
- (4)pull:拉取遠程庫
- (5)synchronize workspace:與本地版本庫同步; Advance->sysnchronize:與遠程倉庫同步
- (6)reset:回退/還原至某一版本;單個文件還原:右鍵文件->repalce with -> 相應版本(如Head)
後記:個人項目用git, 公司項目用svn, 魚與熊掌兼得,棒~ :)
Thank you for reading.