Git經常使用命令和Git團隊使用規範指南

前言

在2005年的某一天,Linux之父Linus Torvalds 發佈了他的又一個里程碑做品——Git。它的出現改變了軟件開發流程,大大地提升了開發流暢度,直到如今仍十分流行,徹底沒有衰退的跡象。其實通常狀況下,只須要掌握git的幾個經常使用命令便可,可是在使用的過程當中不免會遇到各類複雜的需求,這時候常常須要搜索,很是麻煩,故總結了一下本身日常會用到的git操做。本文根據團隊實踐記錄Git入門指南和Git經常使用命令,文章中不只記錄了Git的搭建和使用教程,還參考了大量Git團隊使用規範上的經驗,但願你們能夠結合本身團隊的實際應用場景讓Git協做優雅的落地。html

Git是目前世界上最早進的分佈式版本控制系統git

更新記錄

2016年04月22日 - 初稿github

閱讀原文 - http://wsgzao.github.io/post/git/shell

擴展閱讀緩存

Git Book - https://git-scm.com/book/zh/
git簡明指南 - http://rogerdudler.github.io/git-guide/index.zh.html
經常使用 Git 命令清單 - http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
猴子都能懂的GIT入門 - http://backlogtool.com/git-guide/cn/
Git教程 - http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000bash

SVN與Git的最主要的區別

SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而幹活的時候,用的都是本身的電腦,因此首先要從中央服務器哪裏獲得最新的版本,而後幹活,幹完後,須要把本身作完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工做,若是在局域網還能夠,帶寬夠大,速度夠快,若是在互聯網下,若是網速慢的話,就納悶了。服務器

Git是分佈式版本控制系統,那麼它就沒有中央服務器的,每一個人的電腦就是一個完整的版本庫,這樣,工做的時候就不須要聯網了,由於版本都是在本身的電腦上。既然每一個人的電腦都有一個完整的版本庫,那多我的如何協做呢?好比說本身在電腦上改了文件A,其餘人也在電腦上改了文件A,這時,大家兩之間只需把各自的修改推送給對方,就能夠互相看到對方的修改了。app

Git搭建和使用

Git上手並不難,深刻學習仍是建議多實踐,能夠參考擴展閱讀中廖雪峯的Git教程ssh

Git服務端

服務端搭建Git很簡單,有更多需求不妨試試Gogs和Gitlab分佈式

使用Gogs輕鬆搭建可能比GitLab更好用的Git服務平臺 - http://wsgzao.github.io/post/gogs/

#安裝git
sudo apt-get install git
yum install git

#建立一個git用戶,用來運行git服務
sudo adduser git

#建立證書使用公鑰免密碼登陸(可選)
ssh-keygen -t rsa
vi ~/.ssh/authorized_keys

#初始化Git倉庫
sudo git init --bare sample.git
sudo chown -R git:git sample.git

#禁用shell登陸
vi /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

#在客戶端上克隆遠程倉庫
git clone git@server:/srv/sample.git

管理公鑰推薦使用Gitosis
Gitosis - https://github.com/res0nat0r/gitosis
Gitosis配置手記 - http://debugo.com/gitosis/

管理權限推薦使用Gitolite
Gitolite - https://github.com/sitaramc/gitolite

Git客戶端

Git客戶端能夠按我的習慣來選擇,遵照團隊協做中的Git規範標準纔是更重要的

Git - https://git-scm.com/
TortoiseGit - https://tortoisegit.org/
SourceTree - https://www.sourcetreeapp.com/

#以最基本的Git命令行爲例,先下載Git
https://git-scm.com/download/

#配置git提交用戶名和郵箱,定義別名方便區分
git config --global user.name "你的姓名"
git config --global user.email "you@example.com"

#克隆倉庫
git clone cap@172.28.70.243:/cap/cap.git

$ git clone cap@172.28.70.243:/cap/cap.git
Cloning into 'cap'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

#測試推送
touch README
git add README
git commit -m "add readme"
git push origin master

Counting objects: 3, done.
Writing objects: 100% (3/3), 199 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To cap@172.28.70.243:/cap/cap.git
 * [new branch]      master -> master

Git經常使用命令

符號約定

  • <xxx> 自定義內容

  • [xxx] 可選內容

  • [<xxx>]自定義可選內容

#初始設置
git config --global user.name "<用戶名>" #設置用戶名
git config --global user.email "<電子郵件>" #設置電子郵件

#本地操做
git add [-i] #保存更新,-i爲逐個確認。
git status #檢查更新。
git commit [-a] -m "<更新說明>" #提交更新,-a爲包含內容修改和增刪,-m爲說明信息,也可使用 -am。

#遠端操做
git clone <git地址> #克隆到本地。
git fetch #遠端抓取。
git merge #與本地當前分支合併。
git pull [<遠端別名>] [<遠端branch>] #抓取併合並,至關於第二、3步
git push [-f] [<遠端別名>] [<遠端branch>] #推送到遠端,-f爲強制覆蓋
git remote add <別名> <git地址> #設置遠端別名
git remote [-v] #列出遠端,-v爲詳細信息
git remote show <遠端別名> #查看遠端信息
git remote rename <遠端別名> <新遠端別名> #重命名遠端
git remote rm <遠端別名> #刪除遠端
git remote update [<遠端別名>] #更新分支列表

#分支相關
git branch [-r] [-a] #列出分支,-r遠端 ,-a所有
git branch <分支名> #新建分支
git branch -b <分支名> #新建並切換分支
git branch -d <分支名> #刪除分支
git checkout <分支名> #切換到分支
git checkout -b <本地branch> [-t <遠端別名>/<遠端分支>] #-b新建本地分支並切換到分支, -t綁定遠端分支
git merge <分支名> #合併某分支到當前分支

Git經常使用命令 - http://gityuan.com/2015/06/27/git-notes/

  • workspace: 本地的工做目錄。(記做A)

  • index:緩存區域,臨時保存本地改動。(記做B)

  • local repository: 本地倉庫,只想最後一次提交HEAD。(記做C)

  • remote repository:遠程倉庫。(記做D)

如下全部的命令的功能說明,都採用上述的標記的A、B、C、D的方式來闡述。

#初始化
git init //建立
git clone /path/to/repository //檢出
git config --global user.email "you@example.com" //配置email
git config --global user.name "Name" //配置用戶名

#操做
git add <file> // 文件添加,A → B
git add . // 全部文件添加,A → B

git commit -m "代碼提交信息" //文件提交,B → C
git commit --amend //與上次commit合併, *B → C

git push origin master //推送至master分支, C → D
git pull //更新本地倉庫至最新改動, D → A
git fetch //抓取遠程倉庫更新, D → C

git log //查看提交記錄
git status //查看修改狀態
git diff//查看詳細修改內容
git show//顯示某次提交的內容

#撤銷操做
git reset <file>//某個文件索引會回滾到最後一次提交, C → B
git reset//索引會回滾到最後一次提交, C → B
git reset --hard // 索引會回滾到最後一次提交, C → B → A

git checkout // 從index複製到workspace, B → A
git checkout -- files // 文件從index複製到workspace, B → A
git checkout HEAD -- files // 文件從local repository複製到workspace, C → A

#分支相關
git checkout -b branch_name //建立名叫「branch_name」的分支,並切換過去
git checkout master //切換回主分支
git branch -d branch_name // 刪除名叫「branch_name」的分支
git push origin branch_name //推送分支到遠端倉庫
git merge branch_name // 合併分支branch_name到當前分支(如master)
git rebase //衍合,線性化的自動, D → A

#衝突處理
git diff //對比workspace與index
git diff HEAD //對於workspace與最後一次commit
git diff <source_branch> <target_branch> //對比差別
git add <filename> //修改完衝突,須要add以標記合併成功

#其餘
gitk //開燈圖形化git
git config color.ui true //彩色的 git 輸出
git config format.pretty oneline //顯示歷史記錄時,每一個提交的信息只顯示一行
git add -i //交互式添加文件到暫存區

Git使用規範

Git 使用規範流程 - http://www.ruanyifeng.com/blog/2015/08/git-use-process.html
團隊中的 Git 實踐 - https://ourai.ws/posts/working-with-git-in-team/
構家網 git 團隊協做使用規範 v2 - http://wenku.baidu.com/view/e1430d1b7f1922791788e81e

Git使用規範提醒

  • 使用Git過程當中,必須經過建立分支進行開發,堅定禁止在主幹分支上直接開發。review的同事有責任檢查其餘同事是否遵循分支規範。

  • 在Git中,默認是不會提交空目錄的,若是想提交某個空目錄到版本庫中,須要在該目錄下新建一個 .gitignore 的空白文件,就能夠提交了

  • 把外部文件歸入到本身的 Git 分支來的時候必定要記得是先比對,確認全部修改都是本身修改的,而後再歸入。否則,容易出現代碼回溯

  • 多人協做時,不要各自在本身的 Git 分支開發,而後發文件合併。正確的方法應該是開一個遠程分支,而後一塊兒在遠程分支裏協做。否則,容易出現代碼回溯(即別人的代碼被覆蓋的狀況)

  • 每一個人提交代碼是必定要 git diff 看提交的東西是否是都是本身修改的。若是有不是本身修改的內容,極可能就是代碼回溯

  • review 代碼的時候若是看到有被刪除掉的代碼,必定要確實是不是寫代碼的同事本身刪除的。若是不是,極可能就是代碼回溯

相關文章
相關標籤/搜索