先奉上Git常用命令速查表,方便大家查閱勇哗。
再來個目錄說明,大家可以根據(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 安裝
Tip:以下操作使用 Git Bash
為了大家好篡帕,我就只截圖,不貼代碼啦??
3 創(chuàng)建版本庫
1)創(chuàng)建一個目錄 or 進入一個目錄
2)使用 git init 將一個文件夾變成一個倉庫
這樣一個空的倉庫就創(chuàng)建了贸呢,倉庫中的.git目錄就是最好的證明镰烧,初始化倉庫.git文件夾默認是隱藏的,可以手動設置可見性楞陷,也可以通過ls -sh
來查看怔鳖,這個目錄就是git的核心,用來跟蹤版本庫的固蛾,即每個文件的修改结执、刪除、還原都會被跟蹤艾凯。
4 git的基本操作
首先献幔,我們需要先來了解一下工作區(qū),暫存區(qū)的概念趾诗。
工作區(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)建一個文件
第二步:將工作區(qū)文件add到暫存區(qū)
第三步:將暫存區(qū)文件commit到本地倉庫
第四步:對倉庫中文件進行修改后的狀態(tài)變化
在上述每一個步驟中都可以通過git status
來查看工作區(qū)狀態(tài),通過git diff
來查看修改的內容蒙具。
5 撤銷修改
-
撤銷工作區(qū)的修改
git checkout -- file
:把文件放在工作區(qū)的修改全部撤銷
1)修改后還沒有被放到暫存區(qū)球榆,將撤銷回到git add
的狀態(tài)。
2)已經(jīng)添加到暫存區(qū)后做了修改禁筏,將撤銷回到git commit
狀態(tài)
- 撤銷已到緩存區(qū)的修改
命令:git reset HEAD file
持钉,HEAD為當前最新的版本。
作用:將add進緩存區(qū)中的文件退回到工作區(qū)中篱昔。
6 版本回退每强、文件刪除
先來了解兩個命令:
- git log:查看版本庫狀態(tài)
可見我們剛才一共提交了三個版本,當我們需要回退版本時需要使用
git reset --hard HEAD^
命令州刽, HEAD表示當前的版本空执,HEAD^ 表示上一個版本,上上個版本就是HEAD^^了穗椅,以此類推辨绊。HEAD~50即回退50個版本。
- git reflog:查看歷史命令狀態(tài)
git log 和git reflog最大的不同就是使用git reflog會有一個commit id匹表,但我們需要回退版本的時候只需要找到對應的commit id號就可以了.门坷。即
git reset --hard commit_id
對文件的刪除方式有兩種
- git rm file命令:在刪除的時候會將刪除操作記錄下來。
- rm file命令:在刪除文件的時候不會將刪除操作記錄下來袍镀。
但我們還是可以用版本回退來恢復誤刪的文件默蚌。
7 遠程倉庫(以碼云平臺為例)
既然是遠程倉庫苇羡,那么我們就要想辦法去將本地的代碼上傳到遠程倉庫敏簿,
具體的步驟:
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)成功。
SSH KEY配置
SSH key提供了一種與GitHub通信的方式,通過這種方式甫菠,能夠在不輸入密碼的情況下挠铲,將GitHub作為自己的remote端服務器,進行版本控制寂诱。
1)創(chuàng)建一個SSH key
ssh-keygen -t rsa -C "youremail"
隨后一路回車吧拂苹,使用默認值就好。完成后會在用戶目錄下(C:\Users**.ssh)目錄中id_rsa
和id_rsa.pub
兩個文件痰洒。
- id_rsa.pub:需在碼云個人資料中配置瓢棒,主要用來加密,當你拉取數(shù)據(jù)時進行加密丘喻。
- id_rsa:私鑰脯宿,本地保留,對拉取到本地的數(shù)據(jù)進行解密
2)在碼云上設置公鑰信息
只有設置了SSH的電腦上才會免密碼操作泉粉,其它沒有設置的當需要提交的時候還是需要登錄賬號密碼连霉。當然你也可以在多個電腦上設置SSH,而且不管是id_rsa
還是id_rsa_pub
丟失嗡靡,都必須重新生成密鑰跺撼。
克隆
兩種方式:
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 //會列出所有分支菜谣,分支前有*號的表示當前分支
- 每次提交,master分支都會向前進一步晚缩。
- 當我們創(chuàng)建一個分支
dev
時尾膊,Git會創(chuàng)建一個新的指針dev
,dev
指針會指向master
相同的提交版本節(jié)點荞彼,而HEAD
也會指向dev
分支上冈敛,即當前版本是dev
上的當前最新版本。 - 創(chuàng)建
dev
分支鸣皂,并切換到該分支
git branch dev //創(chuàng)建分支
git checkout dev // 切換分支
或
git checkout -b dev //創(chuàng)建并切換分支
- 當我們創(chuàng)建分支并切換到該分支后抓谴,Git會將HEAD指向所創(chuàng)建的分支
dev
上暮蹂,從而我們以后再提交時,master
分支的指針將不會改變癌压,而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)沖突的,即同一個文件在兩個分支中都被修改了稚新,在合并時使用快速合并模式*就會產生沖突勘伺。
打開沖突的文件,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不久,所以文中有不足的地方望大家多多指正??