10種Git技巧,讓你省時(shí)省力又省心!
1. 從另一分支切換單個(gè)文件
大家是否曾銷(xiāo)毀文件只為能重新開(kāi)始? 或需要在另一分支的某文件中進(jìn)行更改?而git指令可以實(shí)現(xiàn)從另一分支切換文件。
- git checkout some-other-branch -- yarn.lock
同時(shí),也可以使用相同的技巧從特定提交項(xiàng)切換出某個(gè)文件。
- git checkout 9146367 -- yarn.lock
若cherry-pick能夠篩選出不需要的文件,那么這就是十分有效的技巧了。
2. 查看日志時(shí)無(wú)需合并提交
合并提交常常令人頭疼。事實(shí)上,有些人寧可不用合并指令,因?yàn)楹喜⑻峤徽媸翘憛捔恕?/p>
就個(gè)人而言,筆者認(rèn)為合并指令是項(xiàng)目歷史記錄的重要組成部分,不應(yīng)該在工作流中唯恐避之不及。
也就是說(shuō),可以使用此標(biāo)記來(lái)過(guò)濾合并提交以查看項(xiàng)目的歷史記錄。
- git log --oneline --no-merges
3. 改寫(xiě)上一個(gè)提交信息
若不小心提交了帶有拼寫(xiě)錯(cuò)誤或誤導(dǎo)性提交信息的內(nèi)容時(shí),這個(gè)方法就派上用場(chǎng)了。
- git commit -v --amend
-v是可選項(xiàng),但由于其展示了許多更改相關(guān)的信息,筆者還是比較喜歡這個(gè)的,,有助于編寫(xiě)更具描述性的提交消息。
4. 移除所有未跟蹤更改
盡管不言而喻,但以防有人對(duì)該概念不熟悉:
如果創(chuàng)建一個(gè)新的文件,且該文件在git歷史中并不存在,那么就相當(dāng)于進(jìn)行了一個(gè)未跟蹤更改。需要提交回購(gòu)協(xié)議才能開(kāi)始追蹤該文件。
如果提交過(guò)程中改變了主意,隨后又想撤銷(xiāo)先前的更改,此時(shí),git checkout可用于移除先前所有的追蹤更改,但是未跟蹤更改卻仍然會(huì)四處浮動(dòng)。為解決這個(gè)問(wèn)題, git clean應(yīng)運(yùn)而生。
- git clean -f –d
5. 輸出酷炫的可視化日志
雖然這點(diǎn)只會(huì)讓日志看起來(lái)很酷,但就可視化所有長(zhǎng)期分支而言,這點(diǎn)還是十分有用的。
- git log --pretty=oneline --graph --decorate --all
試試吧。
6. 向git請(qǐng)求一個(gè)變更日志
如果想知道更改內(nèi)容和更改者的相關(guān)簡(jiǎn)要說(shuō)明,可以向git申請(qǐng)變更日志類(lèi)似的文件。
- git shortlog <commit>..HEAD
本例中,應(yīng)將
按提交作者將短日志分組并顯示每個(gè)提交消息的首行內(nèi)容。若提交消息編寫(xiě)完善,則可很清楚地了解每個(gè)提交的實(shí)際操作。
利用一些巧妙的技巧,如git shortlog HEAD~20..,以此來(lái)獲取最近20次提交的短日志。
7. 查看特定日期范圍的日志
類(lèi)似地,可能需要查看兩天內(nèi)回購(gòu)的變化情況。
幸運(yùn)的是,git可以實(shí)現(xiàn)這點(diǎn)。git log提交接受——以-since和-until作為標(biāo)記。
所以若想知道2016年2月10日至2016年2月19日期間Solidus發(fā)生了什么,即可運(yùn)行:
- git log --since='FEB 10 2016' --until='FEB 19 2016'
現(xiàn)在,就可以看到墨菲在二月中旬非?;钴S。
8. 列出所有g(shù)it別名
有時(shí)可能需要為一些指令添加別名,隨后就忘記了,或者使用的共享配置就已經(jīng)定義了一些別名。
這是筆者無(wú)意中發(fā)現(xiàn)的一個(gè)技巧,盡管這不是git獨(dú)有的特性,但是git config指令確實(shí)發(fā)揮著它的功效,為我們所利用。
- git config -l | grep alias | sed 's/^alias\.//g'
試試吧,看是不是有忘記的別名!
9. 搜索包含關(guān)鍵字的提交
如果確切地知道要查找的是哪段代碼,或者確切地知道需要在哪些關(guān)鍵字上查找更改,則可以按代碼搜索日志。
此時(shí)git會(huì)提供一個(gè)提交列表,而該列表以某種方式影響了包含搜索字符串的代碼或文本。
- git log -S"config.menu_items"
在本例中,筆者找到一個(gè)提交列表,而該提交列表以某種方式操縱了字符串config.menu_items。
10. git教程超級(jí)機(jī)密列表
不是秘密,而是超級(jí)機(jī)密:
- git help -g
Git是一個(gè)十分強(qiáng)大的工具,充滿許多巧妙的技巧。這個(gè)列表不夠全面,所以大家可多做一些研究并閱讀git相關(guān)文檔。