根據(jù)https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000教程整理的git學(xué)習(xí)筆記。另附Git官網(wǎng)地址:http://git-scm.com宣虾。w
1后控、創(chuàng)建版本庫
? ? 設(shè)置全局的姓名和email:
$ git config --global user.name"Your Name"$ git config --global user.email"email@example.com"
????初始化一個(gè)Git倉庫栅组,使用git init命令坞琴;
? ? 添加文件到Git倉庫居暖,分兩步:
使用命令git add 命令赚楚,可以用空格間隔多個(gè)文件名威酒,添加多個(gè)文件;
使用命令git commit -m "說明信息"归形,完成托慨。
2、時(shí)光機(jī)穿梭
2.1 查看修改的內(nèi)容
git status 查看工作區(qū)的狀態(tài)可以知道哪個(gè)文件被修改暇榴;
git diff 文件名? 查看該文件的修改內(nèi)容厚棵,比較的是工作區(qū)和暫存區(qū),也就是沒有add時(shí)看到的改動(dòng)蔼紧。
2.2 在不同的版本之間切換
git log 查看過去提交(commit)的記錄婆硬;
git log --pretty=oneline 一行簡略查看過去提交的記錄;
在過去的記錄中歉井,要注意commit id(版本號(hào))柿祈,由SHA1計(jì)算出的一個(gè)很大的數(shù)哈误,可以通過commit id進(jìn)行不同版本的切換哩至;
git reset --hard [commit id] 切換到指定id的版本,若不產(chǎn)生歧義蜜自,id可以只寫前幾位菩貌;
git reset --hard HEAD^ 切換到當(dāng)前版本的上一個(gè)版本,其中HEAD表示當(dāng)前版本重荠,一個(gè)^代表上一個(gè)版本箭阶,HEAD~100上100個(gè)版本;
git reflog 查看過去命令的記錄戈鲁。
2.3 管理修改
Git管理的是修改仇参,而不是文件。
第一次修改 -> git add -> 第二次修改 -> git commit 中婆殿,因?yàn)閍dd命令添加了第一次修改诈乒,所以只提交了第一次修改。
git diff HEAD -- readme.txt? 查看add操作之后的改動(dòng)婆芦。
2.4 撤銷修改
1怕磨、當(dāng)亂改了文件的內(nèi)容喂饥,還沒有add,則使用命令git checkout -- file撤銷修改肠鲫;
2员帮、當(dāng)亂改了文件的內(nèi)容,已經(jīng)add了导饲,則使用命令git reset HEAD file撤銷暫存區(qū)的修改捞高,再回到第1步;
3渣锦、已經(jīng)提交了不合適的修改到版本庫時(shí)棠枉,想要撤銷本次提交,參考版本回退一節(jié)泡挺,不過前提是沒有推送到遠(yuǎn)程庫(對(duì)這句話存疑)辈讶。
2.5 刪除文件
1、真要?jiǎng)h除某個(gè)文件:先通過rm刪除該文件娄猫,再通過git rm file增加刪除文件的修改贱除,最后commit提交;
2媳溺、若是誤刪某個(gè)文件:通過git checkout -- file恢復(fù)該文件月幌,git checkout其實(shí)是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除悬蔽,都可以“一鍵還原”扯躺。
3、遠(yuǎn)程倉庫
3.1 Github添加秘鑰
1蝎困、創(chuàng)建SSH秘鑰:?ssh-keygen -t rsa -C "youremail@example.com"录语,在用戶目錄下會(huì)有.ssh文件夾,文件夾底下有公鑰文件id_rsa.pub禾乘;
2澎埠、將id_rsa.pub文件中的內(nèi)容添加到Github Setting頁面里的SSH Key里。
3.2 添加遠(yuǎn)程庫
1始藕、git remote add origin git@github.com:username/learngit.git蒲稳;相當(dāng)于為遠(yuǎn)程倉庫地址取名叫origin;
2伍派、第一次push時(shí)江耀,git push -u origin master,-u將本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來诉植;
3祥国、后面再push時(shí),可以直接使用git push origin master倍踪。
3.3 從遠(yuǎn)程庫克隆
克隆命令:git clone?git@(https//)github.com:username/learngit.git系宫。
4索昂、分支管理
4.1 創(chuàng)建和合并分支
當(dāng)修改自己的代碼到一半不能提交保存時(shí),為了防止自己干了一半的東西因?yàn)楫惓OЮ┙瑁梢詣?chuàng)建自己的分支椒惨,在自己的分支中進(jìn)行修改,然后切換到主分支用merge命令合并潮罪,最后再刪除自己的分支康谆。
1、查看分支:git branch嫉到;
2沃暗、創(chuàng)建分支:git branch ;
3何恶、切換分支:git checkout 孽锥;
4、創(chuàng)建并切換分支:git checkout -b 细层;
5惜辑、合并某分支到當(dāng)前分支:git merge ,其中自動(dòng)采用的是fast-forward模式合并的疫赎,即將當(dāng)前分支指向被合并分支的最新結(jié)點(diǎn)盛撑。
6、刪除分支:git branch -d
4.2 解決沖突
當(dāng)自己分支的代碼和主分支別人提交的在merge過程發(fā)生沖突捧搞,可以在文件中看到?jīng)_突的地方抵卫,然后對(duì)其進(jìn)行合并,最后add commit提交合并后的內(nèi)容胎撇,最后刪除自己的分支(自己的分支還是在的)介粘。
當(dāng)Git無法自動(dòng)合并分支時(shí),就必須首先解決沖突创坞。解決沖突后碗短,再提交,合并完成题涨。
git log --graph --pretty=oneline --abbrev-commit? 可以以圖形的形式查看分支。
4.3 分支管理策略
強(qiáng)制禁用Fast-forward模式总滩,Git就會(huì)在merge時(shí)生成一個(gè)新的commit纲堵,這樣,從分支歷史上就可以看出分支信息闰渔。
git merge --no-ff -m "說明信息" dev席函,--no-ff表示禁用fast-forward模式;
在工作中冈涧,最終上線的代碼都在master分支上茂附,具體迭代的修改在dev分支上正蛙,其他人再建立各自的分支,做出修改后提交到dev分支上营曼,最后dev分支合并到master分支上上線完成版本迭代乒验。
4.4 Bug分支(臨時(shí)改bug)
修復(fù)bug時(shí),我們會(huì)通過創(chuàng)建新的bug分支進(jìn)行修復(fù)蒂阱,然后合并锻全,最后刪除bug分支;
當(dāng)手頭工作沒有完成時(shí)录煤,先把工作現(xiàn)場git stash一下鳄厌,然后去修復(fù)bug,修復(fù)后妈踊,再git stash pop了嚎,回到工作現(xiàn)場。
git stash pop:恢復(fù)的同時(shí)把stash內(nèi)容也刪了廊营;
git stash apply:恢復(fù)后新思,stash內(nèi)容并不刪除;
git stash drop:刪除stash內(nèi)容赘风。
4.5 Feature分支(增加新功能)
添加一個(gè)新功能時(shí)夹囚,你肯定不希望因?yàn)橐恍?shí)驗(yàn)性質(zhì)的代碼,把主分支搞亂了邀窃,所以荸哟,每添加一個(gè)新功能,最好新建一個(gè)feature分支瞬捕,在上面開發(fā)鞍历,完成后,合并肪虎,最后劣砍,刪除該feature分支。
git branch -D 分支名:強(qiáng)行刪除一個(gè)沒有合并過的分支扇救。
4.6 多人協(xié)作
1刑枝、git remote -v:查看遠(yuǎn)程庫信息;
2迅腔、本地新建的分支不push到遠(yuǎn)程庫装畅,對(duì)別人而言就是不可見的;
3沧烈、想提交一個(gè)新的分支到github上:
(1)若該分支在github上已經(jīng)有了掠兄,則使用git checkout -b dev origin/dev創(chuàng)建本地分支即可,該命令也會(huì)將本地分支和遠(yuǎn)程分支自動(dòng)關(guān)聯(lián);或者使用git checkout -b dev先創(chuàng)建并切換到本地分支蚂夕,再通過git branch --set-upstream-to=origin/dev建立本地dev分支和遠(yuǎn)程dev分支的聯(lián)系
(2)若該分支在github上沒有迅诬,則先創(chuàng)建本地分支,再git push -u origin dev提交分支,-u將本地dev分支和遠(yuǎn)程dev分支關(guān)聯(lián)起來。
4衫嵌、當(dāng)別人先提交改動(dòng)到dev分支上,本地就不能直接git push origin dev提交改動(dòng)铐维,先要git pull (origin dev)把別人的改動(dòng)拉到本地merge,處理沖突慎菲,并commit嫁蛇,接著才能push。其中露该,需要注意的是pull并不是把遠(yuǎn)程庫的文件拉過來覆蓋當(dāng)前文件睬棚,而是與本地文件merge合并。
PS:刪除遠(yuǎn)程關(guān)聯(lián):git remote rm origin
建立遠(yuǎn)程關(guān)聯(lián):git remote add origin git@github.com:xxx/xxx解幼。
5抑党、標(biāo)簽管理
5.1 創(chuàng)建標(biāo)簽
1、commit id不好記撵摆,所以需要tag來表示某個(gè)版本底靠,如v1.0;
2特铝、首先切換到需要打tag的分支暑中;
3、git tag v1.0 用于新建一個(gè)標(biāo)簽鲫剿,默認(rèn)為HEAD鳄逾,也可以指定一個(gè)commit id;
4灵莲、git show 查看標(biāo)簽信息:
5雕凹、git tag -a -m "標(biāo)簽信息" 可以指定標(biāo)簽信息;
6政冻、git tag -s -m "標(biāo)簽信息"""可以用PGP簽名標(biāo)簽枚抵;
7、git tag可以查看所有的標(biāo)簽赠幕。
5.2 操作標(biāo)簽
1俄精、git push origin 向遠(yuǎn)程庫推送一個(gè)tag;
2榕堰、git push origin --tags 向遠(yuǎn)處庫推送全部未推送的本地tag;
3、git tag -d 刪除一個(gè)本地tag逆屡;
4圾旨、git push origin :refs/tags/刪除一個(gè)遠(yuǎn)程的tag。
6魏蔗、GitHub
參與別人開源項(xiàng)目的構(gòu)建:
1砍的、在GitHub上,可以任意Fork開源倉庫莺治;
2廓鞠、自己擁有Fork后的倉庫的讀寫權(quán)限;
3谣旁、可以推送pull request給官方倉庫來貢獻(xiàn)代碼床佳。
7、自定義Git
1榄审、讓Git顯示顏色砌们,會(huì)讓命令輸出看起來更醒目:git config --global color.ui true;
2搁进、讓git忽略某些特殊文件:
在Git工作區(qū)根目錄下新建一個(gè)文件.gitignore浪感,其中包含了所有需要忽略的文件或目錄;
可以參考https://github.com/github/gitignore上的.gitignore文件進(jìn)行修改饼问;
如果想添加某個(gè)被忽略的文件:
(1)可以使用git add -f 強(qiáng)制添加影兽;
(2)可以使用git check-ignore -v 查看是.gitignore文件的哪一行添加了該文件名。
3莱革、配置別名:(如峻堰,將git status命令改為git st)
git config <--global> alias.st status;加上<--global>代表該別名全局有效驮吱,配置文件為用戶目錄下的.gitconfig文件茧妒。
git config <--global> alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 一鍵配置log
別名的配置不是全局的,可以在.git/config底下的[alias]標(biāo)簽看到左冬;是全局的桐筏,則在用戶主目錄下的.gitconfig文件中可以看到。
4拇砰、建立Git服務(wù)器可以參考鏈接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000