「備忘錄」60+Git常用命令列

童歐巴發表於2020-05-11

git命令列.png
觀感度:?????

口味:椒麻雞絲

烹飪時間:10min

Git 的命令實在是太多了,有的小夥伴就說了,我可以用客戶端(Source Tree、Gitkraken、tortoiseGit)它們不香嗎?

通常情況下,一些簡單操作是香的。但是建議你不要越過命令列這座山而直接去使用 GUI。(而且強烈建議學習一下 Git 的原理)

先不論 GUI 是否支援複雜的操作,當你在實際工作中遇到問題的時候,可能你無法找到 GUI 的解決方案,因為搜尋引擎查出來的都是命令列。而且命令列的錯誤提示是非常詳細的,你可以準確鎖定你錯誤的原因以及正確的使用方法,孰能自然生巧。

其次,程式設計師使用命令列是一件多麼酷的事情啊,在黑框框裡操作的時候難道沒有一種黑客既視感嗎?這不就是小時候夢想著成為的樣子麼?:)

請你給你的熱愛多一點點堅持!

本文整理了一些常用的 Git 操作,老司機可以溫故知新,新手可以點贊收藏。文末提供了入門教程及學習資源,請自行下滑~

配置操作

全域性配置

git config --global user.name '你的名字'
git config --global user.email '你的郵箱'

當前倉庫配置

git config --local user.name '你的名字'
git config --local user.email '你的郵箱'

檢視 global 配置

git config --global --list

檢視當前倉庫配置

git config --local --list

刪除 global 配置

git config --unset --global 要刪除的配置項

刪除當前倉庫配置

git config --unset --local 要刪除的配置項

本地操作

檢視變更情況

git status

將當前目錄及其子目錄下所有變更都加入到暫存區

git add .

將倉庫內所有變更都加入到暫存區

git add -A

將指定檔案新增到暫存區

git add 檔案1 檔案2 檔案3

比較工作區和暫存區的所有差異

git diff

比較某檔案工作區和暫存區的差異

git diff 檔案

比較暫存區和 HEAD 的所有差異

git diff --cached

比較某檔案暫存區和 HEAD 的差異

git diff --cached 檔案

比較某檔案工作區和 HEAD 的差異

git diff HEAD 檔案

建立 commit

git commit

將工作區指定檔案恢復成和暫存區一致

git checkout 檔案1 檔案2 檔案3

將暫存區指定檔案恢復成和 HEAD 一致

git reset 檔案1 檔案2 檔案3

將暫存區和工作區所有檔案恢復成和 HEAD 一樣

git reset --hard

用 difftool 比較任意兩個 commit 的差異

git difftool 提交1 提交2

檢視哪些檔案沒被 Git 管控

git ls-files --others

將未處理完的變更先儲存到 stash 中

git stash

臨時任務處理完後繼續之前的工作

  • pop 不保留 stash
  • apply 保留 stash
git stash pop
git stash apply

檢視所有 stash

git stash list

取回某次 stash 的變更

git stash pop stash@{數字n}

優雅修改最後一次 commit

git add.
git commit --amend

分支操作

檢視當前工作分支及本地分支

git branch -v

檢視本地和遠端分支

git branch -av

檢視遠端分支

git branch -rv

切換到指定分支

git checkout 指定分支

基於當前分支建立新分支

git branch 新分支

基於指定分支建立新分支

git branch 新分支 指定分支

基於某個 commit 建立分支

git branch 新分支 某個 commit 的 id

建立並切換到該分支

git checkout -b 新分支

安全刪除本地某分支

git branch -d 要刪除的分支

強行刪除本地某分支

git branch -D 要刪除的分支

刪除已合併到 master 分支的所有本地分支

git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d 

刪除遠端 origin 已不存在的所有本地分支

git remote prune orign

將 A 分支合入到當前分支中且為 merge 建立 commit

git merge A分支

將 A 分支合入到 B 分支中且為 merge 建立 commit

git merge A分支 B分支

將當前分支基於 B 分支做 rebase,以便將B分支合入到當前分支

git rebase B分支

將 A 分支基於 B 分支做 rebase,以便將 B 分支合入到 A 分支

git rebase B分支 A分支

變更歷史

當前分支各個 commit 用一行顯示

git log --oneline

顯示就近的 n 個 commit

git log -n

用圖示顯示所有分支的歷史

git log --oneline --graph --all

檢視涉及到某檔案變更的所有 commit

git log 檔案

某檔案各行最後修改對應的 commit 以及作者

git blame 檔案

標籤操作

檢視已有標籤

git tag

新建標籤

git tag v1.0

新建帶備註標籤

git tag -a v1.0 -m '前端食堂'

給指定的 commit 打標籤

git tag v1.0 commitid

推送一個本地標籤

git push origin v1.0

推送全部未推送過的本地標籤

git push origin --tags  

刪除一個本地標籤

git tag -d v1.0

刪除一個遠端標籤

git push origin :refs/tags/v1.0

遠端互動

檢視所有遠端倉庫

git remote -v

新增遠端倉庫

git remote add url

刪除遠端倉庫

git remote remove remote的名稱

重新命名遠端倉庫

git remote rename 舊名稱 新名稱

將遠端所有分支和標籤的變更都拉到本地

git fetch remote

把遠端分支的變更拉到本地,且 merge 到本地分支

git pull origin 分支名

將本地分支 push 到遠端

git push origin 分支名

刪除遠端分支

git push remote --delete 遠端分支名
git push remote :遠端分支名

參考及 Git 學習資源