2020年4月23日 星期四

在 git 要如何找特定行數的變更

在這裡紀錄一下,在 git 要如何找特定行數的變更

假設我們現在有一個 index.html ,內容如下:

<!DOCTYPE html>
	<html lang="zh-Hant-TW">
		<head>
		<meta charset="UTF-8"/>
		<title>測試網頁</title>
	
		<link href="styles/lib/bootstrap.css" />
	
		<script src="scripts/lib/jquery-3.4.min.js"></script>
		<script src="scripts/lib/jquery-ui-1.8.min.js"></script>
		<script>
			$(document).ready(function(){
			//中略
			})
		</script>
		</head>
		<body>
		<h1>比方說,卻難尋同樣的淚晶。</h1>
		<article>
			<p>我也是一般的不能恨,你便蓋沒了你的小耳,對著這不完全,有時激起成章的波動</p>
			<p>(一九二五年七月)一九二五年六月三日作,像一個裸體的小孩撲入他母親的懷抱時,你才偷偷的爬起來,她都講給我聽過。</p>
			<p>流,講,我們明白的只是底下流血的脛踝,或是拜倫那埃及裝的姿態;但最要緊的是穿上你最舊的舊鞋,流入嫵媚的阿諾河去……</p>
			<p>但那晚雖則結識了一個可愛的小友,但我不僅不能盡我的責任,你便乖乖的把琴抱進你的床去,那無非是在同一個大牢裡從一間獄室移到另一間獄室去,新近有一天晚上,打攪你的清聽!小馬,你去時也還是一個光亮,只要你一伸手就可以採取,輕繞著你的肩腰,陽光的和暖與花草的美麗,同在和風中波動他們應用的符號是永遠一致的</p>
			<p>不止是苦,她的忍耐,站在漆黑的床邊,他年紀雖則小,你知道的是慈母的愛,約莫八九歲光景,比如去一果子園,他會拉,扮一個漁翁,山罅裡的泉響,是悵惘?</p>
			<p>講,日子雖短,日子雖短,你在這世界上寂寞時便不寂寞,更無從悔,新近有一天晚上,尤其是年輕的女伴,你離開了媽的懷抱,更無從悔,在一個睛好的五月的向晚,就這單純的呼吸已是無窮的愉快;空氣總是明淨的,一九二五年六月三日作、在這裡出門散步去,但我最後見你的時候你才不滿四月,誰沒有悵惘?</p>
			<p>決不過暖;風息是溫馴的,而況揶揄還不止此,許是恨,不是寡恩,他音樂的興趣已經很深:他比著手勢告我他也有一張提琴,體態的秀美,有時一澄到底的清澈,你去時也還是一個光亮,你的腳蹤彷彿在樓板上踹響。</p>
			<p>你就會在青草裡坐地仰臥,一個不相識的小孩,我,流入嫵媚的阿諾河去……但那晚雖則結識了一個可愛的小友,我只是悵惘,你一個人漫遊的時候,流入涼爽的橄欖林中,她多疼你!</p>
		</article>
		</body>
	</html>

然後這是執行git log後,得出來的結果

Commit 時間 提交者 提交訊息
be11c8b9ed3e894869d489abd06b0a7906525232 獨孤曉華 修正前一版本
52f1a9b767114062686cd4d79e807f5551b02544 第五家豪 write js code
45ec936770f25860442f0627a572a1f62405a71a 獨孤曉華 整理 source
a48295da43e23c9627b2fb2c4e8706cc203c887e 宓翠愛 add jquery ui and bootstrap
ef25743202f01e056b1194cababef7265d2e476f 司馬小明 add jquery
66d7c464674665bfa160ee4ee6158dfeb9e813b9 李祥 建立網頁

執行 git diff 66d7c464674665bfa160ee4ee6158dfeb9e813b9..ef25743202f01e056b1194cababef7265d2e476f,後會出現如下內容。


diff --git a/index.html b/index.html
index c816ae4..a265182 100644
--- a/index.html
+++ b/index.html
@@ -3,6 +3,7 @@
        <head>
                <meta charset="UTF-8"/>
                <title>測試網頁</title>
+               <script src="scripts/jquery-1.3.min.js"></script>
        </head>
        <body>
                <h1>比方說,卻難尋同樣的淚晶。</h1>

可以看出原本 jquery 版本與現在不同,甚至連路徑也不同。

如果要看每一行到底是誰改的,我們首先可以執行git blame index.html

然而,假設司馬小明想知道到底是誰把檔案改成 3.4 版,我們可以搭配 grep (windows cmd 則是 findstr)來找:

$git blame index.html | grep "jquery"
be11c8b9 (獨孤曉華 2020-04-23 10:43:14 +0800  9)                <script src="scripts/lib/jquery-3.4.min.js"></script>
45ec9367 (獨孤曉華 2020-04-23 10:31:15 +0800 10)                <script src="scripts/lib/jquery-ui-1.8.min.js"></script>

這樣只是知道最後一行是獨孤曉華改的,但他沒有改動版本。 git blamegit log等一樣,可以查詢特定 commit 的改動,根據上面的 commit 清單,可以如下查詢:

$ git blame index.html 52f1a9b767114062686cd4d79e807f5551b02544 | grep "jquery"
45ec9367 (獨孤曉華 2020-04-23 10:31:15 +0800  9)                <script src="scripts/lib/jquery-ui-1.8.min.js"></script>
$ git blame index.html a48295da43e2 | grep "jquery"
01e30b5e (獨孤曉華 2020-04-23 10:27:27 +0800  9)                <script src="scripts/jquery-3.4.min.js"></script>
a48295da (宓翠愛   2020-04-23 10:30:47 +0800 10)                <script src="scripts/jquery-ui-1.8.min.js"></script>
$ git blame index.html ef25743202f01e0 | grep "jquery"
ef257432 (司馬小明 2020-04-23 10:26:47 +0800  6)                <script src="scripts/jquery-1.3.min.js"></script>

藉此,可以知道兇手就是獨孤曉華於01e30b5e的commit

參考資料

沒有留言:

張貼留言