1. 程式人生 > >一張圖記住所有Git常用命令

一張圖記住所有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:
test1


執行完git reset後git log中已經不存在test1的提交記錄,但是git reflog中可以看到:
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