git - git bug:`git add` 添加了比我预期的更多的文件,而 `git diff` 在提交后丢失了它们
问题描述
我刚刚遇到了一个奇怪的 Git 行为,不确定它是否是错误。我使用的是 Git 2.24,但后来我升级到 2.26 并且行为没有改变。
所以我有以下设置(只显示受影响的文件):
.
+-- addons
+-- gut
+-- file1
+-- file2
+-- scripts
+-- level.gd
因此,我进行了更改,level.gd
并在决定提交时注意到我不需要addons
目录。所以我决定摆脱它并发出以下命令:
rm -Rf addons
git add addons/
git commit -m "removed addons/gut"
一切似乎都完好无损:git log
显示:
> git log
commit 8be3472798df93d015ab3023f9e9d406a76dbed5 (HEAD -> master)
Author: hedin_hiervard <flame.beholder@gmail.com>
Date: Sun Apr 26 11:13:02 2020 +0200
removed addons/gut
所以我继续我的第一个想法,运行时git status
我发现没有什么可以提交了!我的改动消失了吗?!不,快速检查显示他们在那里。他们被承诺了吗?似乎没有:
> git diff --summary -r HEAD^1 -r HEAD
delete mode 100644 addons/gut/GutScene.gd
delete mode 100644 addons/gut/GutScene.tscn
delete mode 100644 addons/gut/LICENSE.md
delete mode 100644 addons/gut/doubler.gd
delete mode 100644 addons/gut/gut.gd
delete mode 100644 addons/gut/gut_cmdln.gd
delete mode 100644 addons/gut/gut_plugin.gd
delete mode 100644 addons/gut/hook_script.gd
delete mode 100644 addons/gut/icon.png
delete mode 100644 addons/gut/icon.png.import
delete mode 100644 addons/gut/logger.gd
delete mode 100644 addons/gut/method_maker.gd
delete mode 100644 addons/gut/one_to_many.gd
delete mode 100644 addons/gut/optparse.gd
delete mode 100644 addons/gut/plugin.cfg
delete mode 100644 addons/gut/signal_watcher.gd
delete mode 100644 addons/gut/source_code_pro.fnt
delete mode 100644 addons/gut/spy.gd
delete mode 100644 addons/gut/stub_params.gd
delete mode 100644 addons/gut/stubber.gd
delete mode 100644 addons/gut/summary.gd
delete mode 100644 addons/gut/test.gd
delete mode 100644 addons/gut/test_collector.gd
delete mode 100644 addons/gut/thing_counter.gd
delete mode 100644 addons/gut/utils.gd
什么?
> git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
让我们注释文件:
> git annotate scripts/level.gd
...
8be347279 (hedin_hiervard 2020-04-26 11:13:02 +0200 2708) var weather_probs_array = rules.all_rules_in_section("weather_prob")
...
看,我的更改已提交8be347279
!但我 100% 确定我没有在那儿上演它们。并且 diff 显示该文件没有文件更改!但是注释可以。
更奇怪的是:
> git log --name-status HEAD^..HEAD
commit 8be3472798df93d015ab3023f9e9d406a76dbed5 (HEAD -> master)
Author: hedin_hiervard <flame.beholder@gmail.com>
Date: Sun Apr 26 11:13:02 2020 +0200
removed addons/gut
D addons/gut/GutScene.gd
D addons/gut/GutScene.tscn
D addons/gut/LICENSE.md
D addons/gut/doubler.gd
D addons/gut/gut.gd
D addons/gut/gut_cmdln.gd
D addons/gut/gut_plugin.gd
D addons/gut/hook_script.gd
D addons/gut/icon.png
D addons/gut/icon.png.import
D addons/gut/logger.gd
D addons/gut/method_maker.gd
D addons/gut/one_to_many.gd
D addons/gut/optparse.gd
D addons/gut/plugin.cfg
D addons/gut/signal_watcher.gd
D addons/gut/source_code_pro.fnt
D addons/gut/spy.gd
D addons/gut/stub_params.gd
D addons/gut/stubber.gd
D addons/gut/summary.gd
D addons/gut/test.gd
D addons/gut/test_collector.gd
D addons/gut/thing_counter.gd
D addons/gut/utils.gd
M rules/level.cfg
M scripts/level.gd
为什么在地球上存在差异git log
和git diff
输出以及我对提交所做的更改?是 Git 错误还是我对 Git 的基本工作方式有误解?
EDIT1:无法重现它。完成后,git reset --soft HEAD~1
我恢复了所有更改并上演:
> git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: addons/gut/GutScene.gd
deleted: addons/gut/GutScene.tscn
deleted: addons/gut/LICENSE.md
deleted: addons/gut/doubler.gd
deleted: addons/gut/gut.gd
deleted: addons/gut/gut_cmdln.gd
deleted: addons/gut/gut_plugin.gd
deleted: addons/gut/hook_script.gd
deleted: addons/gut/icon.png
deleted: addons/gut/icon.png.import
deleted: addons/gut/logger.gd
deleted: addons/gut/method_maker.gd
deleted: addons/gut/one_to_many.gd
deleted: addons/gut/optparse.gd
deleted: addons/gut/plugin.cfg
deleted: addons/gut/signal_watcher.gd
deleted: addons/gut/source_code_pro.fnt
deleted: addons/gut/spy.gd
deleted: addons/gut/stub_params.gd
deleted: addons/gut/stubber.gd
deleted: addons/gut/summary.gd
deleted: addons/gut/test.gd
deleted: addons/gut/test_collector.gd
deleted: addons/gut/thing_counter.gd
deleted: addons/gut/utils.gd
modified: rules/level.cfg
modified: scripts/level.gd
所以我取消了它们git reset
并正确地重新添加到 2 个提交中,现在一切都很顺利。
EDIT2:好的,至少部分问题已解决:这确实是一个错误git diff --summary
:
hedin@MacBook-Pro ~/P/ds> git diff -r HEAD^1 -r HEAD
diff --git a/scripts/board.gd b/scripts/board.gd
index a9f177a0..43eeae10 100644
--- a/scripts/board.gd
+++ b/scripts/board.gd
@@ -2927,11 +2927,6 @@ func set_observatory_notices() -> void:
if b.is_observatory():
b.observatory_set_new_cards(true)
-func reset_all_workshops() -> void:
- for b in _tower_blocks.values():
- if b.is_workshop():
- b.reset_timer(Block.TimerType.WORKSHOP_PRODUCING)
-
func has_charged_dynamite() -> bool:
for b in _blocks.values():
if b.has_charged_dynamite():
diff --git a/scripts/level.gd b/scripts/level.gd
index cfa1f0df..d079cedb 100644
--- a/scripts/level.gd
+++ b/scripts/level.gd
@@ -305,10 +305,7 @@ func _on_player_decks_can_draw_changed(type: int) -> void:
if player_decks.decks[type].can_draw():
return
_update_ui_state()
- match type:
- CardDesc.Type.TOOL:
- board.reset_all_workshops()
-
+
func _set_player_draws_left(val):
player_draws_left = val
emit_signal("player_draws_changed", val)
hedin@MacBook-Pro ~/P/ds> git diff --summary -r HEAD^1 -r HEAD
hedin@MacBook-Pro ~/P/ds> git diff --compact-summary -r HEAD^1 -r HEAD
scripts/board.gd | 5 -----
scripts/level.gd | 5 +----
2 files changed, 1 insertion(+), 9 deletions(-)
hedin@MacBook-Pro ~/P/ds>
但我仍然不明白我的更改是如何在提交中结束的。
解决方案
好吧,看来是我的误会了。git diff --summary
不显示更改的文件(有点违反直觉),但git diff --compact-summary
确实如此。那欺骗了我。由于它不是 git 错误,因此第二个问题(为什么文件被暂存)并不那么重要,我将结束这个问题。
推荐阅读
- asynchronous - 使用协程重构 Lua 中的阻塞 I/O
- r - r 绑定名称匹配字符串的所有数据帧
- postgresql - 在 mvt 中获取单独的图层
- java - Java异或解密
- html - 最近的帖子 CSS 行布局设计
- java - Heroku 为 Spring Boot REST API 部署构建失败
- java - 使用 Java11 和 Maven,尽量避免 jacoco 和 surefire 退出错误并在 Mac 上运行 jacoco 测试覆盖
- node.js - axios 是否会延迟 http 请求
- jquery - 每次用户标记具有特定类的单选按钮时如何增加分数
- javascript - 无法在标签中显示新行