使用 Git 提交文件的时候,显示新建、删除了很多文件(这些文件这一次根本没有改动到,git status 也没有显示这些文件),我实际只提交了那个圈起来的文件。
各位有谁遇到过这种情况吗,需要怎么解决呢?

|  |      1villivateur      2021-12-24 13:04:51 +08:00 via Android  1 你能把你提交的命令行步骤都贴一下吗? | 
|  |      2xiaomimei      2021-12-24 13:06:59 +08:00 via Android  1 git diff HEAD 看看呢,是不是被改了文件权限之类的 | 
|      3menghuan      2021-12-24 13:10:17 +08:00  1 盲猜可能文件名大小写问题 | 
|      4ddllzz OP | 
|      5ddllzz OP | 
|  |      6Trim21      2021-12-24 13:39:15 +08:00 via Android  1 看你截图里这些文件都已经 commit 了,得用 diff HEAD^1 查看修改吧 | 
|      9trn4      2021-12-24 14:34:52 +08:00 via iPhone  1 @xiadong1994 吗* | 
|      10ddllzz OP @xiadong1994 #8 没有啊,比如 start.sh 就没有 | 
|  |      1166beta      2021-12-24 15:11:07 +08:00  1 装个 GUI 吧 | 
|  |      13jimliang      2021-12-24 16:23:17 +08:00  1 可以能是什么工具加了 git hook , `cat .git/hooks/pre-commit` 看下提交前有哪些操作 | 
|      14yanguoyu      2021-12-24 17:01:58 +08:00  1 #13 楼说的很有可能 | 
|  |      15anzu      2021-12-24 17:38:41 +08:00  1 IDE 自动加的吧 | 
|  |      16Edsie      2021-12-24 17:50:11 +08:00  1 麻烦看一下 ga 的 alias 是不是缩写成了 git add . 后面跟了“点” 导致工作区的改动全部都到了暂存区 | 
|      17ddllzz OP | 
|      19catxo      2021-12-24 19:26:20 +08:00  1 也许你需要 git config core.fileMode true ? | 
|  |      20xtinput      2021-12-24 19:43:00 +08:00  1 你搞个 GUI 的 git 软件吧,直观 | 
|      21yulon      2021-12-24 19:47:13 +08:00  1 盲猜是自动转换换行符,而 diff 是不会考虑换行符的 | 
|  |      22guog      2021-12-24 19:57:09 +08:00 via Android  1 这里变更的都是 file mode ,是不是变成可执行文件了,比如 644 到 755 | 
|  |      23Mutoo      2021-12-24 20:33:22 +08:00  2 楼上正解,这里 log 出来的并不是文件的增删,而是文件限权的变更。 git 除了记录文件的修改历史,还会记录一份文件的权限,使得在不同的操作系统上 clone 的时候可以恢复文件的权限,例如让 bin 在 checkout 后可以运行。 https://stackoverflow.com/a/8347325 | 
|  |      24yikang      2021-12-25 00:29:30 +08:00 | 
|  |      25sutra      2021-12-25 00:39:14 +08:00 git diff 看看,或者 git show commit-id | 
|      26trn4      2021-12-25 01:54:27 +08:00 via iPhone 首先你先别用 alias 用原始的 git | 
|      27jinliming2      2021-12-25 03:27:11 +08:00 @ddllzz #4 看这个截图,你 gst 后的输出就显示了这些文件都发生了变更,运行 git diff 看一下具体的变更内容再做判断。 另外,你 ga 之后应该只添加了一个文件,但是 gcmsg 之后看起来是提交了多个文件。请在 ga 之后 gst 看看是不是只有一个文件变绿了? 另外,我还注意到,你 gst 之后打印的文件列表和 gcmsg 之后打印的文件列表对应不上,确认一下你的 gcmsg 都执行了什么操作? 建议不要使用 alias ,使用原始 git 并禁用 hooks 看看是否还有问题: gst => git status ga xxx => git add xxx gcmsg "xxx" => git commit --no-verify -m "xxx" (加 no-verify 是用来禁用 hooks 的) | 
|      28ddllzz OP @yikang #24  @sutra #25 @xiadong1994 #26 @jinliming2 #27 不使用 alias ,禁用 hooks 的效果。(感觉不是我提交文件的操作有问题,而是在此之前我的某些不当操作导致的问题,因为我删除项目中的 .git 目录,并替换成线上的 .git 目录之后,就一切正常了)     配置如下:  系统:  | 
|  |      29sutra      2021-12-25 14:30:39 +08:00 你别光 git status 呀,你倒是 git diff 我看看。也许只是换行符之类的变化。 | 
|      30ddllzz OP @sutra #29 git diff 那么多我要怎样给你看呢 我撤销有问题的提交之后,执行:git --no-pager diff 最后一次 commit id | grep 文件名的结果如下 mini.php 是有改动的。admin.php 我没改动,但是提交之后显示删除的。  | 
|  |      31sutra      2021-12-26 23:33:08 +08:00 无语。你不 git diff ,我怎么知道你那发生了什么。 | 
|  |      32sutra      2021-12-26 23:34:02 +08:00 git diff 某个具体的文件也可以呀,也并不需要 diff all 。 | 
|  |      33sutra      2021-12-26 23:39:53 +08:00 你这 git diff | grep filename 有啥意义,这输出不是和 git status 内容差不多,只有文件名,没有变化内容。到底发生了什么变化,不还是看不出? | 
|  |      34tywtyw2002      2021-12-27 05:53:51 +08:00 via iPhone 看起来像是 git hash collision 了吧。 | 
|      35ddllzz OP @sutra #33 因为我以为:列出文件变化内容,肯定得列出文件名。 这么是 git diff 单个文件的结果 []( https://imgtu.com/i/T0xZvt) | 
|  |      36sutra      2021-12-27 13:40:42 +08:00 via iPhone 你 diff 个 deleted file ? | 
|  |      37wangtian2020      2021-12-28 09:20:15 +08:00 用 sourcetree 图形化界面提交 git 就不会出现这种问题 | 
|      38dengji85      2021-12-28 11:22:02 +08:00 以前有碰到过,有所谓对的多次逆向合并,但没深究 | 
|  |      39index90      2021-12-28 17:12:06 +08:00 怕不是你仓库里有大小写文件名? |