1. 安裝
安裝完成后昔脯,需要一步設(shè)置奕翔,在命令行中輸入:
git config --global user.name "name"
git config --global user.email "email@e.com"
如果使用了 git config 命令的 --global 參數(shù)崇裁,則這臺機器上的所有 Git 倉庫都會使用這個配置黄选,可以單獨對某個特定的倉庫設(shè)定不同的用戶名和郵箱地址但汞。
2. 創(chuàng)建版本庫
在需要的目錄下使用
git init 命令
為避免出現(xiàn)問題免猾,包括根目錄在內(nèi)的多級目錄名都不要使用中文疆瑰。
使用上述命令后眉反,會創(chuàng)建一個空的倉庫,并且目錄下會多出一個 .git 目錄穆役,這個目錄是 Git 用來跟蹤管理版本庫的寸五。
3. 添加,提交耿币,查看狀態(tài)梳杏,對比不同
git add
告訴 Git ,把文件添加到倉庫
git commit
把文件提交到倉庫
git commit -m "first commit"
把文件提交到倉庫,并添加說明
git status
查看當(dāng)前倉庫的狀態(tài)
git diff
查看 difference 十性,可以看出做了什么修改
4. 版本回退
git log
顯示從最近到最遠的提交日志
git log --pretty=oneline
用于顯示提交日志叭莫,避免太多內(nèi)容,簡潔顯示
git reset --hard HEAD^
用于版本回退烁试,上一個版本就是 HEAD^雇初,上上個版本就是 HEAD^^,往前一百個版本則可以寫成 HEAD~100
git reset --hard 1094a
版本回退至指定 ID 的版本
git reflog
用來記錄你的每一次命令
5. 工作區(qū)和暫存區(qū)
工作區(qū):就是我們電腦中看到的目錄
版本庫:工作區(qū)中存在的 .git 目錄减响,則是 Git 的版本庫靖诗,版本庫中最重要的就是 stage(或者叫 index) 的==暫存區(qū)==
git diff HEAD --readme.txt
可以查看工作區(qū)和版本庫里面最新版本的區(qū)別
每次提交,需要先將修改 add 到暫存區(qū)支示,然后再 commit 到版本庫
6. 撤銷修改
git checkout -- file
可以丟棄工作區(qū)的修改刊橘,此時分兩種情況:
第一種:此文件自修改后還沒放到暫存區(qū),撤銷修改則回到和版本庫一模一樣的狀態(tài)颂鸿;
第二種:此文件已經(jīng)添加到暫存區(qū)后又發(fā)生了修改促绵,則撤銷修改回到添加暫存區(qū)后的狀態(tài)。
總結(jié):就是讓這個文件恢復(fù)到上一次 commit 或 add 的狀態(tài)嘴纺。
git reset HEAD file
可以把暫存區(qū)的修改撤銷掉败晴,重新放回工作區(qū)
7. 刪除文件
如果你工作區(qū)中刪除了某個文件,則工作區(qū)就和版本庫不同了栽渴,通過 git status 則可以查看哪些文件被刪除了尖坤,此時你有兩個選擇:
第一:如果你確實要在版本庫中刪除這個文件,那就用命令 git rm 刪掉闲擦,并且 git commit
第二:如果是誤刪慢味,則可以丟棄工作區(qū)的修改,使用 git checkout -- file 將誤刪的文件恢復(fù)
8. 遠程倉庫
本地 Git 倉庫和 GitHub 倉庫之前傳輸可以通過 SSH 加密進行墅冷。則需要一些設(shè)置:
第一步:創(chuàng)建 SSH Key纯路。 在用戶目錄下,看看有沒有 .ssh 目錄寞忿,如果有驰唬,則看此目錄下有沒有 id_rsa 和 id_rsa.pub 這兩個文件,如果有罐脊,則跳到下一步定嗓。如果沒有蜕琴,則打開 Shell(Windows 下打開 Git Bash),創(chuàng)建 SSH Key:
ssh-keygen -t rsa -C "email"
然后一直回車就可以了萍桌,順利的話,則可以在用戶目錄下看到 .ssh 目錄凌简,并且有 id_rsa 私鑰和 id_rsa.pub 公鑰
第二步:登錄 GitHub 上炎,打開 “Account settings”,“SSH Keys”頁面:然后點擊“Add SSH Key”,填上任意 Title藕施,在 Key 文本框里黏貼 id_rsa.pub 文件的內(nèi)容寇损,點擊 “Add Key”即可看到添加的 Key
假如你有多臺電腦,則可以將你每臺電腦的公鑰添加到 GitHub 上裳食,則就可以在每臺電腦上進行推送了矛市。
關(guān)聯(lián)遠程庫,使用诲祸,命令:
git remote add origin git@server-name:path/repo-name.git
第一次推送本地庫到遠程庫的時候浊吏,由于遠程庫是空的,則用
git push -u origin master
在第一次推送的時候救氯,Git 不但會把本地的 master 分支推送到遠程新的 master 分支找田,還會把本地的 master 分支和遠程的 master 分支關(guān)聯(lián)起來,在以后的推送或者拉取的時候着憨,就可以簡化命令了墩衙。
git push origin master 即可
git clone
克隆遠程倉庫
9. 分支管理
-
如果一開始的時候,只有 master 一條分支甲抖,則 master 指向最新的提交漆改,而 HEAD 則指向 master,這樣就確定了當(dāng)前的分支以及當(dāng)前的提交點准谚。
你每做一次提交籽懦,master 分支就會向前移動一步,隨著不斷提交氛魁,master 分支的線會越來越長暮顺。
image -
如果此時我們創(chuàng)建一個分支 dev,則 Git 會創(chuàng)建一個指針 dev秀存,指向 master 相同的提交捶码,再把 HEAD 指向 dev,表明當(dāng)前分支為 image
-
如果在此基礎(chǔ)上或链,你又做了一次提交惫恼,則 dev 指針向前移動一步,而 master 指針不變澳盐。
image 如果在 dev 上開發(fā)結(jié)束了祈纯,則可以吧 dev 合并到 master 上,Git 上的合并叼耙,最直接的方法就是直接吧 master 指向 dev 的當(dāng)前提交腕窥,即可完成合并。
如果將上述過程換成實際操作筛婉,則為:
創(chuàng)建 dev 分支
git checkout -b dev
注:git checkout 命令加上 -b 則表示創(chuàng)建并切換簇爆,相當(dāng)于如下兩條命令:
git branch dev
git checkout dev
使用 git branch 命令可以查看當(dāng)前分支
在 dev 分支上做了修改之后,使用 add ,然后 commit 將修改提交到 dev 分支入蛆,
然后 git checkout master 切換到 master 分支响蓉,使用 git merge dev 將 dev 分支合并到 master 分支上。
如果使用完分支之后哨毁,想要刪除分支枫甲,則可以使用 git branch -d dev 將 dev 分支刪除。
10. 沖突解決
如果主分支 master 和 dev 分支同一文件都做了修改扼褪,然后合并 dev 分支的時候就會出現(xiàn)沖突言秸,
解決沖突就是把 Git 合并失敗的文件手動編輯為我們希望的內(nèi)容,再提交迎捺。
用 git log --graph 命令可以看到分支合并圖举畸。
11. 分支管理策略
通常,合并分支時凳枝,如果可能抄沮,Git 會用 Fast forward 模式,但這種模式下岖瑰,刪除分支后叛买,會丟掉分支信息。
如果要強制禁用 Fast forward 模式蹋订,Git 就會在 merge 的時候生成新的 commit率挣,這樣就可以從分支歷史上看到分支信息。
git merge --no-ff -m "merge with no-ff" dev
實際開發(fā)中露戒,我們應(yīng)該遵循:
- master 分支應(yīng)該是非常穩(wěn)定的椒功,也就是用來發(fā)布新版本的,平時不能在上面干活智什。
- 平時干活都在 dev 分支上动漾,dev 分支是及其不穩(wěn)定的,當(dāng)需要發(fā)布的時候荠锭,把 dev 分支合并到 master 上旱眯,在 master 分支發(fā)布版本。
-
你和你的同事每個人都在 dev 上干活证九,每個人都有自己的分支删豺,時不時往 dev 分支上合并就可以了。
image
12. Bug 分支
如果你在分支 dev 上進行開發(fā)的時候愧怜,測試部門測試出 master 上有 bug呀页,需要你立即修復(fù)一下,而你當(dāng)前還在 dev 上開發(fā)叫搁,沒有進行提交赔桌,因為工作只進行了一般,還沒法提交渴逻,則此時就可以使用
git stash
將當(dāng)前工作現(xiàn)場“儲存”起來疾党,等以后恢復(fù)現(xiàn)場繼續(xù)工作。
此時你可以切換到 master 上惨奕,然后創(chuàng)建一個修復(fù) bug 的臨時分支雪位,然后修復(fù)后,add 梨撞、commit 到臨時分支上雹洗,然后在 master 上 merge 一下。
修復(fù)完 bug 后卧波,你切換到 dev 分支上繼續(xù)干活时肿,你之前將內(nèi)容“儲存”起來了,你有兩種方式可以將它恢復(fù):
- 使用 git stash apply 恢復(fù)港粱,但是恢復(fù)之后螃成,stash 內(nèi)容并不刪除,你需要繼續(xù)使用 git stash drop 來刪除查坪。
- 使用 git stash pop 寸宏,恢復(fù)的同時也可以把 stash 內(nèi)容刪除了。
使用 git stash list 可以查看目前所有的 stash 內(nèi)容偿曙。
使用 git stash apply stash@{0} 可以恢復(fù)指定 stash 內(nèi)容氮凝。、
如果要丟棄一個沒有被合并過的分支望忆,通過:
git branch -D name
13. 多人協(xié)作
遠程倉庫的默認名稱是 origin
查看遠程庫的信息罩阵,可使用:
git remote 或者使用 git remote -v 顯示更詳細的信息。
推送分支:
git push origin master
推送其他分支
git push origin dev
并不是所有分支都要推送到遠程倉庫启摄,如果選擇呢永脓?
- master 分支是主分支,因此要時刻與遠程同步
- dev 分支是開發(fā)分支鞋仍,所有的成員都要在上面進行工作常摧,所以也需要與遠程同步
- bug 分支只用于本地修復(fù) bug,沒必要推送到遠程分支威创,除非有需要記錄修復(fù)了多少個 bug
抓取分支
創(chuàng)建本地分支
git checkout -b dev origin/dev
本地分支和遠程分支建立鏈接關(guān)系
git branch --set-upstream-to <branch-name> origin/<branch-name>
注:
多人協(xié)作工作模式:
- 首先落午,可以試圖用 git push origin <branch-name> 推送到遠程分支
- 如果推送失敗,則因為遠程倉庫比你的本地倉庫新肚豺,則需要先進行 git pull 進行合并
- 如果合并沖突溃斋,則解決沖突,并在本地提交
- 沒有沖突或者解決完沖突后吸申,在使用 git push origin <branch-name> 進行推送
- 如果 git pull 的時候提示 no tracking information梗劫,則說明本地分支和遠程分支沒有建立聯(lián)系享甸,則用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>
14. 標(biāo)簽管理
Git 中打標(biāo)簽,切換到指定分支梳侨,執(zhí)行:
git tag v1.0
使用 git tag 可以查看所有標(biāo)簽
git tag v0.9 f43434
可以對指定的 id 打 tag
git tag -a v0.1 -m "message" f3434
創(chuàng)建帶有說明的標(biāo)簽 -a 指定標(biāo)簽名稱
-m 指定說明信息
git tag -d v0.1 可以刪除錯誤標(biāo)簽
git push origin v1.0 可以將指定的 tag 推送到遠程倉庫
git push origin --tags 可以將所有的 tag 一次性推送到遠程倉庫
git push origin :refs/tags/v0.9 可以將 tag 從遠程刪除
15. 一個本地庫同時關(guān)聯(lián)多個遠程庫
git remote rm origin
先刪除已關(guān)聯(lián)的名為 origin 的遠程庫
git remote add github git@github.com:keven/learn.git
關(guān)聯(lián) Github 的遠程倉庫
git remote add gitee git@gitee.com:keven/learn.git
關(guān)聯(lián)碼云的遠程庫
git push github master
git push gitee master
推送到遠程
16. 自定義配置 Git
讓 Git 命令顯示顏色
git config --global color.ui true
忽略特殊文件
在 Git 目錄下新建 .gitignore 文件蛉威,然后把需要忽略的文件添加進去即可∽卟福可以參考 GitHub 地址:https://github.com/github/gitignore
.gitignore 文件本身要放到版本庫中蚯嫌,并且可以對 .gitignore 做版本管理。