Git 是一款開源優秀的版本管理工具,它最初由 Linus Torvalds 等人開發,用於管理 Linux Kernel 的版本研發。相關的書籍和教程網上琳琅滿目,它們多數都詳細的介紹其基本的使用和命令。本人根據本身的經驗,整理出幾個較爲高級而經常使用的命令。node
推薦資料 Git Bookgit
Git blame 能夠查詢每一行代碼的 commit ID、提交者和提交日期。api
git blame nova/api/openstack/compute/servers.py
bash
git blame 命令後面須要跟上查詢的文件全路徑dom
確切的說,Git show 並不是是一個高級命令,只是它常常配合 git blame,從而查詢整個 patch。工具
$ git show 5b866f3a
ui
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 某個分支的每次操做,一般用來恢復誤操做影響的數據。spa
$ 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 可從其它分支抓取 commit 合入當前分支中,經常使用於從 upstream 合入 patch。意思就是獲取某一個分支的單筆提交,並做爲一個新的提交引入到你當前分支上, 當咱們須要在本地合入其餘分支的提交時,若是咱們不想對整個分支進行合併,而是隻想將某一次提交合入到本地當前分支上,那麼就要使用git cherry-pick了。code
$ git cherry-pick -x commit_id
server
Git rebase 無疑是最爲複雜、最難以理解,固然也是很是強大的命令,經常使用於合併分支,能夠簡單的理解爲一系列的 git cherry-pick,它具備如下功能。
合併分支 從新修改 Commit,如合併 commit,調整 commit 的順序。 Git rebase 用法請見 Git Book,可是使用時,請注意如下準則:
The golden rule of git rebase is to never use it on public branches. 不能將git rebase 用於已經發布到遠程的公共分支!
刪除全部的feat開頭的分支 在平常的開發,組合命令的使用帶來事半功倍的效果,大規模項目的開發中,常常會有不少臨時特性分支,在迭代結束以後一般須要刪除,就可使用上面的命令進行刪除