背景
我在window系统做开发,前两天重命名工作区一个FullState.tsx为fullState.tsx,可能由于提交反复的问题(commit时没成功被误以为成功了,后续修改直接执行了amend,导致需要reset重新commit),线上的diff中存在FullState.tsx和fullState.tsx两个文件。但是本地找不到大写的那个。
尝试
为了去掉大写文件,尝试:
// 本地删除 失败
1、本地git rm FullState.tsx
=== 失败,提示不存在FullState.tsx文件
// git仓库线上删除 成功
2、线上浏览时,删除提交
=== 成功
// 本地开发分支修改一部分代码后,合并远程分支 失败
3、开发分支:git pull + git rebase origin/功能分支
=== 提示 FullState.tsx 文件不存在
=== 还有一堆几行变色的提示(没见过,已记不清,当时没截图)
又尝试:
// 退出rebase
4、git rebase --abort
// 将修改内容重新保存起来
5、开发分支: git reset HEAD~1 // 调出unstaged change
6、开发分支: git stash
// 直接在功能分支上合并代码
7、本地同名功能分支: git stash pop
// 既然提交内容多一个不必要的更改,删除改文件
8、git clean -n 查看是否能删除
// 看到上面可以删除改文件,随即执行删除
9、git clean -f
// 查看是否还存在
10、 git status // 删除成功
// 提交代码上限
11、git push
// 提交合并请求, 在diff里能看到FullState.tsx 完全重新被提交,显示为
FullState.tsx +365 // 由0新增365行代码
这意味着本地提交对象已经包含了FullState.tsx,虽然本地文件看不到,只有特殊处理才能去掉。
git config core.ignoreCase => false
可能我还缺乏这方面的知识,但是我做了一个小尝试。
重命名了 fullState.tsx 文件
发现大小写同名文件被一起删除了,和猜想的一样,在那几次反复的提交中,这两个文件被绑定了。
所以最新的那次修改虽然没有显式的修改 FullState.tsx 文件,但是 他被fullState.tsx(小写文件)的内容影响了。
于是我最终选择了重命名,最终仓库里就只有一个 allStates.tsx 文件。