分布式版本控制系統(tǒng)( Distributed Version Control System蹋辅,簡(jiǎn)稱 DVCS )
面向需求筆記卢未,只看近期工作可能要用到的內(nèi)容
創(chuàng)建版本庫(kù)
新建目錄辰妙,git init把當(dāng)前目錄變成git可以管理的倉(cāng)庫(kù)在版本庫(kù)目錄下文件添加到倉(cāng)庫(kù):git add(add 可以多次頻繁使用慷嗜,全部添加完之后commit)
把文件提交到倉(cāng)庫(kù): git commit -m '...'
$ git log <last release> HEAD --grep feature 僅僅顯示本次發(fā)布新增加的功能弊添。修改文件之后
查看git狀態(tài):git status
顯示被修改了還沒(méi)有提交查看修改了什么: git diff
查看修改記錄: git log --pretty=onelint
后面的參數(shù)是整理輸出格式的回退
git reset --hard HEAD^
HEAD^表示上一版本
HEAD^^
HEAD~100工作區(qū)债鸡,暫存區(qū)
工作區(qū),電腦里可以看到的目錄
版本庫(kù)(repository)庸论,工作區(qū)里有一個(gè)隱藏目錄.git职辅, 這個(gè)不算工作區(qū),而是git版本庫(kù)聂示,版本庫(kù)里有很多東西域携,包括暫存區(qū),還有g(shù)it自動(dòng)創(chuàng)建的第一個(gè)分支master鱼喉,和一個(gè)指向master的指針HEAD撤銷操作
git status
On branch master
Changes not staged for commit:
//還沒(méi)有add
git status
On branch master
Changes to be committed:
//還沒(méi)有commit
總而言之:
場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容秀鞭,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- filename扛禽。(可以把文件在工作區(qū)的修改全部撤銷)
場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容锋边,還添加到了暫存區(qū)時(shí),想丟棄修改编曼,分兩步豆巨,第一步用命令git reset HEAD file(把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū))掐场,就回到了場(chǎng)景1往扔,第二步按場(chǎng)景1操作贩猎。
場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí),想要撤銷本次提交萍膛,參考版本回退一節(jié)吭服,不過(guò)前提是沒(méi)有推送到遠(yuǎn)程庫(kù)。
刪除文件
先在工作區(qū)rm
這時(shí)候git status會(huì)顯示有文件被刪除
如果確實(shí)要?jiǎng)h除蝗罗,git rm filename艇棕, git commit
如果不想刪了,git checkout -- filenamecheckout
版本庫(kù)里代碼替換工作區(qū)版本绿饵,“一鍵還原”遠(yuǎn)程倉(cāng)庫(kù)
找一臺(tái)電腦充當(dāng)服務(wù)器欠肾,其他人都從這里clone代碼到自己電腦,也提交到這個(gè)服務(wù)器
github sshkeyssh key(每臺(tái)電腦對(duì)應(yīng)一個(gè))
創(chuàng)建SSH Key拟赊。在用戶主目錄下刺桃,看看有沒(méi)有.ssh目錄,如果有吸祟,再看看這個(gè)目錄下有沒(méi)有id_rsa和id_rsa.pub這兩個(gè)文件瑟慈,如果已經(jīng)有了,可直接跳到下一步屋匕。如果沒(méi)有葛碧,打開(kāi)Shell(Windows下打開(kāi)Git Bash),創(chuàng)建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把郵件地址換成你自己的郵件地址过吻,然后一路回車进泼,使用默認(rèn)值即可,由于這個(gè)Key也不是用于軍事目的纤虽,所以也無(wú)需設(shè)置密碼乳绕。
(如果一切順利的話,可以在用戶主目錄里找到.ssh
目錄逼纸,里面有id_rsa和id_rsa.pub兩個(gè)文件洋措,這兩個(gè)就是SSH Key的秘鑰對(duì),id_rsa是私鑰杰刽,不能泄露出去菠发,id_rsa.pub是公鑰,可以放心地告訴任何人贺嫂。)在github中添加sshkey
branch(重點(diǎn)W茵!涝婉!)
創(chuàng)建并切換到分支:git checkout -b dev
查看當(dāng)前分支:git branch/git status
切換回master:git checkout master
把dev合并到master(merge:合并指定分支到當(dāng)前分支哥力,古跟我說(shuō)的是master合并到branch):git merge dev
刪除分支: git branch -d <name>conflict
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
//查看分支合并情況
$ git log --graph --pretty=oneline --abbrev-commit
如果工作只進(jìn)行到一半,還沒(méi)法提交墩弯,預(yù)計(jì)完成還需1天時(shí)間吩跋。但是,必須在兩個(gè)小時(shí)內(nèi)修復(fù)該bug渔工,怎么辦锌钮?
幸好,Git還提供了一個(gè)stash
功能引矩,可以把當(dāng)前工作現(xiàn)場(chǎng)“儲(chǔ)藏”起來(lái)梁丘,等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作:
$ git stash
多人協(xié)作
//查看遠(yuǎn)程庫(kù)信息
git remote
git remote -v
//推送分支,把本地提交到遠(yuǎn)程庫(kù)
git push origin master
提交有沖突,先pull把新提交的抓下來(lái)旺韭,在本地合并解決后再推送
多人協(xié)作的工作模式通常是這樣:
首先氛谜,可以試圖用git push origin branch-name推送自己的修改;
如果推送失敗区端,則因?yàn)檫h(yuǎn)程分支比你的本地更新值漫,需要先用git pull試圖合并;
如果合并有沖突织盼,則解決沖突杨何,并在本地提交;
沒(méi)有沖突或者解決掉沖突后沥邻,再用git push origin branch-name推送就能成功危虱!
如果git pull提示“no tracking information”,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建唐全,用命令git branch --set-upstream branch-name origin/branch-name埃跷。
這就是多人協(xié)作的工作模式,一旦熟悉了邮利,就非常簡(jiǎn)單弥雹。
實(shí)際情況:
本地master被污染,從本地的master上checkout的branch 也是被污染的近弟,想修正
解決方法:
(當(dāng)前所在位置是branch1)
- 刪掉本地master: git branck -D master
- pull遠(yuǎn)程master: git pull origin master
(pull會(huì)把所有master和所有branch都拿下來(lái)缅糟,而且不會(huì)改變當(dāng)前所在位置)
到這里其實(shí)可以把現(xiàn)在branch和剛pull下來(lái)的master比較就完事了,但是我想新建分支并把之前分支廢棄
- 進(jìn)入master分支: git checkout master
- 新建分支:git checkout -b branck2
- 可以git branch 確保自己在branch2
- 把先前分支branch1中做的修改merge到branch2中:git merge branch1
- git diff master 檢查遠(yuǎn)程master和修改后要push文件是否都正確