Git指南 - 3個小時搞定git


先奉上Git常用命令速查表,方便大家查閱勇哗。


圖片來自于網(wǎng)絡

再來個目錄說明,大家可以根據(jù)自己所需進行選擇學習

簡單目錄說明

1 git簡介


Git是世界上最牛逼的分布式版本控制系統(tǒng)。

分布式版本控制系統(tǒng):版本控制是一個用來記錄一個或多個文件內容變化,以便將來查閱特定版本的修訂情況的系統(tǒng)卧斟。

分布式和集中式的區(qū)別:

集中式版本控制系統(tǒng):版本庫是集中存放在中央服務器中珍语,大家工作的時候自己的電腦必須要聯(lián)網(wǎng)板乙,才能拉獲取到最新的版本庫蛋铆,工作結束后在上傳至中央服務器刺啦。最新的版本庫只存在于中央服務器中玛瘸,安全性較低,提交速度較慢再来。

分布式版本控制系統(tǒng):分布式版本控制系統(tǒng)可以沒有中央服務器,因為每個人電腦中都會有一份完整的版本庫磷瘤,有人的版本庫丟失了只需要向其他人復制一份就可以了芒篷,這樣大大的提高了安全性。當然采缚,分布式版本控制系統(tǒng)一般也是有一個中央服務器的针炉,這樣更加方便大家的文件的修改及統(tǒng)一。

2 安裝


git安裝自行解決??

Tip:以下操作使用 Git Bash

為了大家好篡帕,我就只截圖,不貼代碼啦??

3 創(chuàng)建版本庫


1)創(chuàng)建一個目錄 or 進入一個目錄

img1

2)使用 git init 將一個文件夾變成一個倉庫

img2

這樣一個空的倉庫就創(chuàng)建了贸呢,倉庫中的.git目錄就是最好的證明镰烧,初始化倉庫.git文件夾默認是隱藏的,可以手動設置可見性楞陷,也可以通過ls -sh來查看怔鳖,這個目錄就是git的核心,用來跟蹤版本庫的固蛾,即每個文件的修改结执、刪除、還原都會被跟蹤艾凯。

4 git的基本操作


首先献幔,我們需要先來了解一下工作區(qū),暫存區(qū)的概念趾诗。

img3
  • 工作區(qū)(Working Directory):就是我們電腦上可以看到的目錄

  • 版本庫(Repository):版本庫就是我們初始化倉庫時多出來的那個 .git文件夾蜡感。版本庫中還包含了幾個重要的東西。

  • 暫存區(qū)(Stage):工作區(qū)的文件使用add命令后會加入暫存區(qū),而沒有直接到倉庫铸敏。

  • maste分支:master分支也是在倉庫初始化時自動創(chuàng)建的缚忧,當暫存區(qū)的文件commit后就會默認加入倉庫的master分支。


為了便于觀察杈笔,就使用idea來做實驗闪水,文件不同的顏色對應不同的狀態(tài)

  • 工作區(qū):文件顏色是紅色
  • 暫存區(qū):文件顏色是綠色
  • 本地倉庫中:文件顏色是白色
  • 對本地倉庫文件修改后:文件顏色是藍色

一步:先在工作區(qū)創(chuàng)建一個文件

img4

二步:將工作區(qū)文件add到暫存區(qū)

img5

三步:將暫存區(qū)文件commit到本地倉庫

img6

四步:對倉庫中文件進行修改后的狀態(tài)變化

img7

在上述每一個步驟中都可以通過git status來查看工作區(qū)狀態(tài),通過git diff來查看修改的內容蒙具。

5 撤銷修改


  • 撤銷工作區(qū)的修改
    git checkout -- file:把文件放在工作區(qū)的修改全部撤銷

1)修改后還沒有被放到暫存區(qū)球榆,將撤銷回到git add的狀態(tài)。

img8

2)已經(jīng)添加到暫存區(qū)后做了修改禁筏,將撤銷回到git commit狀態(tài)

img9

  • 撤銷已到緩存區(qū)的修改
    命令git reset HEAD file持钉,HEAD為當前最新的版本。
    作用:將add進緩存區(qū)中的文件退回到工作區(qū)中篱昔。

6 版本回退每强、文件刪除


先來了解兩個命令:

  • git log:查看版本庫狀態(tài)

img10

可見我們剛才一共提交了三個版本,當我們需要回退版本時需要使用
git reset --hard HEAD^命令州刽, HEAD表示當前的版本空执,HEAD^ 表示上一個版本,上上個版本就是HEAD^^了穗椅,以此類推辨绊。HEAD~50即回退50個版本。

  • git reflog:查看歷史命令狀態(tài)
    img11

    git loggit reflog最大的不同就是使用git reflog會有一個commit id匹表,但我們需要回退版本的時候只需要找到對應的commit id號就可以了.门坷。即
git reset --hard commit_id

對文件的刪除方式有兩種

  • git rm file命令:在刪除的時候會將刪除操作記錄下來。
  • rm file命令:在刪除文件的時候不會將刪除操作記錄下來袍镀。
img12

但我們還是可以用版本回退來恢復誤刪的文件默蚌。

7 遠程倉庫(以碼云平臺為例)


本地、遠程倉庫聯(lián)系

既然是遠程倉庫苇羡,那么我們就要想辦法去將本地的代碼上傳到遠程倉庫敏簿,
具體的步驟:
1)在碼云上創(chuàng)建一個倉庫。

2)本地初始化一個倉庫宣虾,且倉庫不能為空,否則當提交到遠程倉庫是失敗

3)使用git remote add origin '遠程倉庫地址'命令關聯(lián)遠程倉庫

4)關聯(lián)遠程倉庫
第一次關聯(lián)使用git push -u origin master命令温数,加上-u參數(shù)绣硝,git會把本地倉庫master分支內容推送到遠程倉庫的master分支,并且會將本地的master分支和遠程的master分支關聯(lián)起來撑刺,以后本地提交時只需要使用git push origin master命令即可鹉胖。當遠程倉庫為空時可以關聯(lián)成功。

第一次關聯(lián)流程
SSH KEY配置

SSH key提供了一種與GitHub通信的方式,通過這種方式甫菠,能夠在不輸入密碼的情況下挠铲,將GitHub作為自己的remote端服務器,進行版本控制寂诱。

1)創(chuàng)建一個SSH key

ssh-keygen -t rsa -C "youremail"

隨后一路回車吧拂苹,使用默認值就好。完成后會在用戶目錄下(C:\Users**.ssh)目錄中id_rsaid_rsa.pub兩個文件痰洒。

  • id_rsa.pub:需在碼云個人資料中配置瓢棒,主要用來加密,當你拉取數(shù)據(jù)時進行加密丘喻。
  • id_rsa:私鑰脯宿,本地保留,對拉取到本地的數(shù)據(jù)進行解密

2)在碼云上設置公鑰信息

設置密鑰

只有設置了SSH的電腦上才會免密碼操作泉粉,其它沒有設置的當需要提交的時候還是需要登錄賬號密碼连霉。當然你也可以在多個電腦上設置SSH,而且不管是id_rsa還是id_rsa_pub丟失嗡靡,都必須重新生成密鑰跺撼。

push/pull
克隆

兩種方式:

git clone [-b <branchName>] ‘倉庫地址’  //https協(xié)議
git clone [-b <branchName>]  git@'平臺地址':‘用戶名’/‘倉庫名’.git    //ssh協(xié)議,速度較快

8 分支管理


分支概念

當我們每次提交時叽躯,都會產生一個版本财边,這些版本共同連成一條時間線,這條時間線就是一個分支点骑。

分支基礎
  • 在我們沒有創(chuàng)建分支時酣难,git會默認給我們創(chuàng)建一個master分支。剛才講的HEAD是指向分支的黑滴,即當前分支憨募,在這就是指向master分支,而master才是指向提交的袁辈。
    • 查看當前分支
git branch           //會列出所有分支菜谣,分支前有*號的表示當前分支
HEAD/maste指向
  • 每次提交,master分支都會向前進一步晚缩。
maste分支移動
  • 當我們創(chuàng)建一個分支dev時尾膊,Git會創(chuàng)建一個新的指針devdev指針會指向master相同的提交版本節(jié)點荞彼,而HEAD也會指向 dev分支上冈敛,即當前版本是dev上的當前最新版本。
  • 創(chuàng)建dev分支鸣皂,并切換到該分支
git branch dev       //創(chuàng)建分支
git checkout dev   // 切換分支
 或
git checkout -b dev //創(chuàng)建并切換分支
創(chuàng)建dev分支
  • 當我們創(chuàng)建分支并切換到該分支后抓谴,Git會將HEAD指向所創(chuàng)建的分支dev上暮蹂,從而我們以后再提交時,master分支的指針將不會改變癌压,而dev分支的指針會向前移動仰泻。
dev指針移動
  • 當然有創(chuàng)建就會有合并, 在dev上的工作做完后滩届,就可以把dev分支和master分支合并集侯,合并也非常簡單,只需要將master指向dev的當前提交即可丐吓。合并之后浅悉,HEAD會指向master分支。
  • 合并分支
git merge dev //快速模式合并券犁,直接將當前所處分支指針指向dev的當前提交版本术健。
分支合并
  • 最后在合并之后也是可以把dev指針給刪除掉。
  • 分支刪除
git branch -d dev   //刪除dev分支

當前分支在沒有提交的情況下刪除使用

git branch -D dev
解決合并沖突

當然咯粘衬,在現(xiàn)實情況下荞估,多多少少還是會出現(xiàn)在merge的時候出現(xiàn)沖突的,即同一個文件在兩個分支中都被修改了稚新,在合并時使用快速合并模式*就會產生沖突勘伺。

merge沖突發(fā)生

打開沖突的文件,Git會用<<<<<<<褂删,=======飞醉,>>>>>>>標記出不同分支的內容,我們可以對其修改后繼續(xù)提交屯阀。

  • <<<<<<< 和 ======= 之間是我們做的修改
  • ======= 和 >>>>>>>之間是我們要合并的那個分支做的修改
沖突文件
分支管理策略

在合并時缅帘,Git會默認使用Fast forward(快速合并模式),在這種模式下难衰,當我們刪除分支后钦无,相應的分支信息也會被刪除。

如果要強制禁用Fast forward模式盖袭,在merge時Git就會生成一個新的commit失暂,這樣,我們就可以從分支歷史上看到這條提交記錄

實戰(zhàn):在dev分支對文件readme.txt修改鳄虱,add弟塞,commit后,切換到master分支對readme.txt修改拙已,add宣肚,commit后使用:

git merge --no-ff -m'提交信息' dev

這樣就會產生一個新的commit,而且當前分支的修改會被merge的分支覆蓋悠栓,使用帶參數(shù)的git log查看分支歷史

git log --graph --pretty=oneline --abbrev-commit
查看分支歷史

1)BUG分支

在實際的開發(fā)過程中霉涨,我們需要去修復一個bug時,我們一般都會去創(chuàng)創(chuàng)建一個issue分支去修復這個bug惭适,所以我們會把當前的工作現(xiàn)場存儲起來笙瑟。

  • 將當前工作現(xiàn)場隱藏
git stash
  • bug處理完成,刪除issue分支
  • 查看stash內的工作現(xiàn)場

git stash list


![查看所有工作現(xiàn)場](http://upload-images.jianshu.io/upload_images/3126293-95ca7c934eee9210.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 恢復指定現(xiàn)場

git stash apply stash@{0} //恢復現(xiàn)場
git stash drop stash@{0} //刪除stash內的stash@{0}工作區(qū)

git stash pop stash@{0} //恢復現(xiàn)場并刪除stash@{0}工作區(qū)


#### 9 多人協(xié)作
***
當我們從遠程倉庫克隆時癞志,Git會自動的將本地的master分支和遠程的master分支關聯(lián)起來往枷,遠程倉庫的默認地址是origin。

可以使用`git remote`來查看遠程倉庫信息
或
用`git remote -v`查看抓取和推送的master地址

**1) 推送分支**

git push origin master


**2)抓取分支**

Ⅰ 使用`git push origin branch_name`推送自己的修改

Ⅱ 若推送失敗凄杯,則使用`git pull`試圖合并

Ⅲ 如果出現(xiàn)沖突错洁,那么就解決沖突,并在本地提交

Ⅳ沒有沖突或解決掉沖突后繼續(xù)執(zhí)行 Ⅰ

#### 10 標簽管理
***
在發(fā)布一個版本時戒突,我們一般會再該版本上添加一個版本號做標識屯碴。這樣我們在版本庫中查詢時也可以一目了然。
- 給當前分支創(chuàng)建標簽

git tag <tag_name>

- 給歷史提交記錄創(chuàng)建標簽

git tag <tag_name> 歷史版本號 //(版本號用git reflog查詢)

- 創(chuàng)建標簽時填加備注信息

git tag -a <tag_name> -m 'remark'

- 查看標簽信息

git show <tag_name>

- 查看所有標簽

git tag

***

- 刪除標簽

git tag -d <tag_name>

- 推送標簽到遠程

git push origin <tag_name> //推送單個標簽
git push origin --tags //將全部未推送的的標簽推送到遠程

- 刪除遠程標簽
 - 先刪除本地標簽
 - 再刪除遠程標簽

git push origin :refs/tags/<tag_name>


#### 11  補充
***
- 把本地的分支提交到遠程的某個分支(遠程分支可以是未創(chuàng)建的)

git push origin own_branch:remote_branch

- 刪除遠程的分支

git push origin :remote_test //遠程的分支被刪除膊存,本地的分支不會被刪除

- 將一個文件從暫存區(qū)中刪掉导而,但還存在與硬盤中

git rm --cache fileName

- 撤銷上一次提交。

--soft 參數(shù):將上一次的修改放入 staging area
--mixed 參數(shù):將上一次的修改放入 working directory
--hard 參數(shù):直接將上一次的修改拋棄

![image.png](http://upload-images.jianshu.io/upload_images/3126293-de192a11c0798478.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 查看遠端倉庫

git remote -v


- 拉取遠程分支到本地分支

git pull origin remote : local



- 推送本地分支到遠程分支

git push origin local : remote


- 查看某個文件的修改人

git blame fileName


- 獲取遠程的修改隔崎,但并不合并到當前分支

git fetch branchName


- 撤銷當前的commit

git revert [HEAD]

> 這樣整個git基礎就完結了今艺。由于筆者也是剛剛接觸git不久,所以文中有不足的地方望大家多多指正??
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(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
  • 正文 為了忘掉前任月帝,我火速辦了婚禮糊啡,結果婚禮上栋荸,老公的妹妹穿的比我還像新娘何之。我一直安慰自己跟畅,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布溶推。 她就那樣靜靜地躺著徊件,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒜危。 梳的紋絲不亂的頭發(fā)上虱痕,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音辐赞,去河邊找鬼部翘。 笑死,一個胖子當著我的面吹牛占拍,可吹牛的內容都是我干的略就。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晃酒,長吁一口氣:“原來是場噩夢啊……” “哼表牢!你這毒婦竟也來了?” 一聲冷哼從身側響起贝次,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤崔兴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛔翅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敲茄,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年山析,在試婚紗的時候發(fā)現(xiàn)自己被綠了堰燎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡笋轨,死狀恐怖秆剪,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情爵政,我是刑警寧澤仅讽,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站钾挟,受9級特大地震影響洁灵,放射性物質發(fā)生泄漏。R本人自食惡果不足惜掺出,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一徽千、第九天 我趴在偏房一處隱蔽的房頂上張望苫费。 院中可真熱鬧,春花似錦罐栈、人聲如沸黍衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至位仁,卻和暖如春柑贞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聂抢。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工钧嘶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人琳疏。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓有决,卻偏偏與公主長得像,于是被迫代替她去往敵國和親空盼。 傳聞我的和親對象是個殘疾皇子书幕,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,656評論 9 163
  • 濃云駭生靈,一雷擊繁木揽趾。 天火焦木出台汇,疑為祝融怒。 萬獸皆奔走篱瞎,緣何人不懼苟呐? 文明此中化,激勇開前路俐筋。 24次瀏覽 贊
    白鵬程閱讀 454評論 1 1
  • 人們每天忙忙碌碌牵素,爭取金錢和地位,沉溺于瑣事和俗務澄者,這些事物充斥著人生笆呆。這種沒有空白的生命,最終有幾個不是...
    張一朵閱讀 193評論 0 1
  • 多少厭倦孤獨的人 在夢里與你相遇 背景是永不褪色的花樹 和不愿落下的殘陽 然而躲在影子身后的那人 卻面對桌布上干涸...
    陳阿蔥閱讀 410評論 0 2
  • 2017年2月8日闷哆。 早起5:20腰奋。 鍛煉: 掄胳膊150次;下蹲10次抱怔;金雞獨立左右腳各一分鐘劣坊;跪坐半小時。 學...
    眉山俊媽利利閱讀 493評論 1 1