1.設(shè)置賬戶與郵箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com" //此處global命令為當(dāng)前機(jī)器下所有倉(cāng)
2.創(chuàng)建版本庫(kù)
$ mkdir learngit //創(chuàng)建文件夾
$ git init //將這個(gè)目錄變?yōu)镚it可以管理的倉(cāng)庫(kù)
ls -ah //查看隱藏目錄
3.添加到暫存區(qū)與提交到倉(cāng)庫(kù)
$ git add readme.txt //將文件添加到暫存區(qū),可反復(fù)使用,添加多個(gè)文件,再一次性提交
$ git commit -m "wrote a readme file" //將文件提交到倉(cāng)庫(kù)(-m為提交注釋)
4.查看改動(dòng)狀態(tài)與改動(dòng)具體差異
$ git status //讓我們掌握當(dāng)前倉(cāng)庫(kù)的狀態(tài)
$ git diff readme.txt //查看對(duì)某文件進(jìn)行了什么修改
$ cat readme.txt //查看文件內(nèi)容
5.查看提交歷史記錄
$ git log //顯示從最近到最遠(yuǎn)的提交日志
//最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file
$ git log --pretty=oneline //簡(jiǎn)化log
6.版本回退
$ git reset --hard HEAD^ //HEAD表示當(dāng)前版本,HEAD^表示上一版本,HEAD~100表示往上100個(gè)版本
$ git reset --hard 3628164 //往指定版本跳轉(zhuǎn) 版本號(hào)無(wú)需寫(xiě)全
$ git reflog //查看你的每一次命令,以便確認(rèn)要回到未來(lái)的那個(gè)版本
7.撤銷修改
$ git checkout -- readme.txt //讓某文件修改撤銷,讓他回到最近一次git commit或git add的狀態(tài)(未add時(shí))
$ git reset HEAD readme.txt //git reset命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū).
//當(dāng)我們用HEAD時(shí),表示最新的版本.
//已a(bǔ)dd,未commit再使用checkout撤銷工作區(qū)的修改.
8.刪除文件
$ rm test.txt //直接刪除文件,在通過(guò)提交達(dá)到刪除目的
$ git rm test.txt
$ git commit -m "remove test.txt" //從版本庫(kù)中刪除該文件,并git commit
$ git checkout -- test.txt //當(dāng)發(fā)生誤刪時(shí),可以從版本庫(kù)中恢復(fù)最新版本
9.創(chuàng)建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com" //創(chuàng)建SSH Key
//用戶目錄下,有id_rsa和id_rsa.pub兩個(gè)文件,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人.
10.添加遠(yuǎn)程庫(kù)
$ git remote add origin git@github.com:michaelliao/learngit.git //關(guān)聯(lián)遠(yuǎn)程庫(kù)
//orgin 一般指代遠(yuǎn)程庫(kù)
$ git push -u origin master
//將本地庫(kù)的內(nèi)容推送到遠(yuǎn)程
//因?yàn)槭堑谝淮瓮扑?加上-u參數(shù),將本地master分支與遠(yuǎn)程的master分支聯(lián)系起來(lái)
$ git push origin master //將本地master分支的最新修改推送這Github
11.從遠(yuǎn)程庫(kù)克隆
$ git clone git@github.com:Mzs1994/gitskills.git //從遠(yuǎn)程庫(kù)克隆一個(gè)本地庫(kù)
//Git支持多種協(xié)議 包括https,但通過(guò)ssh支持的原生git協(xié)議速度最快
12.創(chuàng)建與合并分支
$ git checkout -b dev
//創(chuàng)建dev分支,git checkout命令加上-b參數(shù)表示創(chuàng)建并切換
//相當(dāng)于以下兩條命令
$ git branch dev
$ git checkout dev
$ git branch //查看當(dāng)前分支
$ git checkout master //完成dev工作后,切換回master分支
$ git merge dev //用于合并指定分支到當(dāng)前分支
$ git branch -d dev //刪除當(dāng)前分支
13.解決沖突
$ git log --graph --pretty=oneline --abbrev-commit //可以看到分支合并圖
//當(dāng)Git無(wú)法自動(dòng)合并分支時(shí),就必須首先解決沖突。解決沖突后,再提交,合并完成。
14.分支管理策略
$ git merge --no-ff -m "merge with no-ff" dev
//--no-ff參數(shù),表示禁用Fast forward
//這次合并,會(huì)創(chuàng)建一個(gè)新的commit
//出現(xiàn)如下log
$ git log --graph --pretty=oneline --abbrev-commit
* 7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
* 59bc1cb conflict fixed
15.Bug分支
$ git stash //將未提交的修改暫時(shí)保存
$ git stash list //查看工作現(xiàn)場(chǎng)存儲(chǔ)情況
$ git stash apply //恢復(fù)但不刪除stash內(nèi)容
$ git stash apply stash@{0} //恢復(fù)但不刪除指定stash內(nèi)容
$ git stash drop //刪除stash內(nèi)容
$ git stash pop //恢復(fù)同時(shí)刪除stash內(nèi)容
//修復(fù)bug時(shí),我們會(huì)通過(guò)創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并,最后刪除;
//當(dāng)手頭工作沒(méi)有完成時(shí),先把工作現(xiàn)場(chǎng)git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場(chǎng)。
16.Feature分支
$ git branch -D feature-vulcan //強(qiáng)行刪除
//如果要丟棄一個(gè)沒(méi)有被合并過(guò)的分支,可以通過(guò)git branch -D <name>強(qiáng)行刪除。
17.多人協(xié)作
$ git remote //查看遠(yuǎn)程庫(kù)的信息
$ git remote -v //查看遠(yuǎn)程庫(kù)的詳細(xì)信息
$ git push origin master //推送分支,前一個(gè)為遠(yuǎn)程,后一個(gè)為本地
$ git branch //查看分支
$ git checkout -b dev origin/dev //創(chuàng)建遠(yuǎn)程origin的dev分支到本地
$ git branch --set-upstream dev origin/dev
//建立本地dev分支與遠(yuǎn)程origin/dev分支
18.標(biāo)簽
$ git tag //查看所有標(biāo)簽
$ git tag v0.9 6224937 //給提交打標(biāo)簽
$ git show v0.9 //查看標(biāo)簽信息
$ git tag -a v0.1 -m "version 0.1 released" 3628164 //創(chuàng)建自帶說(shuō)明的標(biāo)簽
$ git tag -d v0.1 //刪除標(biāo)簽
$ git push origin v1.0 //推送標(biāo)簽到遠(yuǎn)程
$ git push origin --tags //一次性推送全部尚未推送到遠(yuǎn)程的本地代碼
$ git push origin :refs/tags/v0.9 //當(dāng)標(biāo)簽已經(jīng)推送到遠(yuǎn)程時(shí),先刪除本地標(biāo)簽
19.自定義Git
$ git config --global color.ui true //讓Git顯示顏色
20.忽略特殊文件
//配置.gitignore文件
$ git add -f App.class //強(qiáng)制添加文件到git
$ git check-ignore -v App.class //檢查忽略文件命令
21.配置別名
$ git config --global alias.st status //配置status的別名
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"
.git/config //每個(gè)倉(cāng)庫(kù)的配置文件
admin/.gitconfig //用戶主目錄