我对使用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
的本地副本与远程副本匹配,所以为什么当我推送时其他两个文件出现在请求请求中?有什么我应该反对的东西,以查看在我的请求请求中将显示什么?
答案 0 :(得分:0)
刚刚遇到了同样的问题。我也和你一样,WIP 提交和 reset --soft
继续工作,所以它可能是相同的原因。
使用 git reset --soft
,更改保持暂存状态。我使用 git restore --staged *
删除暂存区中的所有文件,然后进行较小的提交。发生了同样的问题,仅添加 2 个文件导致提交包含更多更改,即使它们没有被列为带有 git status
的暂存。
为我解决的是执行相同的步骤,但更改命令:
git restore --staged *
到
git restore --staged .
注意 *
(全部)和 .
(当前目录)之间的区别。
我怀疑不应该提交的文件以某种方式仍然添加到暂存区,但没有用 git status
列出并且不被 *
参数识别,因为它可能指的是所有暂存文件。这是一个猜测,真的不知道。