- Git經常使用命令 基礎 總結 MD

Markdown版本筆記 個人GitHub首頁 個人博客 個人微信 個人郵箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目錄

Git經常使用命令

幫助 help

git help //顯示經常使用命令列表,省略了 -i, --info
git 指令名 -help //顯示某一指令的使用幫助信息【經常使用】

git help -help //顯示help指令的使用幫助信息
git help -a //顯示全部可用的命令,--all
git help config //打開幫助文檔:Git/mingw64/share/doc/git-doc/git-config.html
git help help //打開幫助文檔:Git/mingw64/share/doc/git-doc/git-help.html
git help git //打開幫助文檔:Git/mingw64/share/doc/git-doc/git.html

經常使用操做

簡單命令git

git status //顯示工做目錄和暫存區的狀態,使用頻率絕對遙遙領先

初始化 clone init

git clone 倉庫地址 //將遠程項目克隆到當前目錄,默認在當前路徑(包含遠端的根目錄),此命令可配置的參數很是多
git clone 倉庫地址 本地路徑(文件夾) //不包含遠端的根目錄(本地目錄就是項目根目錄),會自動建立本地目錄
git clone --progress -v 倉庫地址 本地路徑 //小烏龜默認的clone命令(其實這些參數都不必配)
git init //從新初始化一個現有倉庫(會產生一個.git目錄),默認在當前路徑
git init --bare //新建一個Git代碼倉庫,做爲純淨的倉庫(不會產生.git目錄)

提交

git add . //能夠以空格分隔來一次add多個文件
git commit -m '信息'
git commit -am '信息' //至關於【git add .】和【git commit -m】的組合
git commit --amend //修改最近的提交信息,通常先執行【git add .】操做

push

git push origin 遠程分支名 //這種狀況下,本地分支名和遠程分支名不一致時會push失敗
git push origin 本地分支名:遠程分支名 //適用於上面那種方式push失敗的狀況
git push origin HEAD:refs/for/遠程分支名

暫存

git stash
git stash pop

更新

git pull //慎用
git pull --rebase //經常使用
 

撤銷修改

撤銷全部commit但保留修改內容github

git reset --soft 前一個提交的commitId

編輯了一個文件,尚未git add加入儲存區,這個時候,咱們能夠git checkout --file_name,來取消對它的修改。正則表達式

建立/切換分支。即git checkout -b dev。建立分支dev,並切換到dev分支。
等價於:git branch dev git checkput dev。
也能夠: git checkout -b dev origin/dev,即建立的本地分支dev是從遠程分支origin/dev獲得的。
而且你能夠看到;Branch 'dev' set up to track remote branch 'dev' from 'origin',即本地分支與遠程分支也創建了鏈接,因此,這個分支能夠和遠程的分支push和pull的。vim

分支 branch

查看分支

git branch //查看本地分支,顏色爲白色,綠色帶星號的爲當前所在分支,省略了 -l, --list
git branch -v //查看分支時帶hash值和最後的提交日誌(能夠和後面的組合),--verbose
git branch -r //查看遠端分支,顏色爲紅色,--remotes
git branch -a //列出全部分支,根據顏色可區分是本地分支仍是遠端分支,--all
git branch -vv //查看本地分支與遠程分支的映射關係

建立分支

git branch 分支名 //基於當前分支建立備份分支(不會checkout),省略了 -c, --copy;-C 強制複製
git branch aaa origin/bbb //基於遠程分支建立本地分支(不會checkout),省略了 -t, --track
git branch 分支名 commitId //新建一個指向指定commit的分支
git branch -m 原分支名 新分支名 //修改本地分支名,--move;-M 強制更名,即便已存在

切換分支 checkout

git checkout 分支名 //切到另外一本地分支,若是origin分支存在但本地分支不存在,則建立本地同名分支後checkout
//若是origin分支和本地分支分支都不存在,或有未commit或未stash的文件,則不執行切換命令並報錯
git checkout -f 分支名 //若是有未commit或未stash的文件,則強制還原(重置)後切到另外一本地分支,--force
git checkout -b 分支名 //基於當前本地分支建立備份分支,若是已存在則報錯,-B 強制建立
git checkout -b aaa origin/bbb //基於遠程分支建立本地分支【經常使用】
git checkout - //切換到上一個分支,使用此命令能夠在兩個分支之間快速切換

刪除分支

git branch -d 分支名 //刪除本地分支,該分支必須徹底和它的上游分支merge完成,--delete,delete fully merged branch
git branch -D 分支名 //強制刪除本地分支,delete branch (even if not merged)
git push origin -d 遠端分支名 //刪除遠程分支(服務端中的分支也會被刪除)
git branch -dr origin/分支名 //刪除追蹤分支(沒有刪除遠程分支,pull後還會拉下來),--delete --remotes

分支映射關係

git branch -u origin/分支名 //修改當前本地分支與指定遠程分支的映射關係,上游 --set-upstream-to
git branch -u origin/分支名 本地分支名 //修改指定本地分分支與指定遠程分支的映射關係
git branch --unset-upstream //撤銷本地分支與遠程分支的映射關係,默認當前分支
git branch --unset-upstream 本地分支名 //撤銷指定分支

分支關係

git branch --contains commitId //打印包含指定commitId的分支,即此commit之【後】拉的分支
git branch --no-contains commitId
git branch --merged commitId //打印合並指定commitId的分支,即此commit之【前】已存在的分支
git branch --no-merged commitId

配置 config

四種級別:local、global、system微信

  • local 對應的配置文件爲/.git/config,適用於特定git項目的配置【最高優先級】
  • global 對應的配置文件爲C:/Users/當前用戶/.gitconfig,適用於當前登陸用戶的配置【中優先級】
  • system 對應的配置文件爲/mingw64/etc/gitconfig,適用於全部用戶和全部項目的配置【低優先級】
  • worktree 估計是新增的,不經常使用,也不知道幹嗎的

更新配置信息

git config --global user.name 用戶名 //更新指定section下指定key的值,默認爲更新local下的配置信息
git config --global user.email 郵箱

經常使用的配置

git config --global alias.s status //設置別名,設置後【git s】和【git status】效果同樣
git config --global alias.c 'commit -am 日誌信息' //能夠用單引號或雙引號包起來
git config --global credential.helper store //配置長期存儲用戶名和密碼【untest】
git config remote.origin.push refs/heads/*:refs/for/* //設定提交的分支,默認爲local

編輯配置信息

git config --global -e //進入vim編輯配置信息,默認爲編輯local下的配置信息
git config --global --add 類別.鍵名 對應的值 //在指定section下添加鍵值對,默認爲local
git config --global --add bqt.tel 18680536603 //注意:key已存在時不會覆蓋,同一個key能夠有多個value
git config --global --unset user.tel //移除指定section下的鍵值對,默認爲local
git config --global --unset-all user.tel //若是同一個key有多個value,必須使用此命令,默認爲local
git config --global --rename-section aaa bbb //重命名section,默認爲local
git config --global --remove-section bbb //移除section及其下全部的k-v,默認爲local

查看配置信息

git config --global -l //參數 -l 爲 --list 列表 的簡寫
git config -l //獲取四種級別下全部配置的信息
git config --global --get user.name //查看某一具體key的配置信息,默認爲local
git config --get-all user.name //獲取四種級別下某一具體key全部配置的信息

日誌 log

參考fetch

不帶參數的功能說明:.net

  • 若是不帶任何參數,它會列出全部歷史記錄,最近的排在最上方
  • 顯示內容包括提交對象的哈希值,做者、提交日期、和提交說明
  • 若是記錄過多,則按Page Up、Page Down、↓、↑來控制顯示
  • 按q退出歷史記錄列表

顯示參數

git log --abbrev-commit //僅顯示SHA-1的前7個字符,而非全部的40個字符(徹底能夠用短hash代替長hash)
git log --relative-date //使用較短的相對時間顯示,例如 two weeks ago
git log --oneline //僅在一行顯示提交信息,默認僅顯示短hash和提交日誌

git log --decoreate //顯示commit所屬的branch和tag信息
git log --graph //顯示ASCII圖形表示的分支合併歷史

git log --stat //在最後列出commit中全部修改過的文件以及其A、D行數,以及全部A、D行數小計
git log --shortstat //和--stat相比,只在最後列出全部A、D行數小計
git log --name-only //在最後顯示修改文件清單
git log --name-status //在最後顯示修改文件清單,及文件的A、M、D的狀態信息

git log -p //以diff的形式輸出每一個commit具體修改的內容,內容過於詳細,使用較少
git show commitId //以diff的形式輸出指定commit具體修改的內容
git blame 文件名 //看某和指定文件的相關歷史記錄

過濾

git log -5 //僅顯示最近的幾回提交
git log --no-merges //不顯示 merge 的提交,默認狀況下 git log 會包含 merge commit
git log --merges //僅顯示 merge 的提交

按內容(做者、日誌、內容)過濾

git log --grep=bai //提交【日誌】中包含指定內容的提交,如下均支持正則表達式,添加-i能夠在過濾時忽略大小寫
git log --author='bqt\|bai' //做者的【user.name或user.email】包含指定內容的提交
git log --committer=bai //提交者的【user.name】包含指定內容的提交
git log -S"bqt" //搜索和指定內容相關的提交,使用-G代替-S可使用正則表達式去匹配

按提交時間過濾

git log --after 2019.08/11-20:22:30 //指定時間以後(不含)的提交,對日期格式的要求很是寬鬆,能夠充分發揮想象力
git log --before "2 weeks ago" //(含),相對時間,"2 week",2.week,2week,用任何符號區分【-_/\*=+#】均可以
git log --after 2019.7.13 --before 2019.8.12 //注意,時間區間爲(7.13,8.12],或理解爲[7.14,8.13),左開右閉

git log --since 3hour //相似 after,常見的單位還有 second、minute、hour、day、week、year
git log --until 3hour //相似 before,一樣能夠組合爲【--since yesterday --until 3hour】

按標籤名、commitId過濾

git log 標籤名 //相似 before,顯示指定標籤以前(含)的提交
git log 標籤名.. //相似 after,顯示指定標籤以後(不含)的提交

git log commitId //相似 before,顯示截止到指定commitId以前(含)的提交
git log commit1 commit2 //顯示commit1與commit2之間的全部提交,而且包括commit1和commit2
git log commit1..commit2 //左開右閉,commit可使用HEAD(最後一次提交)代替,HEAD~n表明倒數第n次提交

按分支名、文件名過濾

git log 分支名或文件名 //只查看跟某些分支或文件(目錄)相關的提交,分支名必須徹底匹配,文件名支持通配符*
git log -- 文件名 //若是產生混淆,可使用這種方式指定是文件名
git log 分支名 -- //若是產生混淆,可使用這種方式指定是分支名
git log 分支名 -- 文件名 //表明指定分支下的指定文件

git log b..a //分支a中有但分支b中沒有的提交,好比可用於列出feature相對於master的不一樣
git log b...a //三個點時表示或的意思

自定義輸出

git log --pretty="%cn %h - %cd" //自定義輸出

merge

rebase 操做

git rebase -i commitId 【r】 //修改多個歷史提交信息
git rebase -i commitId 【d】 //刪除多個歷史提交
git rebase -i commitId 【s】 //合併多個歷史提交

其餘

git diff
git clean -df日誌

git remote -v //查看遠程庫信息(origin、fetch、push),--verbose 詳細
git remote show origin

提交統計

git shortlog  //按照做者分類輸出提交統計信息
git shortlog -s  //對統計信息,按照做者進行排列,僅顯示做者和提交數量兩項信息
git shortlog -n  //對統計信息,按照提交數量進行倒序排列
相關文章
相關標籤/搜索