一張圖記住所有Git常用命令
在Microsoft的VSS,小烏龜SVN都已經作古,Git大行其道的今天,我們每天都跟Git打著交道。在Mac工作環境下我們習慣使用圖形化的工具sourceTree,但是如果對Git命令不瞭解的話,也是挺可怕的。所以今天從最常用的操作開始整理。
說明:
1,實心框為檔案狀態,箭頭方向的操作命令標記在了一旁。
2,除了從staged狀態到modified狀態的命令git reset HEAD file1中的HEAD file1不是必須的,其餘都是必要引數,例如命令中的,。
3,如何進行後退操作的後退操作?例如從staged狀態通過git commit到了commited狀態,發現提交錯了,通過git log命令檢視版本後,使用git reset 進行回滾。但是回滾之後發現原來的提交是正確的,其實不需要回滾。這是可以用git reflog,檢視所有通過git reset/git checkout進行後退的操作的HEAD,從而再次使用git reset 指向那個版本。例如:
我們已經提交了一個操作test1:
執行完git reset後git log中已經不存在test1的提交記錄,但是git reflog中可以看到:
這時我們只需要再次執行git reset a2138e,看看git log中是不是我們的test1操作又出來了。
4,當然了另外一些常用的命令也要知道。
切換到程式碼目錄後檢查當前分支
git branch
放棄所有本地檔案修改
git fetch --all
git reset --hard origin/branchname
建立分支並推送到遠端
git branch dyl_test
git checkout dyl_test
git push --set -upstream origin dyl_test(--set-upstream設定遠端物件,可以在後面的命令中省去origin及後面的內容)
查詢程式碼狀態
git status
切換分支
git checkout <branch>
刪除分支並推送到遠端
git branch -d/-D <branch>
git push origin --delete <branch>
log查詢:顯示Yalin Dang對BaseViewController.swift做的修改註釋中,含有“引導圖”的上下4行的資料。
git log --author="Yalin Dang" BaseViewController.swift | grep --context=4 "引導圖"
增加標籤
git tag -a "2.13.0Develop" -m "2.13.0開發版本"
git push origin 2.13.0Develop // 推送指定tag
git push origin --tags // 推送所有tags
回滾到指定標籤
git tag
git show tagXXX
git reset --hard xxxx
git push -f 強行推送(回滾遠端程式碼)
刪除標籤(實際上是往遠端推送了空tag)
git tag -d tagXXX
git push origin --delete tagXXX
檢視遠端標籤(將遠端標籤同步至本地,然後檢視)
git fetch
git tag
刪除全部Untracked file
cd 到根目錄
git clean -fd
5,刪除分支
分支整理–刪除本地分支AAA,並推送到遠端
git branch -d AAA
git push origin :AAA
檢視並刪除遠端分支AAA
git branch -r // -a 檢視本地和遠端所有分支
git push origin :AAA
批量刪除含有”pk-qiyu”的本地分支
git branch | grep "pk-qiyu" | xargs git branch -D
批量刪除含有”pk-“的遠端分支
①檢索包含”pk-“的遠端分支
git branch -r | awk -F '/' '/pk-/ {printf("%s\n", $2)}'
如果用grep檢索的話,結果是origin/pk-xxx,而遠端刪除命令中是不能包括origin的。
②將檢索出來的分支刪除
git branch -r | awk -F '/' '/pk-/ {printf("%s\n", $2)}' | xargs -I{} git push origin :{}
這裡需要通過xargs命令將檢索出來的分支名字串逐行傳給git push origin :xxx命令來進行刪除。xargs中-I{}表明需要將引數傳放到後面的{}的位置。
③如果刪除過程中遇到錯誤:
error: unable to delete ‘zjh_amap’: remote ref does not exist
error: failed to push some refs to ‘https://git.mararun.cn/app/runner-ios.git’
那麼先用命令刪除遠端分支的快取:
git fetch -p origin
6,分支合併
將遠端的指定tag(2.20.0Develop)的程式碼合併到指定的分支(master)上
①為tag2.20.0Develop建立分支並推送到遠端
git checkout -b 2.20.0 2.20.0Develop #-b:如果有重名則建立失敗; -B:如果重名的話,會覆蓋掉原分支
git push origin 2.20.0
②從2.20.0拉取程式碼到本地master分支,推送到遠端
git checkout master
git pull origin 2.20.0
git push