日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

25個(gè) Git 進(jìn)階技巧

 gljin_cn 2015-05-13

日志以及有哪些改動(dòng)?

13. 查看日志

長(zhǎng)時(shí)間使用 Git 的話(huà),不會(huì)沒(méi)用過(guò)‘git log’來(lái)查看最近的提交。不過(guò),有一些技巧來(lái)更好地應(yīng)用。比如,你可以使用下面的命令來(lái)查看每次提交的具體改動(dòng):

  1. $ git log -p

或者你可以?xún)H僅查看有哪些文件改動(dòng):

  1. $ git log --stat

有個(gè)很不錯(cuò)的別名你可以試試,會(huì)顯示簡(jiǎn)短提交名和一個(gè)不錯(cuò)的分支圖并在一行里顯示提交信息(有點(diǎn)像gitk,但是是在命令行下):

  1. $ git config --global alias.lol "log --pretty=oneline --abbrev-commit --graph --decorate"
  2. $ git lol
  3. * 4d2409a (master) Oops, meant that to be in Korean
  4. * 169b845 Hello world

14. 搜索日志

如果你想找特定提交者可以這樣做:

  1. $ git log --author=Andy

更新:感謝Johannes的評(píng)論,我已經(jīng)去掉了之前這里的一些有混淆的地方。

或者你想在提交信息里找一些相關(guān)字段:

  1. $ git log --grep="Something in the message"

也有一個(gè)更強(qiáng)大的叫做pickaxe的命令用來(lái)查找包含了刪除或添加的某個(gè)特定內(nèi)容的提交(比如,該內(nèi)容第一次出現(xiàn)或被刪除)。這可以告訴你什么時(shí)候增加了一行(但這一行里的某個(gè)字符后面被改動(dòng)過(guò)就不行了):

  1. $ git log -S "TODO: Check for admin status"

假如你改動(dòng)了一個(gè)特定的文件,比如lib/foo.rb

  1. $ git log lib/foo.rb

比如說(shuō)你有一個(gè)feature/132分支和feature/145分支,然后你想看看這兩個(gè)分支上不在master分支里的提交(注意符號(hào)是不在的意思):

  1. $ git log feature/132 feature/145 ^master

你也可以使用ActiveSupport格式的日期來(lái)縮小到某個(gè)日期范圍:

  1. $ git log --since=2.months.ago --until=1.day.ago

默認(rèn)情況下會(huì)用OR來(lái)組合查詢(xún),但你可以輕易地改為AND(如果你有超過(guò)一條的查詢(xún)標(biāo)準(zhǔn))

  1. $ git log --since=2.months.ago --until=1.day.ago --author=andy -S "something" --all-match

15. 查看/修改版本

有很多方式可以用來(lái)引用一個(gè)版本,看你記得哪個(gè):

  1. $ git show 12a86bc38 # 根據(jù)版本
  2. $ git show v1.0.1 # 根據(jù)標(biāo)簽
  3. $ git show feature132 # 根據(jù)分支名
  4. $ git show 12a86bc38^ # 一次提交的父節(jié)點(diǎn)
  5. $ git show 12a86bc38~2 # 一次提交的祖父節(jié)點(diǎn)
  6. $ git show feature132@{yesterday} # 時(shí)間相關(guān)
  7. $ git show feature132@{2.hours.ago} # 時(shí)間相關(guān)

注意和之前部分有些不同,末尾的的意思是該提交的父節(jié)點(diǎn) - 開(kāi)始位置的的意思是不在這個(gè)分支。

16. 選擇范圍

最簡(jiǎn)單的方式:

  1. $ git log origin/master..new
  2. # [old]..[new] - 所有你還沒(méi)有推送的提交

你也可以省略[new],將使用當(dāng)前的HEAD。

時(shí)光回溯和后悔藥

17. 重置改動(dòng)

如果你還沒(méi)有提交的話(huà)可以用下面的命令輕松地取消改動(dòng):

  1. $ git reset HEAD lib/foo.rb

通常會(huì)使用‘unstage’的別名,因?yàn)樯厦娴目瓷先ビ行┎恢庇^。

  1. $ git config --global alias.unstage "reset HEAD"
  2. $ git unstage lib/foo.rb

如果你已經(jīng)提交了該文件,你可以做兩件事 - 如果是最后一次提交你還可以改正:

  1. $ git commit --amend

這會(huì)取消最后一次提交,把工作分支回退到提交前標(biāo)記了所有改動(dòng)的狀態(tài),而且提交信息也都準(zhǔn)備好可以修改或直接提交。

如果你已經(jīng)提交過(guò)多次而且希望全部回退,你可以將分支重置到合適的位置。

  1. $ git checkout feature132
  2. $ git reset --hard HEAD~2

如果你實(shí)際上希望將分支指向一個(gè)完全不同的SHA1(也許你要將一個(gè)分支的HEAD替換到另一個(gè)分支,或者之后的某次提交)你可以使用下面的較長(zhǎng)的方式:

  1. $ git checkout FOO
  2. $ git reset --hard SHA

實(shí)際上有一個(gè)快速的方式(不需要先把你的工作分支切換到FOO再前進(jìn)到SHA):

  1. $ git update-ref refs/heads/FOO SHA

18. 提交到了錯(cuò)誤的分支

好吧,假如說(shuō)你已經(jīng)提交到了master,但卻應(yīng)該創(chuàng)建一個(gè)叫experimental的主題分支更合適。要移動(dòng)這些改動(dòng),你可以在當(dāng)前位置創(chuàng)建分支,回退HEAD再檢出新分支:

  1. $ git branch experimental # 創(chuàng)建一個(gè)指向當(dāng)前master的位置的指針
  2. $ git reset --hard master~3 # 移動(dòng)master分支的指針到3個(gè)版本之前
  3. $ git checkout experimental

如果你的改動(dòng)是在分支的分支的分支上會(huì)更復(fù)雜。那樣你需要做的是將分支基礎(chǔ)切換到其他地方:

  1. $ git branch newtopic STARTPOINT
  2. $ git rebase oldtopic --onto newtopic

19. 交互式切換基礎(chǔ)

這是一個(gè)我之前看過(guò)展示卻沒(méi)真正理解過(guò)的很贊的功能,現(xiàn)在覺(jué)得它就很簡(jiǎn)單了。假如說(shuō)你提交了3次但是你希望更改順序或編輯(或者合并):

  1. $ git rebase -i master~3

然后這會(huì)啟動(dòng)你的編輯器并帶有一些指令。你所要做的就是修改這些指令來(lái)選擇/插入/編輯(或者刪除)提交和保存/退出。然后在編輯完后你可以用git rebase --continue命令來(lái)讓每一條指令生效。

如果你有修改,將會(huì)切換到你提交時(shí)所處的狀態(tài),之后你需要使用命令git commit --amend來(lái)編輯。

注意:在rebase的時(shí)候千萬(wàn)不要提交 - 只能先添加然后使用參數(shù)--continue,--skip或--abort。

20. 清理

如果你提交了一些內(nèi)容到你的分支(也許你從SVN導(dǎo)入了一些舊倉(cāng)庫(kù)),然后你希望把某個(gè)文件從歷史記錄中全部刪掉:

  1. $ git filter-branch --tree-filter 'rm -f *.class' HEAD

如果你已經(jīng)推送到origin了,但之后提交了一些垃圾改動(dòng),你也可以在推送前在本地系統(tǒng)里這樣做:

  1. $ git filter-branch --tree-filter 'rm -f *.class' origin/master..HEAD

其他技巧

21. 你查看過(guò)的前一個(gè)引用

如果你知道自己之前查看過(guò)一個(gè)SHA-1,但是隨后做了一些重置/回退的操作,你可以使用reflog命令來(lái)列出最近查看過(guò)的SHA-1記錄:

  1. $ git reflog
  2. $ git log -g # 和上面一樣,但是使用'log'格式輸出

22. 分支命名

一個(gè)可愛(ài)的小技巧 - 別忘了分支名并不限于a-z和0-9。名字中可以用/和.將非常方便用來(lái)建立偽命名空間或版本,例如:

  1. $ # 生成版本132的改動(dòng)歷史
  2. $ git shortlog release/132 ^release/131
  3. $ # 貼上v1.0.1的標(biāo)簽
  4. $ git tag v1.0.1 release/132

23. 找出誰(shuí)是兇手

通常找出來(lái)誰(shuí)改動(dòng)了某個(gè)文件里的某行代碼會(huì)很有用。實(shí)現(xiàn)這個(gè)功能的最簡(jiǎn)單命令是:

  1. $ git blame FILE

有時(shí)候這些改動(dòng)來(lái)自其他文件(如果你合并了兩個(gè)文件,或者你移動(dòng)了某個(gè)函數(shù))所以你可以使用下面的命令:

  1. $ # 顯示內(nèi)容來(lái)自哪個(gè)文件
  2. $ git blame -C FILE

有時(shí)候通過(guò)點(diǎn)擊各個(gè)改動(dòng)然后回到很早很早以前來(lái)跟蹤改動(dòng)會(huì)很不錯(cuò)。有一個(gè)很好的內(nèi)建GUI命令來(lái)做這個(gè):

  1. $ git gui blame FILE

24. 數(shù)據(jù)維護(hù)

通常git不需要經(jīng)常維護(hù),它把自己照顧的很好。不過(guò),你可以通過(guò)下面的命令查看數(shù)據(jù)統(tǒng)計(jì):

  1. $ git count-objects -v

如果占用很多空間的話(huà),你可以選擇在你的本地倉(cāng)庫(kù)做垃圾回收。這不會(huì)影響推送或其他人,卻會(huì)讓一些命令運(yùn)行更快而且減少空間占用:

  1. $ git gc

經(jīng)常運(yùn)行完整性檢查也很有意義:

  1. $ git fsck --full

你也可以在末尾加上--auto參數(shù)(如果你在服務(wù)器上通過(guò)crontab經(jīng)常/每天都運(yùn)行這個(gè)命令的話(huà)),然后它只會(huì)在必要的時(shí)候才執(zhí)行fsck動(dòng)作。

在檢查的時(shí)候,看到“dangling”或“unreachable”是正常的,通常這是由回退HEAD或切換基礎(chǔ)的結(jié)果。而看到“missing”或“sha1 mismatch”就不對(duì)了...找專(zhuān)業(yè)人士幫忙吧!

25. 恢復(fù)遺失的分支

如果你使用-D參數(shù)刪除了experimental分支,可以用下面的命令重新建立:

  1. $ git branch experimental SHA1_OF_HASH

如果你最近訪問(wèn)過(guò)的話(huà),你通常可以用git reflog來(lái)找到SHA1哈希值。

另一種方式是使用git fsck —lost-found。其中一個(gè)dangling的提交就是丟失的HEAD(它只是已刪除分支的HEAD,而HEAD被引用為當(dāng)前的HEAD所以它并不處于dangling狀態(tài))

搞定!

哇,這是我寫(xiě)過(guò)的最長(zhǎng)的一篇博客,我希望有人能覺(jué)得有用。如果你這么覺(jué)得,或者你有任何疑問(wèn)請(qǐng)?jiān)谠u(píng)論里留言讓我知道...

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多