項目中某個java文件左邊欄右鍵->Annotate無法顯示,IDEA提示Number of lines annotated by Git is not equal to number of lines in the file, check file encoding and line separators.
可能是之前某一次Commit
的換行符有問題,正常應該是LF
或者CRLF
,那個文件是CR
- Classic Mac (\r)。
回想幾天之前有一次Commit
,IDEA提示:
當時選擇了中間那個Commit As Is
簡單解決方式是對那個java文件右下角由CR
改為LF
重新Commit
即可,然后就能夠查看Git Annotate
了,但這樣有個問題,之前的Annotate信息會丟失,全部變成最后提交者。
因為該java文件較大,接近1w行代碼,有很多人修改過,希望能保留Annotate歷史信息。
嘗試了2種方式均失敗:
-
對單個文件回退版本,
git log --oneline Xxx.java
,git reset verNum Xxx.java
,注意單個文件不能添加--hard
參數。
再次Commit發現line separator沒有變,仍然是CR
無法查看Annatate。 -
git reset --hard 回退到分支,在
git cherry pick
,
因為中間有同學的提交是個merge操作,直接cherry pick
提示is a merge but no -m option was given
,該merge操作涉及文件很多,嘗試添加-m
參數也不行。
最后突然想到個思路:
用git reset --soft
到有問題Commit之前的分支,然后按git log history
依次git commit
,最后git push -f
,這樣該大java文件的Annotate得以保留,依次Commit的信息變成了最后提交者,由於最近的Commit改動較小,折中考慮選擇了此方案。
值得注意的是為了操作安全,以上操作是單獨拉了單獨分支(包括本地和遠程),git操作測試無誤后再對原分支進行操作。
參考:
https://confluence.jetbrains.com/display/IDEADEV/IntelliJ+IDEA+2018.3+EAP+183.2153.8+Release+Notes
https://www.jetbrains.com/help/idea/configuring-line-endings-and-line-separators.html
https://youtrack.jetbrains.com/issue/IDEA-194895
https://blog.csdn.net/m0_38072683/article/details/82927639
https://blog.csdn.net/ejennahuang/article/details/99591008