20 條實用的 git 命令
個人總結出的一些實用的 git
命令,分享給大家。
git config --global color.ui true
讓git
命令默認使用彩色輸出。 這條命令在git 2
之後已經成為默認配置,但如果你還在用比較老的版本(例如CentOS
上的默認的 git 版本),建議把這項配置加上去。git branch -av
顯示所有本地即遠程分支,並顯示最後提交的Commit
信息。如果不加參數,則只會顯示所有本地分支的名字。git checkout -b <NAME> [<START POINT>]
創建,並切換到新分支。git branch <NAME>
只會創建分支而不會切換到新分支,可以用它備份當前分支。git tag -L <PATTERN>
列出所有符合條件的標籤。如果你的項目嚴格按照Major.Minor.Update
作為版本名稱,那麼這條命令就非常有用。它可以直接列出來當前版本下有那些小的 bugfix 版本。當然如果你非要grep
一下我也沒意見。git diff -w
顯示未提交的更改,忽略空格。人們往往注重實際代碼的改變而不注重縮進的變化。如果某個文件有大量縮進改變,-w
這個參數就非常有用。git commit --amend
修補前一次提交。相當於撤銷前一次提交,做更改後重新提交。這也是一條非常實用的命令。當你發現前一次提交有一些小問題的時候(比如說漏提交了新創建的文件,或者有一些小的拼寫錯誤),可以用這條命令修正前一次提交。它對merge
提交友好,而且可以用於修正前一次提交的 message 信息。需要注意的是:如果你已經推送了前一次提交,amend
之後需要強推,這一點需要注意。git log --graph --oneline --no-merge
顯示當前倉庫的提交歷史。git log
大家都用過,但真正研究過git log
後面參數的人可能就不多。git log
後面可以接很多實用的參數,示例中的讓提交歷史以單行模式顯示、顯示提交歷史樹並刪除merge
提交。git log -p --follow --stat -- <PATH>
顯示某個文件的提交歷史。在git
中,--
後接文件路徑就代表對單個文件的操作。-p
可以顯示具體修改的行,--follow
可以跟蹤文件的移動和重命名,--stat
用於顯示添加、刪除行的數量。git config --global alias.xx "<COMMAND>"
給某 git 命令創建別名。對於一些比較長的命令,可以創建別名。以後只需要git xx
即可執行COMMAND
這條命令git pull --rebase
,--rebase
可以簡寫為-r
使用git rebase
代替git merge
執行pull
操作。git pull --rebase
可以構造出非常整齊的提交歷史樹,強迫症的福利。git
的官方文檔一再提醒這是個危險操作,因為它會修改你的代碼提交歷史。git rebase
的本質是撤銷指定的提交,然後以指定的方式重新提交他們。git pull -r
就相當於首先撤銷沒有推送到遠端的commit
,將遠程代碼覆蓋到本地之後,重新提交所有之前撤銷的commit
。與git merge
不同,當有衝突產生時,git rebase
不會為你的merge
操作生成一個新的提交。所以一旦git pull --rebase
執行完畢就無法撤銷。git config --global pull.rebase true
默認使用git rebase
代替git merge
執行pull
操作。git
提供了一系列配置git pull --rebase
操作:branch.<BRANCH NAME>.rebase
、branch.autosetuprebase
。這條是最簡單的全局配置項。儘管配置了默認使用rebase
,你可以使用--merge
開關強制使用git merge
執行git pull
。git rebase -i
互動式變基操作。git
中最強大的修改提交歷史的操作,當然也是最危險的操作。它可以讓你修改commit
說明、讓幾個commit
合併、交換commit
、刪除commit
,甚至在提交某commit
前執行一段shell
命令。非常有用、非常強大、同時也是極其危險的操作。強烈建議在執行git rebase -i
之前先使用git branch
備份當前分支。git push <remote> [<commit>]:<branch>
推送指定的commit
到遠程。有時候你某個工作做到一半,然後來了一個bug要修。當然最好的做法是基於最新的遠端分支新開一個分支,基於這個分支開發。但是如果你忘了新開分支,直接把代碼提交到了當前分支怎麼辦?在你需要push
的分支之前又有別的不需要的commit
。這時就可以先用git rebase
交換commit
的順序,然後推送單個提交。如果你寫了冒號但是不寫commit
號,就會變成刪除某個遠端分支。這是完全不同的而且可能有危險操作,需要注意。git blame <PATH> [-L <M,N>]
逐行檢查某文件的提交人、提交時間和commit
號。blame
的中文意思是職責,大家顧名思義,撕逼甩鍋時用。-L
可以指定要檢查的行號。git stash [push] [-u]
貯存當前工作區的更改。經常有這樣的事情發生,當你正在進行項目中某一部分的工作,裡面的東西處於一個比較雜亂的狀態,而你想轉到其他分支上進行一些工作。問題是你還不想提交這些代碼,這是就可以用git stash
命令將未提交的更改臨時保存到一個貯存項中。-u
表示將未加入版本管理的文件也保存(比如新建的一些文件)git stash apply <INDEX>
、git stash pop <INDEX>
將最後一次保存的(或指定的某個)貯存項應用至當前工作區。與前面的git stash [push]
配套使用。apply
與pop
的區別是:pop
會在應用更改的同時把所應用的貯存項刪除,而apply
不會。git cherry-pick -x <COMMIT>..
摘取
某些提交。即把另一個本地分支的commit
應用到當前分支。如果我們同時維護多個分支,這個操作就很有用。比如說你在主幹 master 分支上修復了一個 bug,然後你想把這個修復應用到一個舊版本的分支上,但是你又不想把其他 master 分支的新功能拉進來,這時就可以用cherry-pick
。-x
:在提交記錄中添加一行(cherry picked from commit <commit>)
,讓兩個提交關聯起來。git revert <COMMIT>
回滾某個提交。即提交某個COMMIT
的反提交。最快修復某個 bug 的方式就是把引入 bug 的代碼幹掉。注意幹掉代碼不代表就要用git rebase -i
把提交本身也幹掉。git grep <PATTERN>
在當前加入版本管理的文件中全文檢索某字元串。類似於grep
操作,但是會忽略不需要的(加入.gitignore
的)文件,非常實用的命令。git bisect
實用二分查找的方式定位引入問題的提交。快速定位 bug 的方式。在找不到 bug 出現的原因時,不妨用git bisect
將 bug 先鎖定到某個commit
上。
brew install tig
美化 git 輸出,重度終端用戶的福利。這個其實是工具安利了,它用圖形化的方式(ncurses)美化 git 輸出,誰用誰知道
※資料庫分庫分表中間件 Sharding-JDBC 源碼分析 —— SQL 解析(四)之插入SQL
※如何通過binlog獲取我們想要的MySql語句?
※js數組去重方法分析與總結
※JS獲取子、父、兄節點方法總結
※vue學習筆記(1)——組件化實現todoList
TAG:科技優家 |
※出行靈感 Places to visit in 2018
※啟用Windows 7/2008 R2 XPS Viewer
※VR虛擬現實2017中國好應用AppBase Best 50強,Testin雲測年度發布
※一件衣服用的布料比巴黎鐵塔還高!Giambattista Valli 2018
※《Gastroenterology Report》2018年第1期中文摘要
※愛彼(Audemars Piguet)2017年銷售額逼近10億瑞郎
※Google I/O 2018 大會 5/8 揭幕,下一代系統命名為 Android P?
※2017中國好應用,Testin IoT工業AppBase Best 50強報告
※White Mountaineering 2018 秋冬系列
※Y-3 2018 秋冬系列鞋款帥炸?這雙 Futurecraft 4D 才是重點!
※2017 年關於 Python 的 12 件大事
※這是被微軟在2013年取消開發的智能手錶Xbox Watch
※Linux發行版KaOS 2018.01發布,修復Spectre和Meltdown漏洞
※行業先驅Materialise談2018年3D列印行業的5大趨勢
※2018 Collection 哪件會成為你的嫁衣呢?
※Carnegie Museum of Art 2018 主題展覽
※Android 9.0要來了!Google I/O 2018大會確定5月8日舉行
※soo hyun ★【180120圖片】金秀賢modetour更圖1p
※2017慈緣雅集之問禪集錦Some questions about Zen of CiYuan 2017
※seiko手錶 2018,你好!