1. 配置git全局賬號信息
git 是分布式版本控制系統(tǒng),因此每臺機(jī)器都必須自報家門诬乞,也就是配置你的用戶名和郵箱。
- 配置用戶名丽惭、郵箱
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
- 查看用戶名、郵箱
git config user.name
git config user.email
- 修改用戶名责掏、郵箱
git config --global --replace-all user.name "New Name"
git config --global --replace-all user.email "new@xx.com"
2. 創(chuàng)建版本庫,提交修改到版本庫
什么是版本庫呢换衬?版本庫又名倉庫证芭,英文名repository担映,你可以簡單理解成一個目錄废士,這個目錄里面的所有文件都可以被Git管理起來蝇完,每個文件的修改、刪除短蜕,Git都能跟蹤,以便任何時刻都可以追蹤歷史朋魔,或者在將來某個時刻可以“還原”。
-
通過git init 將這個目錄變成Git可以管理的倉庫
git init
用 git add 命令告知git警检,把文件添加到本地倉庫;
// 1. 添加指定文件
git add xxx.txt
// 2. 添加所有修改文件
git add .
- 用 git commit 命令告知git扇雕, 把文件提交到本地倉庫。
git commit -m "本次提交的說明"
3. 版本回退
當(dāng)你不斷對文件進(jìn)行修改镶奉,然后不斷提交修改到版本庫里,就好比玩RPG游戲時腮鞍,每通過一關(guān)就會自動把游戲狀態(tài)存盤,如果某一關(guān)沒過去移国,你還可以選擇讀取前一關(guān)的狀態(tài)。有些時候迹缀,在打Boss之前,你會手動存盤祝懂,以便萬一打Boss失敗了,可以從最近的地方重新開始砚蓬。
Git也是一樣,每當(dāng)你覺得文件修改到一定程度的時候,就可以“保存一個快照”祟剔,這個快照在Git中被稱為commit。一旦你把文件改亂了物延,或者誤刪了文件,還可以從最近的一個commit恢復(fù)叛薯,然后繼續(xù)工作,而不是把幾個月的工作成果全部丟失买置。
- 使用 git log 命令顯示從最近到最遠(yuǎn)的提交日志
如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上 --pretty=oneline 參數(shù)蓉冈。
- 使用 git reset 命令回退到指令的版本
// 第1種回退方式:
// HEAD^表示上一個版本,HEAD^^表示上上一個版本寞酿,
// HEAD~100表示上一百個版本
git reset --hard HEAD^
// 第2種回退方式:
// 指定commit id 方式,commit id不需要寫全伐弹,git 會自動匹配
git reset --hard 109abd
- Git提供 git reflog 命令來記錄每一次Git操作命令
4. 撤銷修改
-
當(dāng)你把 工作區(qū) 的代碼改亂了之后,想直接丟棄工作區(qū)的修改時惨好,使用如下命令:
git checkout -- readme.txt
-
當(dāng)你把改亂的代碼添加到 暫存區(qū) 之后,想要把暫存區(qū)的修改回退到工作區(qū)日川,使用如下命令:
git reset HEAD readme.txt
git reset 命令不僅可以回退版本,還可以把暫存區(qū)的修改回退到工作區(qū)回论。
如果已經(jīng)提交到版本庫,可以通過 版本回退 進(jìn)行回滾傀蓉,前提是沒有提交到遠(yuǎn)程倉庫。
5. 創(chuàng)建分支與合并分支
-
創(chuàng)建分支葬燎,并切換到該分支
git checkout -b dev
- 上述命令相當(dāng)于執(zhí)行了 git branch dev 與 git checkout dev。
- git branch : 列出所有分支萨蚕,當(dāng)前分支用 * 標(biāo)記靶草。
-
合并分支
-
git merge dev
岳遥; - git merge 用于合并分支到當(dāng)前分支;
- 合并完成后浩蓉,可以刪除dev分支(
git branch -d dev
)。
-
6. 解決沖突
-
代碼沖突的原因:
- 不同的分支中捻艳,同時提交了對相同文件的修改。
- 不同分支(不同的本地分支认轨、本地與遠(yuǎn)程分支)。
-
代碼沖突的解決:
使用
git merge
命令進(jìn)行合并嘁字,這種情況下Git無法執(zhí)行快速合并,只能試圖將各自的修改合并起來纪蜒,但這種合并可能就存在沖突。-
當(dāng)出現(xiàn)沖突時(如下圖所示)纯续,就需要我們手動解決沖突后在提交。
git-merge-conflict.png -
Git用 <<<<<<< 猬错,=======,>>>>>>> 標(biāo)記出不同分支的內(nèi)容烤芦。
git-merge-conflict-2.png 提交手動解決沖突后的代碼。
提示:出現(xiàn)沖突時
git status
也可以用于查看沖突原因构罗。
7. 分支管理策略
通常,合并分支時遂唧,如果可能,Git會用Fast forward模式盖彭,但這種模式下纹烹,刪除分支后召边,會丟掉分支信息铺呵。如果要強(qiáng)制禁用Fast forward模式隧熙,Git就會在merge時生成一個新的commit,這樣贞盯,從分支歷史上就可以看出分支信息。
禁用Fast forward模式進(jìn)行分支合并
git merge --no-ff -m "禁用快速模式合并信息" dev
-
分支管理策略
- master分支應(yīng)該是非常穩(wěn)定的躏敢,也就是僅用來發(fā)布新版本,平時不能在上面干活件余。
- dev分支是不穩(wěn)定的,到某個時候啼器,比如1.0版本發(fā)布時,再把dev分支合并到master上镀首,在master分支發(fā)布1.0版本鼠次。
- 你和你的小伙伴們每個人都在dev分支上干活更哄,每個人都有自己的分支腥寇,時不時地往dev分支上合并就可以了。
8. Bug分支
軟件開發(fā)中赦役,bug就像家常便飯一樣。有了bug就需要修復(fù)掂摔,在Git中,由于分支是如此的強(qiáng)大乙漓,所以,每個bug都可以通過一個新的臨時分支來修復(fù)叭披,修復(fù)后,合并分支,然后將臨時分支刪除熏纯。
-
當(dāng)你正在dev分支干活時(工作只進(jìn)行一半),突然要創(chuàng)建bug分支fix bug樟澜,但是創(chuàng)建并切換分支需要提交當(dāng)前代碼,而你又不想提交該怎么辦往扔??萍膛?
-
使用
git stash
命令,將當(dāng)前工作現(xiàn)場存儲起來蝗罗,等以后再恢復(fù)現(xiàn)場再繼續(xù)工作。
git-stash.png 切換到Bug分支進(jìn)行bug 修復(fù)串塑。
-
切換回dev分支,進(jìn)行現(xiàn)場恢復(fù)桩匪。
查看之前的工作現(xiàn)場,使用
git stash list
命令查看;使用
git stash apply stash@{0}
恢復(fù)現(xiàn)場傻昙,stash內(nèi)容并不刪除彩扔,你需要用git stash drop
來刪除妆档;使用
git stash pop stash@{0}
虫碉,恢復(fù)的同時把stash內(nèi)容也刪了。
-
9. Feature分支
添加一個新功能時敦捧,你肯定不希望因為一些實驗性質(zhì)的代碼,把主分支搞亂了兢卵,所以逼纸,每添加一個新功能济蝉,最好新建一個feature分支菠发,在上面開發(fā),完成后滓鸠,合并,最后糜俗,刪除該feature分支。
- 開發(fā)一個新feature悠抹,最好新建一個分支扩淀;
- 如果要丟棄一個沒有被合并過的分支楔敌,可以通過
git branch -D <name>
強(qiáng)行刪除驻谆。
10. 多人協(xié)作
當(dāng)你從遠(yuǎn)程倉庫克隆時卵凑,實際上Git自動把本地的master分支和遠(yuǎn)程的master分支對應(yīng)起來了胜臊,并且,遠(yuǎn)程倉庫的默認(rèn)名稱是origin象对。
-
查看遠(yuǎn)程分支信息
git remote
-
git remote -v
查看詳細(xì)的遠(yuǎn)程分支信息
推送分支,使用
git push origin 分支名
抓取分支勒魔,使用
git pull origin 分支名
11. 忽略特殊文件
有些時候,你必須把某些文件放到Git工作目錄中沥邻,但又不能提交它們羊娃,比如保存了數(shù)據(jù)庫密碼的配置文件啦,等等蕊玷,每次git status都會顯示Untracked files ...
這個問題解決起來也很簡單,在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的.gitignore文件垃帅,然后把要忽略的文件名填進(jìn)去,Git就會自動忽略這些文件贸诚。不需要從頭寫.gitignore文件厕吉,GitHub已經(jīng)為我們準(zhǔn)備了各種配置文件,只需要組合一下就可以使用了头朱。
所有配置文件可以直接在線瀏覽:gitignore
相關(guān)文章:
Git教程