GIT的學(xué)習(xí)筆記
這是我初學(xué)GIT時(shí)記錄下的筆記匾竿,很多地方都記錄的不詳細(xì)(畢竟我只是怕忘記了又要去查才簡(jiǎn)要記錄了一點(diǎn))企量,并不足以參考查排,若想學(xué)習(xí)Git彭雾,請(qǐng)移步到下面網(wǎng)址:
淺顯易懂完整的GIT學(xué)習(xí)教程在這里
廖雪峰的官方網(wǎng)站-Git教程
Git的概念
簡(jiǎn)單來(lái)說(shuō),Git的工作流程很簡(jiǎn)單串稀,我們把整個(gè)過(guò)程中文件的轉(zhuǎn)移分為3個(gè)區(qū)域:工作區(qū)除抛,暫存區(qū),分支母截。
工作區(qū)就是我們對(duì)文件進(jìn)行操作的地方到忽,比如你在本地GIt倉(cāng)庫(kù)修改文件,編寫代碼的文件存儲(chǔ)空間。現(xiàn)在你的文件改好了喘漏,想把它提交到Git倉(cāng)庫(kù)中护蝶,先要把它提交到暫存區(qū),最后再提交到分支翩迈。默認(rèn)的分支為master持灰,也可以自己創(chuàng)建分支。這樣文件就被保存到Git倉(cāng)庫(kù)里了负饲。
本地Git倉(cāng)庫(kù)
進(jìn)入一個(gè)文件夾堤魁, git init
新建一個(gè)git倉(cāng)庫(kù)a
git add <filename>
將文件添加到到暫存區(qū)
git commit -m 'xxx'
將文件提交到分支,參數(shù)-m后面寫上對(duì)本次提交的說(shuō)明返十,最好寫上
git status
顯示倉(cāng)庫(kù)當(dāng)前狀態(tài)
git diff
查看各版本文件的不同妥泉,顯示的格式為Unix通用的diff格式
git log
顯示時(shí)間最近到最遠(yuǎn)的提交版本的詳細(xì)信息,加上參數(shù) --pretty-- oneline
顯示簡(jiǎn)要信息洞坑,其中有版本號(hào)
在Git中盲链,HEAD
表示當(dāng)前版本,上一版本為 HEAD^
检诗,上上一版本為 HEAD^
或 HEAD~2
匈仗,以此類推。
git reset --hard HEAD
將文件重置為上一個(gè)版本逢慌,也可通過(guò)版本好重置: git reset --hard 版本號(hào)
版本號(hào)只需打出足夠辨識(shí)的前幾位
git reflog
顯示出每一歷史命令
git diff HEAD -- <filename>
查看最新版本庫(kù)與工作區(qū)文件的區(qū)別
git checkout -- <filename>
撤銷文件在工作區(qū)的修改(尚未提交到分支)回到最近一次add
或commit
是的狀態(tài)
git reset Head <filename>
撤銷暫存區(qū)修改悠轩,放回工作區(qū)
git rm <filename>
從版本中刪除文件,要commit
連接遠(yuǎn)程庫(kù)
我這里以Github為例
創(chuàng)建SSH key(本地庫(kù)與遠(yuǎn)程庫(kù)關(guān)聯(lián)的密鑰)
在shell中輸入ssh-keygen -t rsa -C 'youremail@example.com'
,再在github用戶功能下攻泼,添加進(jìn)去密鑰火架,建議添加id+rsa.pub的內(nèi)容
關(guān)聯(lián)github上的git倉(cāng)庫(kù),先創(chuàng)建一個(gè)倉(cāng)庫(kù)忙菠,然后在本地倉(cāng)庫(kù)執(zhí)行命令:
git remote add origin git@github.com:<github賬戶>/<倉(cāng)庫(kù)名>.git
這樣就關(guān)聯(lián)成功了
git push -u origin master
把本地庫(kù)的master推送到github的遠(yuǎn)程庫(kù)上何鸡,第一次推送加上參數(shù)-u,還會(huì)把本地的maste分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái)牛欢,以后就可以只用 git push origin master
推送就行了
git clone git@github.com:<github賬戶>/<遠(yuǎn)程庫(kù)名>.git
將遠(yuǎn)程庫(kù)克隆到本地
分支
分支讓我們跟方便的管理項(xiàng)目骡男,比如一個(gè)項(xiàng)目正式的發(fā)布版本在master分支上,那我們不可能在master上直接改傍睹,出差錯(cuò)了怎么辦隔盛。一般都會(huì)創(chuàng)建一個(gè)新分支,比如分支branch1拾稳,作為項(xiàng)目發(fā)布前的主分支吮炕。項(xiàng)目組的工作人員在沒(méi)人創(chuàng)建一個(gè)分支Mybranch,以branch1為模板访得,各自寫自己負(fù)責(zé)的代碼龙亲,在合并到branch1上,測(cè)試通過(guò)后,再把branch1合并到master上鳄炉。
git checkout -b <分支名>
創(chuàng)建并切換分支杜耙,相當(dāng)于兩條命令:git branch xx
;git checkout xxx
git branch
查看當(dāng)前所有分支 ,*會(huì)出現(xiàn)在當(dāng)前所在分支前
git merge xx
將xx分支合并到當(dāng)前分支上(這樣會(huì)采用Fast forward 模式迎膜,這種模式刪除分支后會(huì)丟掉分支信息)
git merge --no-ff -m 'xxx' 分支名
用--no-ff 參數(shù)禁用fast froward
git branch -d xx
刪除xx分支 若加上參數(shù)-D
表示強(qiáng)行刪除
如果master和別的分支都分別有新的提交泥技,git無(wú)法快速合并浆兰,只能試圖將各自的修改合并起來(lái)磕仅,但可能會(huì)引起沖突,必須手動(dòng)解決沖突再提交簸呈。
git log --graph
顯示分支合并圖
git stash
保存當(dāng)前未提交的改動(dòng)榕订。如果你得為你的項(xiàng)目新加一個(gè)功能,在你的分支上代碼寫了一半了蜕便,結(jié)果項(xiàng)目中發(fā)現(xiàn)了一個(gè)bug,你必須馬上解決劫恒。可你又無(wú)法提交你現(xiàn)在改動(dòng)的項(xiàng)目(因?yàn)檫€未完成)轿腺,這個(gè)時(shí)候你可已選擇保存它两嘴,回到未改動(dòng)前的版本,解決了bug再回來(lái)繼續(xù)寫完它族壳。
git satsh list
顯示保存的工作現(xiàn)場(chǎng)
git satsh apply
恢復(fù)憔辫,但是恢復(fù)后stash內(nèi)容并不刪除,需要用git satsh drop
來(lái)刪除
git satsh pop
恢復(fù)工作現(xiàn)場(chǎng)的同時(shí)把stash的內(nèi)容也刪除了
git remote -v
查看遠(yuǎn)程庫(kù)信息仿荆,參數(shù)-V
顯示更詳細(xì)的信息
git checkout -b dev origin/dev
創(chuàng)建遠(yuǎn)程的dev分支到本地
git pull
得到當(dāng)前分支的最新提交
如果git pull
提示“no tracking information”贰您,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name
標(biāo)簽
Git的標(biāo)簽雖然是版本庫(kù)的快照拢操,但其實(shí)它就是指向某個(gè)commit
的指針锦亦,方便人們查找
切換到需要打標(biāo)簽的分支上,git tag <branch-name>
打上標(biāo)簽令境,like:git tag v1m
默認(rèn)標(biāo)簽打在最新提交的commit
上杠园,若想打在之前的commit
上,就要找到那個(gè)commit
的id舔庶,然后
git tag <tagname> <commit id>
git tag
查看所有標(biāo)簽 標(biāo)簽按字母順序排序抛蚁,而非創(chuàng)立的時(shí)間順序
git show <tagname>
查看某一標(biāo)簽的具體信息
git tag -a <tagname> -m 'xx'
創(chuàng)建帶說(shuō)明的標(biāo)簽
git tag -d <tagname>
刪除(本地)標(biāo)簽
git push origin <tagname>
推送某個(gè)標(biāo)簽到遠(yuǎn)程
git push origin --tags
推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽
若要?jiǎng)h除已推送到遠(yuǎn)程的標(biāo)簽,先刪除本地標(biāo)簽栖茉,再刪除遠(yuǎn)程標(biāo)簽篮绿,刪除遠(yuǎn)程庫(kù)上的標(biāo)簽:
git push origin :refs/tags/<tagname>
注意事項(xiàng)
git rm --cache submodule_name
刪除子模組
git branch --set-upstream-to=origin/dev dev
關(guān)聯(lián)遠(yuǎn)程分支