問題描述
線上項目有一個小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
的情況
測試方法如下:
- a.txt,裏面內容爲0-99的數字,每個一行,共100行。
- 把這個文件做commit
- 重命名a.txt爲b.txt
- 刪除49行內容,然後做add操作,然後做
git status
操作 - 刪除50行內容,然後做add操作,然後做
git status
操作 - 刪除51行內容,然後做add操作,然後做
git status
操作
同時在找資料的時候我也嘗試了下面兩個鏈接裏提到的方式,但是在我的版本(2.19.2.windows.1)都沒有成功復現。