git status將文件狀態標爲renamed問題探究

問題描述

線上項目有一個小bug,我修改了xx.js中的一行代碼解決了問題,然後webpack打包,準備提交代碼。

git add .
git status

這時候我發現,git status的輸出爲:

renamed:    xx.1.js -> xx.2.js

我發現這不太對啊:renamed雖然可以體現出來webpack打包的時候改掉文件名hash值這個重命名的過程,但不能體現我改了文件內容啊。

我覺得應該這樣輸出纔對:

deleted:     xx.1.js
new file:    xx.2.js

於是開始找答案,看爲什麼和我想的不一樣。

問題解決

搜了一圈,最終有些收穫,結論先行:

git把文件標爲renamed的意思是並不是很具體的指這個文件重命名了。他是一個泛指,這是一個種所謂heuristic(啓發式,不懂不懂)的用法。

關於這個問題沒有找到足夠的資料,但是通過我的測試,發現:

一個文件的改動的行數低於總行數的50%的,並且進行重命名操作就會出現這種被標爲renamed的情況

測試方法如下:

  1. a.txt,裏面內容爲0-99的數字,每個一行,共100行。
  2. 把這個文件做commit
  3. 重命名a.txt爲b.txt
  4. 刪除49行內容,然後做add操作,然後做git status操作
  5. 刪除50行內容,然後做add操作,然後做git status操作
  6. 刪除51行內容,然後做add操作,然後做git status操作

同時在找資料的時候我也嘗試了下面兩個鏈接裏提到的方式,但是在我的版本(2.19.2.windows.1)都沒有成功復現。

參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章