一、Git安裝git
安裝後需配置對應的用戶名和郵箱github
git config --global user.name "xxxx"windows
git config --global user.email "email@example.com"app
global參數設置表示爲全部本地git倉庫應用,若要單獨配置需去除3d
二、Git建立版本庫(windows建議目錄不使用中文)指針
git init 將當前目錄變爲Git可管理倉庫日誌
git add 添加文件進入倉庫cdn
git add -f (文件名)可進行強制添加,若須要修改,則將.gitignore中文件進行修改blog
git check-ignore 查看對應ignore文件rem
git commit 遞交文件 -m(接本次修改的說明)
add可屢次添加多份文件進入暫存區
commit可一次性遞交全部文件
三、Git回溯版本
git status 獲取當前本地倉庫狀態
git diff (文件名)比對當前文件修改內容
git log 獲取遞交的歷史記錄 --pretty=oneline精簡日誌信息
git reset --hard (commit id)回退到指定版本
git reflog 記錄每次命令
四、工做區和暫存區
文件在本地倉庫執行git add 後會添加到暫存區
文件在暫存區commit後直接傳入遠程倉庫
五、管理修改
cat +(文件)能夠直接打開文件進行編輯
git diff HEAD -- (文件)能夠直接查看工做區和版本庫之間的區別
git add同一個文件兩次後會合並修改內容 commit以後會一次性遞交
六、撤銷修改
git checkout -- file能夠丟棄工做區的修改
有兩種對應的修改狀況:
一、文件修改後未存入到暫存區,撤銷以後即回到當初獲取到的文件內容
二、文件已經添加入暫存區,在暫存區作出了修改,修改撤銷後即回到初步添加到暫存區的狀態
git reset HEAD (file)能夠直接將暫存區的修改撤銷並退回到工做區
HEAD表示當前最新版本
reset指令能夠回退版本,也能夠將暫存區的修改回退到工做區
七、刪除文件
git rm (文件)刪除文件
當本地和遠程倉庫中文件不一致時,經過git status進行文件比對判斷
若須要在本地刪除,則進行git rm後再進行commit纔可在遠程倉庫中刪除
若錯誤的在本地中刪除,則可經過git checkout -- (文件)進行恢復
本質是用版本庫中的文件替換工做區的版本
git branch -D xxxxx 強制刪除
八、遠程倉庫
git remote add origin git@github.com:michaelliao/learngit.git 關聯本地倉庫和遠程倉庫
git push -u origin master關聯以後直接進行push,本質是將當前分支直接遞交至遠程倉庫
-u選項是在第一次push時也將本地master分支和遠程master分支進行關聯,以後再進行push能夠去掉該參數
九、分支
Git用master指向最新的提交,再用HEAD指向master,就能肯定當前分支,以及當前分支的提交點
當咱們建立新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上
對工做區的修改和提交就是針對dev分支了,好比新提交一次後,dev指針往前移動一步,而master指針不變
直接把master指向dev的當前提交,就完成了合併
刪除dev分支就是把dev指針給刪掉,刪掉後,咱們就剩下了一條master分支
git checkout -b dev 建立dev分支並切換到dev分支
git checkout命令加上-b參數表示建立並切換,至關於如下兩條命令:
git branch dev
git checkout dev
git merge dev 將dev分支合併到master分支,合併時,dev分支需進行add commit操做,切換到master分支後,修改文件是不存在的,以後再進行merge能夠完成合並,合併時的fast-forward代表該次爲快進模式,該模式下,刪除分支後會直接丟掉對應分支信息,若強制禁用該模式,git會在merge後生成一個新的commit,能夠從git log中看出分支信息
圖示爲ff模式合併
圖示爲--no-ff模式合併,即禁用ff模式
git merge --no-ff -m "merge with no-ff" dev 禁用快速模式進行合併,後面需加上-m,由於該合併需建立一次新的遞交
git branch -d dev 刪除dev分支
git switch -c dev 建立並切換到dev分支
git switch master 切換到master分支
使用switch進行切換分支
十、Bug分支
git stash 當進行多個不一樣分支的工做時,有某個緊急工做須要當即完成,可是當前工做仍處於處理階段時,可經過stash來隱藏當前工做區間,隱藏後經過status查看當前工做區確保工做區是乾淨的。後續步驟即爲普通的git遞交步驟(切換分支,添加文件,遞交文件,推送文件,刪除分支)
git stash list 查看隱藏工做區,恢復方式有兩種:
git stash apply 該恢復不會刪除stash內容,須要用git stash drop進行刪除
git stash pop 恢復工做區間,同時刪除stash內容
進行恢復後再經過git stash list確保不存在隱藏工做區
git cherry-pick (commit id)複製一個特定的提交到當前分支
適用於在master分支修復bug後,由於dev分支拉取後二者也會具備相同bug問題,所以直接經過該方法重複遞交至dev(需切換至dev分支),同理,dev分支修復後也能夠修復master分支上的bug,不過從dev分支切換至master分支時,須要用stash保留當前工做區間
十一、多分支
git remote 查看遠程庫信息
git remote -v 顯示詳細遠程庫信息
git push origin dev 向遠程推送dev分支,前提是遠程需存在對應分支
當推送的遠程分支和你正在修改的分支在多人工做狀況下形成了內容衝突時,須要先pull遠程倉庫內容,在本地進行合併,解決衝突後再推送
git branch --set-upstream-to=origin/dev dev 將本地dev分支和遠程dev分支創建鏈接,若遠程遞交存在衝突,則需手動解決衝突後在遞交,或者經過git remote prune origin 強制同步遠程和本地內容
十二、rebase
git rebase
rebase操做能夠把本地未push的分叉提交歷史整理成直線
rebase的目的是使得咱們在查看歷史提交的變化時更容易,由於分叉的提交須要三方對比