git log 過濾

git log命令主要用于查看Git版本演變歷史(也就是提交歷史),同時根據追加的參數和選項不同,也會有不同的展示效果。

git log命令說明

git log官方文檔說明

git log用于查詢版本的歷史,命令形式如下:

git log [<options>] [<since>..<until>] [[--] <path>...]

列出可以從給定的提交中通過 "父 “鏈接到達的提交,但不包括可以從前面有”^"的提交中到達的提交。 默認情況下,輸出結果是按時間順序倒置的。

你可以把它看成是一個集合操作。從命令行上給出的任何一個提交中可以到達的提交形成一個集合,然后從這個集合中減去任何一個前面帶有'^'的提交。 剩下的提交內容就是命令的輸出結果。 其他各種選項和路徑參數也可以用來進一步限制結果。

不帶參數

  • 如果不帶任何參數,它會列出所有歷史記錄,最近的排在最上方,顯示提交對象的哈希值,作者、提交日期、和提交說明
  • 如果記錄過多,則按上下鍵,Enter(向下顯示一行),空格(顯示下一頁),來控制顯示。
  • q鍵退出歷史記錄列表。

按照數量過濾

使用git log命令時最基本的過濾方式就是按照可以顯示的日志條數進行過濾。如果你只對最近幾次提交感興趣,這會節省在頁面上查看所有提交的麻煩。

git log -3

按照日期過濾
如果你想查找特定時間段的提交歷史,可以使用--after或者--before選項來通過日期過濾顯示內容。這兩個選項的值都可以接收不同形式的日期格式。比如下面的命令只顯示2014年7月1日以及之后的提交歷史信息。

git log --after="2018-7-1"

也可以傳遞相對時間比如"1 week ago"表示一周前或者"yesterday"表示昨天:

 git log --after="yesterday"

如果想尋找時間區間內的提交歷史,可以同時使用--before--after選項。比如為了顯示2018年7月1日到2018年7月4日之間提交可以向下面這樣執行命令:

git log --after="2018-7-1" --before="2018-7-4"

此外需了解的是,git log命令中還可以使用--since--until選項,他們分別是--after--before的同義詞。

按作者和提交者過濾

如果想查找某個特定作者的提交歷史,可以使用--author選項。該選項接受一個正則表達式,并且返回所有作者字段符合正則表達式的提交記錄。當然如果你知道作者確切的名稱,也可以直接傳入一個普通字符串而無需使用正則表達式:

git log --author="John"

這條命令會顯示所有由John提交的記錄。作者名稱并不是必須完全一致,檢索時會匹配包含給定參數的提交記錄。

你也可以通過使用正則表達式來構建更加復雜的搜索方式。比如下面的例子就會去搜索Mary或者John提交的記錄。

git log --author="John|Mary"

請注意在作者字段中也包含提交者的email值,所以你也可以使用此選項來搜索特定email地址。

如果你的工作流程區分提交人和作者,那么--committer選項操作也類似。

按照提交信息過濾

如果想按照提交信息過濾提交記錄,可以使用--grep選項。它的工作方式與--author選項一致,只不過搜索的目標是提交信息而不是作者信息,僅顯示提交說明中包含指定字符串的提交。

比如說你的團隊規定提交信息中要包含對應的issue信息,那么就可以使用類似下面的命令來根據issue信息查找特定提交:

git log --grep="JRA-224:"

在使用時可以考慮傳遞-i選項讓git log查找提交記錄時忽略大小寫。
注意:如果想同時使用--grep--author,必須在附加一個--all-match參數。

按照文件過濾

很多時候,你可能只關心含有特定文件變更的提交。要想顯示所有與這個文件相關的提交記錄,那么可以將文件路徑作為參數傳遞給git log命令。比如下面的例子會返回所有與foo.pybar.py文件有關的提交記錄。

git log -- foo.py bar.py
-(空格)文件或--[后邊沒有文件]

這里的 -- 是告訴Git,后面的參數是文件路徑而不是branch分支)的名字。 如果后面的文件路徑不會和某個branch產生混淆,你可以省略 -- ,比如 git log foo.py
后邊的路徑還支持正則,比如:git log *install.md ,是指定項目路徑下的所有以install.md結尾文件的提交歷史。
文件名應該放到參數的最后位置,通常在前面加上--并用空格隔開表示是文件。

git log file/

可以查看file文件夾下所有文件的提交記錄。

按照提交內容過濾

想要按照提交的具體內容來過濾提交記錄,也是可以辦到的。比如有時候你想知道添加或者刪除某行代碼的提交,可以使用-S這樣的參數。

log log -S"<string>"
git log -G"<string>"
#僅顯示添加或刪除內容匹配指定字符串的提交。

有時你想搜索,新增或刪除某行代碼相關的commit. 可以使用這條命令。

設你想知道Hello,World!這句話,是什么時候加入到項目里去的,可以用:git log -S"Hello,World!"

如果想以正則表達式進行搜索,而不是通過字符串,那么可以修改一下上面的命令,改為傳入-G這樣的參數。

這是一個非常有用的debug工具,使用他可以定位所有跟某行代碼相關的commit,甚至可以查看某行是什么時候被copy的,什么時候移到另外一個文件中去的。
注意:-S后沒有"=",與查詢內容之間也沒有空格符。

按照提交區間過濾

你可以向git log命令傳遞一個表示提交之間的區間來篩選僅在這兩次提交之間的所有提交記錄。對于區間的表示如下所示:

git log ..
git log <since>..<until>

這個命令對于查找兩個分支之間的區別非常有用。考慮下面這個命令:

 git log main..feature

main..feature這個提交區間的表述,會給出所有已經存在于feature分支但還不存在于main分支的提交記錄。換句話說,也就是feature分支已經距離main分支有多遠了。
請注意如果你對調區間的兩端(feature..main),你會得到所有已經存在于main分支但還未存在于feature分支的提交記錄。如果git log命令在執行這兩個區間時都有返回,那么也就意味著你的提交歷史已經分叉了
如果是三個點,表示或的意思:git log master...test,意思是查詢mastertest分支中的提交記錄。
官網說明
<提交 1>…?<提交 2>,對合并很有用。 由此產生的提交集合是兩個操作數之間的對稱差。 以下兩個命令是等價的:

$ git log A B --not $(git merge-base --all A B)
$ git log A...B

過濾合并提交

git log命令默認會含有合并提交。但是如果你的團隊策略是“總是使用合并”(比如說總是在功能分支使用merge來整合上游分支的新變更,而不是將功能分支rebase到上游分支上),那么項目提交歷史中會有大量冗余的合并提交節點。

通過傳入--no-merges選項,可以讓git log命令的輸出過濾掉那些合并提交:

git log --no-merges

另外一方面,如果你只對合并提交感興趣,也可以使用--merge選項

git log --merges

這會輸出所有含有兩個及以上分支的提交記錄。

按標簽tag

git log --tages=v1.0

直接這樣是查詢標簽之前的commit。
加兩個點,例如:git log --tages=v1.0..,是查詢從v1.0以后的提交歷史記錄(不包含v1.0)。

按分支

git log  --

--branchName branchName參數:為任意一個分支名字,查看某個分支上的提交記錄。

需要放到參數中的最后位置處。

如果分支名與文件名相同,系統會提示錯誤,可通過–選項,來指定給定的參數,是分支名還是文件名。

比如:在當前分支中有一個名為v1的文件,同時還存在一個名為v1的分支。如下:

git log v1 -- #此時的v1代表的是分支名字(--后邊是空的)。git log -- v1 #此時的v1代表的是名為v1的文件。git log v1 -- v1 #代表v1分支下的v1文件。

按commit

git log commit #查詢commit之前的記錄,包含commit。
git log commit1 commit2 #查詢commit1與commit2之間的記錄,包括commit1和commit2。
git log commit1..commit2 # 同上,但是不包括commit1。

說明:

  1. 其中,commit可以是提交哈希值的簡寫模式,也可以使用HEAD代替。
  2. HEAD代表最后一次提交,HEAD^為最后一個提交的父提交,等同于HEAD~1
  3. HEAD~2代表倒數第二次提交。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37066.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式linux系統中面試過程經驗分享

大家好,今天主要給分享一下,如何在面試中介紹自己的項目經驗,希望對大家有所幫助。 在面試時,經過寒暄后,一般面試官會讓介紹項目經驗。常見的問法是,說下你最近的(或最拿得出手的)一個項目。 根據我們的面試經驗,發現有不少候選人對此沒準備,說起來磕磕巴巴,甚…

vscode在windows系統上進行C/C++環境配置

隨手筆記前言 vscode在windows系統上進行C/C環境配置 步驟如下 第一步 下載安裝VSCode 這應該是最簡單的一步&#xff0c;相信大家自己就可以完成。如果在vscode官網感覺下載特別慢的話&#xff0c;可以去試一下騰訊軟件中心&#xff0c;我都是在這個網頁上下載的。下載好之…

26、 MySQL數據庫基礎練習系列股票交易系統基礎查詢和復雜查詢

5、基礎查詢 -- 1、查詢用戶信息僅顯示姓名與手機號 SELECT username as 姓名,phone as 手機號 from users;-- 2、模糊查詢和explain語句 alter table stocks add index stock_name_index(stock_name); explain SELECT * from stocks where stock_name like %東吳證券%; -- 3、…

【AIGC X UML 落地】從UML語句到UML圖形的生成,來看Agent插件的制作

上篇我們講到如何通過多智能體實現自然語言繪制UML圖。 沒有看過的,可以去看下原文:《【AIGC X UML 落地】通過多智能體實現自然語言繪制UML圖》 其中有一個實現重點,就是如何將 PlantUML 語句生成 UML 圖片。在這里筆者是通過自定義 Agent 插件來實現這一流程。 本文,就此…

面試-javaIO機制

1.BIO BIO&#xff1a;是傳統的javaIO以及部分java.net下部分接口和類。例如&#xff0c;socket,http等&#xff0c;因為網絡通信同樣是IO行為。傳統IO基于字節流和字符流進行操作。提供了我們最熟悉的IO功能&#xff0c;譬如基于字節流的InputStream 和OutputStream.基于字符流…

Vue 項目運行時,報錯Error: Cannot find module ‘node:path‘

Vue 項目運行時&#xff0c;報錯Error: Cannot find module ‘node:path’ internal/modules/cjs/loader.js:883throw err;^Error: Cannot find module node:path Require stack: - D:\nodejs\node_modules\npm\node_modules\node_modules\npm\lib\cli.js - D:\nodejs\node_mo…

問題解決:python安裝依賴時網絡問題報錯

進行 pip install 時&#xff0c;安裝輪子訪問過慢而造成安裝失敗&#xff0c;有時候配置鏡像源仍會出現莫名其妙的問題&#xff0c;包括網絡代理問題等。看了一些解決方案&#xff0c;找出了一個最適合的方式&#xff0c;如下所示&#xff1a; pip install -i https://pypi.t…

linux 離線安裝docker

測試服務器&#xff1a;銀河麒麟V10 x86_64 注意&#xff1a;推薦使用國內的鏡像站下載&#xff0c;因為官網不掛梯子無法訪問&#xff0c;我用的是清華大學開源軟件鏡像站 一、下載離線包&#xff1a; 官網下載docker離線包 下載地址&#xff1a;https://download.docker.c…

使用VisualStudio2022制作安裝包

總體介紹 解決方案里面需要有三個項目: Winform程序, Setup Project , 自定義配置項目(安裝程序類) 1, Winform程序 就是你要打包的程序 2, Setup Project 就是制作安裝包的 3, 自定義配置項目(安裝程序類): 一個命令行項目里面只有一個安裝程序類,用來控制安裝后自動打開程序…

Windows USB設備驅動開發 - 常見概念的解釋

我們聽到許多 USB 術語幾乎交替拋出。 它們都是什么意思&#xff1f;假設我們看到類似 “多虧了 USB 3.0&#xff0c;我可以將 SuperSpeed U 盤連接到電腦的 xHCI 主機控制器&#xff0c;并更快地復制文件。” 讓我們了解該句子中的 USB 術語。 USB 3.0、USB 2.0 和 USB 1.0 請…

Winform 樹形控件的開發實戰

在Windows Forms&#xff08;WinForms&#xff09;開發中&#xff0c;樹形控件(TreeView)是非常常用的一種控件&#xff0c;用于展示層級結構的數據&#xff0c;如文件系統、組織結構、菜單等。下面&#xff0c;我將通過一個實戰示例&#xff0c;向你展示如何在WinForms中開發和…

計網實訓——不相同網段的PC相互通信

目錄 提前準備APP路由器指令 實驗一1、實驗需求&#xff08;1&#xff09;實現同網段的PC相互通信。&#xff08;2&#xff09;實現不相同網段的PC相互通信。&#xff08;3&#xff09;分析相同和不同網段PC通信時MAC地址的變化。 2、實驗拓撲3、實驗步驟及實驗截圖&#xff08…

rk3588 debian系統配置AP6275S ap模式

rk3588 debian配置AP6275S ap模式 文章目錄 rk3588 debian配置AP6275S ap模式前言一、內置開啟ap模式的系統工具1.1、內置hostapd工具1.2、內置dhcp工具二、熱點配置2.1、 /etc/hostapd/hostapd.conf 配置2.2、/etc/dhcp/dhcpd.conf 配置三、測試3.1、運行dhcpd3.2、運行hostap…

[數據結構】——七種常見排序

文章目錄 前言 一.冒泡排序二.選擇排序三.插入排序四.希爾排序五.堆排序六.快速排序hoare挖坑法前后指針快排遞歸實現&#xff1a;快排非遞歸實現&#xff1a; 七、歸并排序歸并遞歸實現&#xff1a;歸并非遞歸實現&#xff1a; 八、各個排序的對比圖 前言 排序&#xff1a;所謂…

uni-app 微信小程序開發到發布流程

1. uni-app 微信小程序開發到發布流程 1.1. 新建一個uni-app 項目 1.2. 發行微信小程序 1.3. 微信開發者平臺的微信小程序appid 復制進來&#xff08;點擊發行&#xff09; 1.4. IDE may already started at port xxxx, trying to connect &#xff08;1&#xff09;關閉微信…

小白上手AIGC-基于FC部署stable-diffusion

AIGC AIGC&#xff08;人工智能創造內容&#xff09;作為一種基于人工智能技術生成內容的新型創作模式。打破了過去大家對于AI的理解都是說只能涉足部分領域而無法涉足藝術或者是其他的創作領域的定律&#xff0c;現在的AIGC也能夠創作內容了&#xff0c;而不再只是單純的返回…

動手學深度學習(Pytorch版)代碼實踐 -計算機視覺-45多尺度目標檢測

45多尺度目標檢測 # 多尺度錨框 """ 減少圖像上的錨框數量并不困難。 比如&#xff0c;我們可以在輸入圖像中均勻采樣一小部分像素&#xff0c; 并以它們為中心生成錨框。 此外&#xff0c;在不同尺度下&#xff0c;我們可以生成不同數量和不同大小的錨框。 直…

Apifox 更新|定時任務、內網自部署服務器運行接口定時導入、數據庫 SSH 隧道連接

Apifox 新版本上線啦&#xff01; 看看本次版本更新主要涵蓋的重點內容&#xff0c;有沒有你所關注的功能特性&#xff1a; 自動化測試支持設置「定時任務」支持內網自部署服務器運行「定時導入」數據庫均支持通過 SSH 隧道連接自動化測試數據庫操作優化 1、自動化測試支持設…

C++ 100 之 容器插入和刪除

vector插入和刪除操作 insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count個元素ele. push_back(ele); //尾部插入元素ele pop_back();//刪除最后一個元素 erase(const_iterator start, const_iterator end);//刪除迭代器從start到end之間的元素 erase(c…

Mac(M1芯片)安裝多個jdk,Mac卸載jdk

1.jdk下載 oracle官方鏈接&#xff1a;oracle官方下載鏈接 2.安裝 直接下一步&#xff0c;下一步就行 3.查看是否安裝成功 出現下圖內容表示安裝成功。 4.配置環境變量 open -e .bash_profile 路徑建議復制過去 #刷新環境變量 source ~/.bash_profile 5.切換方法 6.jdk…