Git 是一款開源優(yōu)秀的版本管理工具,它最初由 Linus Torvalds 等人開發(fā)耳胎,用于管理 Linux Kernel 的版本研發(fā)盒刚。相關(guān)的書籍和教程網(wǎng)上琳瑯滿目,它們多數(shù)都詳細(xì)的介紹其基本的使用和命令倒庵。本人根據(jù)自己的經(jīng)驗(yàn)褒墨,整理出幾個(gè)較為高級(jí)而常用的命令。
推薦資料 Git Book
Git blame
Git blame 可以查詢每一行代碼的 commit ID擎宝、提交者和提交日期郁妈。
git blame nova/api/openstack/compute/servers.py
git blame 命令后面需要跟上查詢的文件全路徑
Git show
確切的說,Git show 并非是一個(gè)高級(jí)命令绍申,只是它經(jīng)常配合 git blame噩咪,從而查詢整個(gè) patch顾彰。
$ git show 5b866f3a
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index 5def03f..e96c42a 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -334,6 +334,21 @@ def get_networks_for_instance(context, instance):
return networks
+class MetadataDeserializer(wsgi.MetadataXMLDeserializer):
+ def deserialize(self, text):
+ dom = minidom.parseString(text)
+ metadata_node = self.find_first_child_named(dom, "metadata")
+ metadata = self.extract_metadata(metadata_node)
Git reflog
Git reflog 記錄了 git 某個(gè)分支的每次操作,通常用來恢復(fù)誤操作影響的數(shù)據(jù)胃碾。
$ git reflog
1dcfb0f HEAD@{0}: reset: moving to 1dcfb0f
d5640a9 HEAD@{1}: checkout: moving from test to master
1dcfb0f HEAD@{2}: checkout: moving from icehouse to test
$ git reset d5640a9
Git cherry-pick
Git cherry-pick 可從其它分支抓取 commit 合入當(dāng)前分支中涨享,常用于從 upstream 合入 patch。意思就是獲取某一個(gè)分支的單筆提交书在,并作為一個(gè)新的提交引入到你當(dāng)前分支上,
當(dāng)我們需要在本地合入其他分支的提交時(shí)灰伟,如果我們不想對(duì)整個(gè)分支進(jìn)行合并,而是只想將某一次提交合入到本地當(dāng)前分支上儒旬,那么就要使用git cherry-pick了栏账。
$ git cherry-pick -x commit_id
Git rebase
Git rebase 無疑是最為復(fù)雜、最難以理解栈源,當(dāng)然也是非常強(qiáng)大的命令挡爵,常用于合并分支,可以簡單的理解為一系列的 git cherry-pick甚垦,它具有以下功能茶鹃。
合并分支
重新修改 Commit,如合并 commit艰亮,調(diào)整 commit 的順序闭翩。
Git rebase 用法請(qǐng)見 Git Book,但是使用時(shí)迄埃,請(qǐng)注意以下準(zhǔn)則:
The golden rule of git rebase is to never use it on public branches.
不能將git rebase 用于已經(jīng)發(fā)布到遠(yuǎn)程的公共分支疗韵!
git branch | grep 'feat' | xargs git branch -d
刪除所有的feat開頭的分支
在日常的開發(fā),組合命令的使用帶來事半功倍的效果侄非,大規(guī)模項(xiàng)目的開發(fā)中蕉汪,經(jīng)常會(huì)有很多臨時(shí)特性分支,在迭代結(jié)束之后通常需要?jiǎng)h除逞怨,就可以使用上面的命令進(jìn)行刪除
- git branch 獲取到所有的分支
- grep feat 查詢feat關(guān)鍵的分支
- xargs 將查詢分支作為參數(shù)輸出給git branch -d