首页 > 解决方案 > Git 提交添加/删除未暂存提交的文件

问题描述

我对使用 git 还很陌生,我已经把自己挖了几次,我的一个 git 提交最终修改了在执行git status. 我很好奇是否有人知道可能会导致我的本地存储库进入这种状态,因为我似乎需要重新克隆存储库来解决我的问题。

带有一个未暂存文件的示例 git status。

User@User-DESKTOP:~/code/tap$ git status                                                    
On branch what-is-programming                                                            
Changes not staged for commit:                                                           
  (use "git add <file>..." to update what will be committed)                             
  (use "git restore <file>..." to discard changes in working directory)                  
        modified:   exampleFile.cs   

no changes added to commit (use "git add" and/or "git commit -a")       

然后我添加文件

User@User-DESKTOP:~/code/tap$ git add .
warning: LF will be replaced by CRLF in exampleFile.cs
The file will have its original line endings in your working directory

然后我提交文件

User@User-DESKTOP:~/code/tap$ git commit -m "some message" [what-is-programming bd86d6b] some message
 3 files changed, 88 insertions(+), 186 deletions(-)
 create mode 100644 someFileIDontExpect.cs
 delete mode 100644 anotherFileIDontExpect.cs

如果我对之前的提交进行比较,它会显示我的期望

User@User-DESKTOP:~/code/tap$ git diff --name-status HEAD~
M       exampleFile.cs

如果我与主人不同,也一样

User@User-DESKTOP:~/code/tap$ git diff --name-status master
M       exampleFile.cs

但是当我推送到 github 时,它显示我创建了 someFileIDontExpect.cs 并删除了 anotherFileIDontExpect.cs。

我看到我在做“奇怪”的事情的潜在地方,我有时会做一个git commit -m "WIP"然后再git reset --soft HEAD~继续处理 WIP 提交。我发现工作流程比它更好,git stash但它可能会产生问题?我不完全确定如何弄清楚什么是坏的,因为我的提交似乎很好,但是一旦它到达 github,它就处于一个意想不到的状态。

我们也在使用 git-lfs 但这发生在源文件中,所以我不确定它是否会产生影响。

感谢您提供的任何见解!我很好奇我是怎么弄坏东西的。

编辑

@mkrieger1 你是对的,git add .在我的工作目录中添加了所有文件,但git status没有显示任何其他未暂存的文件。我提交的 git diff 也没有显示其他添加或修改的文件。

@matt我不确定我是否遵循。git diff --name-status HEAD~应该列出上一次提交中添加或修改的文件吗?exampleFile.cs即使我的提交消息显示someFileIDontExpect.cs正在创建和anotherFileIDontExpect.cs删除,它也只显示正在修改。我希望git diff --name-status master向我展示我的分支what-is-programming中不存在的更改master,它们也显示exampleFile.cs为正在修改。我的本地副本master与远程匹配,那么为什么当我推送其他两个文件时会显示在拉取请求中?有什么我应该比较的东西来看看我的拉取请求中会出现什么?

标签: gitgithubgit-commitgit-lfsgit-add

解决方案


刚刚经历了同样的问题。我也和你一样,WIP 提交和reset --soft继续工作,所以这可能是相同的原因。

使用 a git reset --soft,更改仍然是阶段性的。我git restore --staged *用来删除暂存区域中的所有文件,然后进行较小的提交。发生了同样的问题,仅添加 2 个文件导致提交包含更多更改,即使它们没有被列为暂存git status.

为我解决的问题是执行相同的步骤,但更改命令:

git restore --staged *

git restore --staged .

*注意(all) 和.(current directory)之间的区别。

我怀疑不应以某种方式提交的文件仍以某种方式添加到暂存区域,但未使用 a 列出,git status并且参数无法识别*,因为它可能指的是所有暂存文件。这是一个猜测,真的不知道。


推荐阅读