關(guān)于 Git 和 Github 你不知道的十件事
Git 和 GitHub都是非常強(qiáng)大的工具。即使你已經(jīng)使用他們很長(zhǎng)時(shí)間,你也很有可能不知道每個(gè)細(xì)節(jié)。我整理了Git和GitHub可能提高日常效率的10個(gè)常用技巧。
GitHub
快捷鍵: t 和 w
在你的源碼瀏覽頁(yè)面,按t
可以快速進(jìn)入模糊文件名搜索模式:
在你倉(cāng)庫(kù)主頁(yè),按w
可以快速進(jìn)行分支過(guò)濾:
在任意GitHub頁(yè)面中,按?
展示當(dāng)前頁(yè)面可用的快捷鍵:
忽略空格: ?w=1
在任意的diff URL添加?w=1用來(lái)整理縮進(jìn):
按范圍過(guò)濾提交記錄: master@{time}..master
你可以創(chuàng)建一個(gè)對(duì)比頁(yè)面通過(guò)使用URL github.com/user/repo/compare/{range}
。范圍(range)可以是兩個(gè)SHA例如sha1…sha2
或者兩個(gè)分支名稱例如master…my-branch
。范圍同時(shí)也非常智能的支持使用時(shí)間作為關(guān)注點(diǎn)。你可以通過(guò)master@{1.day.ago}…master
過(guò)濾從昨天開始的提交。例如:鏈接,https://github.com/rails/rails/compare/master@{1.day.ago}…master
顯示Rails項(xiàng)目中全部昨天開始的提交記錄和變化:
按作者過(guò)濾提交記錄: ?author=github_handle
你可以通過(guò)在對(duì)比頁(yè)面URL中增加?author=github_handle
來(lái)按作者過(guò)濾提交記錄。例如:鏈接https://github.com/dynjs/dynjs/commits/master?author=jingweno
顯示jingweno對(duì)Dynjs 的提交記錄:
.diff 和 .patch
在比較頁(yè)面、合并請(qǐng)求頁(yè)面或者評(píng)論頁(yè)面的URL后增加.diff
或者.patch
,可以得到diff或者patch的文本格式。例如:鏈接https://github.com/rails/rails/compare/master@{1.day.ago}…master.patch
顯示Rails項(xiàng)目中全部昨天開始的提交記錄和變化的文本格式:
郵件回復(fù)
你可以直接在收到的GitHub通知郵件進(jìn)行評(píng)論,不必在網(wǎng)站頁(yè)面中評(píng)論。GitHub會(huì)正確的處理你的評(píng)論:
鏈接行
在文件展示頁(yè)面,點(diǎn)擊某行或者通過(guò)按SHIFT
選擇多行,URL會(huì)有相應(yīng)的改變。如果你要給你的隊(duì)友分享一段代碼是非常方便的:
關(guān)注用戶
在合并請(qǐng)求、問(wèn)題或者任何評(píng)論中中提到用戶會(huì)使用戶關(guān)注全部的后續(xù)通知:
自動(dòng)鏈接
在合并請(qǐng)求、問(wèn)題、或者任何評(píng)論中,sha和問(wèn)題碼(例如:#1)會(huì)被自動(dòng)鏈接。并且,你也可以鏈接其它倉(cāng)庫(kù)的sha或者問(wèn)題碼,格式:user/repo@sha1
或者user/repo#1
。下面是一個(gè)評(píng)論中通過(guò)sha自動(dòng)鏈接的例子:
hub
Hub 是 GitHub的命令行。它提供了Git和Github之間的集成。一個(gè)最有用的命令就是在命令行輸入hub pull-request
創(chuàng)建pull request。詳見readme.
Git
git log -p FILE
查看README.md
的修改歷史,例如:
> git log -p README.md
git log -S’PATTERN’
例如,搜索修改符合stupid
的歷史:
> git log -S'stupid'
git add -p
交互式的保存和取消保存變化,使用:
> git add -p
git rm –cached FILE
這個(gè)命令只刪除遠(yuǎn)程文件,例如:
> git rm --cached database.yml
刪除database.yml
被保存的記錄,但是不影響本地文件。這對(duì)刪除已經(jīng)推送過(guò)的忽略文件記錄而且不影響本地文件是非常的方便的。
git log ..BRANCH
這個(gè)命令返回某個(gè)非HEAD分支的提交記錄。假如你在一個(gè)功能分支,輸入:
> git log ..master
返回全部master分支的歷史記錄,包括未被合并到當(dāng)前分支的提交記錄。
git branch –merged & git branch –no-merged
這個(gè)命令返回已合并分支列表或未合并的分支列表。這個(gè)命令對(duì)合并前檢查非常有用。例如,在一個(gè)功能分支,輸入
> git branch --no-merged
返回未合并到該分支的分支列表。
git branch –contains SHA
返回包含某個(gè)指定sha的分支列表。例如:
> git branch --contains 2f8e2b
顯示全部包含提交2f832b
的分支。這個(gè)命令對(duì)于驗(yàn)證git cherry-pick
完成非常有幫助。
git status -s
返回一個(gè)簡(jiǎn)單版的git status。我設(shè)置這個(gè)命令為默認(rèn)git status來(lái)減少噪音。
git reflog
顯示你在本地已完成的操作列表。
git shortlog -sn
顯示提交記錄的參與者列表。和GitHub的參與者列表相同。
Summary
Git是一個(gè)設(shè)計(jì)良好的工具。了解它可以直接讓你更有效率并成為一個(gè)更有才華的程序員。GitHub,在另一個(gè)方面,在Git基礎(chǔ)上提供便利的團(tuán)隊(duì)合作特性。有能力使用GitHub也會(huì)提高你日常效率。
為了更好的加深你對(duì)的Git和Github了解,我推薦一些資料:
-
ProGit, ***的Git指南