git - 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
与远程匹配,那么为什么当我推送其他两个文件时会显示在拉取请求中?有什么我应该比较的东西来看看我的拉取请求中会出现什么?
解决方案
刚刚经历了同样的问题。我也和你一样,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
并且参数无法识别*
,因为它可能指的是所有暂存文件。这是一个猜测,真的不知道。
推荐阅读
- typescript - 如何仅检查打字稿中传递对象的键?
- php - Laravel8 tdd:会话缺少预期的关键错误
- javascript - 与嵌入分开发送附件的 Djs 交互
- google-apps-script - 根据第一个单元格值锁定行 - Google 表格
- python - 创建照片时如何创建迷你照片?
- nginx - 无法获取 auth_request 返回的标头和状态码
- karate - 如何为来自数组的每个 json 请求多次调用端点
- c++ - 为构造构造函数声明相同的结构 2 次有什么用?
- python - 如果在扫描 qrcode 后得到相同类型的盒子,我如何增加相同类型盒子的计数?
- kotlin - forEach { } 会自动关闭流吗?