Git常用命令和Git團隊使用規(guī)范指南

前言

在2005年的某一天剑勾,Linux之父Linus Torvalds 發(fā)布了他的又一個里程碑作品——Git埃撵。它的出現(xiàn)改變了軟件開發(fā)流程,大大地提高了開發(fā)流暢度虽另,直到現(xiàn)在仍十分流行暂刘,完全沒有衰退的跡象。其實一般情況下捂刺,只需要掌握git的幾個常用命令即可鸳惯,但是在使用的過程中難免會遇到各種復(fù)雜的需求,這時候經(jīng)常需要搜索叠萍,非常麻煩芝发,故總結(jié)了一下自己平常會用到的git操作。本文根據(jù)團隊實踐記錄Git入門指南和Git常用命令苛谷,文章中不僅記錄了Git的搭建和使用教程辅鲸,還參考了大量Git團隊使用規(guī)范上的經(jīng)驗,希望大家可以結(jié)合自己團隊的實際應(yīng)用場景讓Git協(xié)作優(yōu)雅的落地腹殿。

Git是目前世界上最先進的分布式版本控制系統(tǒng)

更新記錄

2016年04月22日 - 初稿

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

擴展閱讀

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/0013739516305929606dd18361248578c67b8067c8c017b000

SVN與Git的最主要的區(qū)別

SVN是集中式版本控制系統(tǒng)独悴,版本庫是集中放在中央服務(wù)器的,而干活的時候锣尉,用的都是自己的電腦刻炒,所以首先要從中央服務(wù)器哪里得到最新的版本,然后干活自沧,干完后坟奥,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作拇厢,如果在局域網(wǎng)還可以爱谁,帶寬夠大,速度夠快孝偎,如果在互聯(lián)網(wǎng)下访敌,如果網(wǎng)速慢的話,就納悶了衣盾。

Git是分布式版本控制系統(tǒng)寺旺,那么它就沒有中央服務(wù)器的爷抓,每個人的電腦就是一個完整的版本庫,這樣阻塑,工作的時候就不需要聯(lián)網(wǎng)了蓝撇,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫叮姑,那多個人如何協(xié)作呢?比如說自己在電腦上改了文件A据悔,其他人也在電腦上改了文件A传透,這時,你們兩之間只需把各自的修改推送給對方极颓,就可以互相看到對方的修改了朱盐。

Git搭建和使用

Git上手并不難,深入學(xué)習(xí)還是建議多實踐菠隆,可以參考擴展閱讀中廖雪峰的Git教程

Git服務(wù)端

服務(wù)端搭建Git很簡單兵琳,有更多需求不妨試試Gogs和Gitlab

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

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

#創(chuàng)建一個git用戶,用來運行g(shù)it服務(wù)
sudo adduser git

#創(chuàng)建證書使用公鑰免密碼登錄(可選)
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/

管理權(quán)限推薦使用Gitolite
Gitolite - https://github.com/sitaramc/gitolite

Git客戶端

Git客戶端可以按個人習(xí)慣來選擇骇径,遵守團隊協(xié)作中的Git規(guī)范標(biāo)準(zhǔn)才是更重要的

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

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

#配置git提交用戶名和郵箱,定義別名方便區(qū)分
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> 自定義內(nèi)容
  • [xxx] 可選內(nèi)容
  • [<xxx>]自定義可選內(nèi)容
#初始設(shè)置
git config --global user.name "<用戶名>" #設(shè)置用戶名
git config --global user.email "<電子郵件>" #設(shè)置電子郵件

#本地操作
git add [-i] #保存更新破衔,-i為逐個確認(rèn)清女。
git status #檢查更新。
git commit [-a] -m "<更新說明>" #提交更新晰筛,-a為包含內(nèi)容修改和增刪嫡丙,-m為說明信息,也可以使用 -am读第。

#遠端操作
git clone <git地址> #克隆到本地曙博。
git fetch #遠端抓取。
git merge #與本地當(dāng)前分支合并怜瞒。
git pull [<遠端別名>] [<遠端branch>] #抓取并合并,相當(dāng)于第2父泳、3步
git push [-f] [<遠端別名>] [<遠端branch>] #推送到遠端,-f為強制覆蓋
git remote add <別名> <git地址> #設(shè)置遠端別名
git remote [-v] #列出遠端吴汪,-v為詳細信息
git remote show <遠端別名> #查看遠端信息
git remote rename <遠端別名> <新遠端別名> #重命名遠端
git remote rm <遠端別名> #刪除遠端
git remote update [<遠端別名>] #更新分支列表

#分支相關(guān)
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 <分支名> #合并某分支到當(dāng)前分支

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

  • workspace: 本地的工作目錄。(記作A)
  • index:緩存區(qū)域浇坐,臨時保存本地改動睬捶。(記作B)
  • local repository: 本地倉庫,只想最后一次提交HEAD近刘。(記作C)
  • remote repository:遠程倉庫擒贸。(記作D)

以下所有的命令的功能說明臀晃,都采用上述的標(biāo)記的A、B介劫、C徽惋、D的方式來闡述。

#初始化
git init //創(chuàng)建
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 //查看修改狀態(tài)
git diff//查看詳細修改內(nèi)容
git show//顯示某次提交的內(nèi)容

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

git checkout // 從index復(fù)制到workspace, B → A
git checkout -- files // 文件從index復(fù)制到workspace成黄, B → A
git checkout HEAD -- files // 文件從local repository復(fù)制到workspace呐芥, C → A

#分支相關(guān)
git checkout -b branch_name //創(chuàng)建名叫“branch_name”的分支,并切換過去
git checkout master //切換回主分支
git branch -d branch_name // 刪除名叫“branch_name”的分支
git push origin branch_name //推送分支到遠端倉庫
git merge branch_name // 合并分支branch_name到當(dāng)前分支(如master)
git rebase //衍合奋岁,線性化的自動思瘟, D → A

#沖突處理
git diff //對比workspace與index
git diff HEAD //對于workspace與最后一次commit
git diff <source_branch> <target_branch> //對比差異
git add <filename> //修改完沖突,需要add以標(biāo)記合并成功

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

Git使用規(guī)范

Git 使用規(guī)范流程 - http://www.ruanyifeng.com/blog/2015/08/git-use-process.html
團隊中的 Git 實踐 - https://ourai.ws/posts/working-with-git-in-team/
構(gòu)家網(wǎng) git 團隊協(xié)作使用規(guī)范 v2 - http://wenku.baidu.com/view/e1430d1b7f1922791788e81e

Git使用規(guī)范提醒

  • 使用Git過程中潮太,必須通過創(chuàng)建分支進行開發(fā),堅決禁止在主干分支上直接開發(fā)虾攻。review的同事有責(zé)任檢查其他同事是否遵循分支規(guī)范铡买。
  • 在Git中,默認(rèn)是不會提交空目錄的霎箍,如果想提交某個空目錄到版本庫中奇钞,需要在該目錄下新建一個 .gitignore 的空白文件,就可以提交了
  • 把外部文件納入到自己的 Git 分支來的時候一定要記得是先比對漂坏,確認(rèn)所有修改都是自己修改的景埃,然后再納入。不然顶别,容易出現(xiàn)代碼回溯
  • 多人協(xié)作時谷徙,不要各自在自己的 Git 分支開發(fā),然后發(fā)文件合并驯绎。正確的方法應(yīng)該是開一個遠程分支完慧,然后一起在遠程分支里協(xié)作。不然剩失,容易出現(xiàn)代碼回溯(即別人的代碼被覆蓋的情況)
  • 每個人提交代碼是一定要 git diff 看提交的東西是不是都是自己修改的屈尼。如果有不是自己修改的內(nèi)容册着,很可能就是代碼回溯
  • review 代碼的時候如果看到有被刪除掉的代碼,一定要確實是否是寫代碼的同事自己刪除的脾歧。如果不是甲捏,很可能就是代碼回溯
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鞭执,隨后出現(xiàn)的幾起案子司顿,更是在濱河造成了極大的恐慌,老刑警劉巖兄纺,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件大溜,死亡現(xiàn)場離奇詭異,居然都是意外死亡囤热,警方通過查閱死者的電腦和手機猎提,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門获三,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旁蔼,“玉大人,你說我怎么就攤上這事疙教」琢模” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵贞谓,是天一觀的道長限佩。 經(jīng)常有香客問我,道長裸弦,這世上最難降的妖魔是什么祟同? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮理疙,結(jié)果婚禮上晕城,老公的妹妹穿的比我還像新娘。我一直安慰自己窖贤,他們只是感情好砖顷,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赃梧,像睡著了一般滤蝠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上授嘀,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天物咳,我揣著相機與錄音,去河邊找鬼蹄皱。 笑死所森,一個胖子當(dāng)著我的面吹牛囱持,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焕济,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纷妆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晴弃?” 一聲冷哼從身側(cè)響起掩幢,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎上鞠,沒想到半個月后际邻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡芍阎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年世曾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谴咸。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡轮听,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岭佳,到底是詐尸還是另有隱情血巍,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布珊随,位于F島的核電站述寡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叶洞。R本人自食惡果不足惜鲫凶,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衩辟。 院中可真熱鬧螟炫,春花似錦、人聲如沸惭婿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽财饥。三九已至换吧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钥星,已是汗流浹背沾瓦。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贯莺。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓风喇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缕探。 傳聞我的和親對象是個殘疾皇子魂莫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)爹耗,斷路器耙考,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,656評論 9 163
  • 起:現(xiàn)如今人們喜歡舉行聚會,一些人認(rèn)為舉行聚會是對金錢的浪費潭兽,另一些人認(rèn)為這對人們與社會都有利倦始。 立:我認(rèn)為對個人...
    IMN閱讀 307評論 0 0
  • 第三章:有情人互訴衷腸吳總尋機接近鐘教授 01 “奇了怪了,明明聽到那么急促的腳步聲山卦,人呢鞋邑?這么快就走遠了?”袁兵...
    藍夢奇閱讀 618評論 18 17