Git提交添加/删除未暂存的文件

时间:2020-04-06 20:31:02

标签: git github git-commit git-lfs git-add

我对使用git还是很陌生,我已经陷入了几次陷阱,其中一次git提交最终导致修改的文件在执行git status时不会显示。我很好奇是否有人会导致我的本地存储库进入这种状态,因为我似乎需要重新克隆该存储库才能解决我的问题。

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

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的本地副本与远程副本匹配,所以为什么当我推送时其他两个文件出现在请求请求中?有什么我应该反对的东西,以查看在我的请求请求中将显示什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

git restore --staged *

git restore --staged .

注意 *(全部)和 .(当前目录)之间的区别。

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