背景
在windows下編輯某個項目代碼時,編輯到一半,需要切換到另一個分支,直接轉(zhuǎn)換會提示當(dāng)前工作區(qū)還有已修改的文件尚未commit,但是當(dāng)前更改的內(nèi)容尚未完整,所以還不想commit到倉庫中。所以就使用了git stash save命令將當(dāng)前工作區(qū)緩存后,才能切換到其他分支。
但是在checkout回到自己分支使用git stash apply時。發(fā)現(xiàn)不能將stash中的內(nèi)容恢復(fù),報錯顯示有文件已modified,即使使用girl restore xxx也沒辦法將文件的modified狀態(tài)消除。文章來源地址http://www.zghlxwxcb.cn/news/detail-761207.html
問題排查
- 首先,因為確認(rèn)沒有對文件做了什么修改,所以我一開始先直接使用
git restore
命令將文件恢復(fù)到上次提交的內(nèi)容,但是發(fā)現(xiàn)沒有什么用,文件還是處于modified狀態(tài)git restore example/example.py
- 接著,我使用
git diff --summary
對比modified文件到底發(fā)生了什么變化
根據(jù)提示,發(fā)現(xiàn)是文件的權(quán)限發(fā)生了改變,參考中的方式,在git bash中運行了以下命令,但是沒起作用,不知道是不是因為是系統(tǒng)是windows的原因$ git diff --summary mode change 100755 => 100644 example/example.py
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod +x
- 最后,通過
git config --list
才發(fā)現(xiàn),config中有一條filemode配置項,該配置項被設(shè)置為了true
狀態(tài)
修改該配置項的值為$ git config --list ... core.filemode=true ...
false
, 文件的modified狀態(tài)消失了。
這樣設(shè)置作用范圍僅針對當(dāng)前工作區(qū),如果想要全局生效,則需要添加git config core.filemode false
--global
選項git config --global core.filemode false
總結(jié)
- 先用
git diff --summary
查看文件具體發(fā)生了什么改變 - 這里是checkout切換后文件權(quán)限發(fā)生了變化導(dǎo)致的,需要修改git的配置文件,需要設(shè)置將文件權(quán)限檢測功能關(guān)閉,即
git config core.filemode false
;如果需要全局生效,則git config --global core.filemode false
- 其他類似的,因文件名發(fā)生改變導(dǎo)致的需要配置
git config core.filename false
; 因LF/CRLF原因?qū)е碌男枰渲?code>git config core.autocrlf false
參考
文章來源:http://www.zghlxwxcb.cn/news/detail-761207.html
到了這里,關(guān)于文件沒有更改,但git status顯示modified的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!