当我删除这样的文件时
git rm file_name.ext
我必须提交这些更改吗?为什么呢?
如果我必须提交,我会这样做吗?
git commit . -m "Delete file_name.txt"
这就是为什么我问:我将错误的文件添加到Git的登台索引
git add wrong_file.txt
所以我删除了它
git reset HEAD wrong_file.txt
但在这样做之后,我注意到了这条消息
$ git reset HEAD wrong_file.txt
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: test2.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# wrong_file.txt
$
当我将正确的文件添加到登台索引时,我注意到我删除的test2.txt文件已重命名为right_file.txt
$ touch right_file.txt && git add right_file.txt
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: test2.txt -> right_file.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# wrong_file.txt
$
答案 0 :(得分:1)
最短的答案:“是的”。在您git commit
之前,您的更改仅存储在索引(暂存区域)中。 commit
操作接受所有分阶段的更改,并创建一个包含所有这些更改的新单个提交,“永远”保留它们(除非您执行“重写历史记录”,因为它被称为)。
来自git status
的“重命名”消息基于将要删除的文件与要添加的文件进行比较。如果内容匹配,git会假设(在status
输出中)您必须重命名该文件,而不是删除它并添加另一个文件。例如:
$ mkdir t; cd t; git init; git commit --allow-empty -m initial
Initialized empty Git repository in ...
[master (root-commit) bca9d63] initial
$ $ echo 'file contents' > somefile
$ git add somefile && git commit -m c1
[master c37af4b] c1
1 file changed, 1 insertion(+)
create mode 100644 somefile
现在我有一个包含两个提交的回购,初始为空,而“c1”(c37af4b
)包含somefile
。
$ git rm somefile
rm 'somefile'
$ echo 'file contents' > newfile
$ git add newfile
我删除了somefile
并创建了一个新文件,但其内容与我删除的文件完全相同,因此git status
会检测到这一点:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: somefile -> newfile
#
完成git commit
后,我的修订版不再具有somefile
,但确实有newfile
。 git diff
还会检测到文件看起来完全一样,并假设我重命名了它:
$ git commit -m c2
[master a85cea2] c2
1 file changed, 0 insertions(+), 0 deletions(-)
rename somefile => newfile (100%)
$ git diff HEAD^
diff --git a/somefile b/newfile
similarity index 100%
rename from somefile
rename to newfile
临时区域(又名索引)是您安排事物的地方,直到您喜欢这些安排。然后你commit
冻结该安排的副本,永远可用。直到你commit
,git假设你还不太满意。 git status
将当前阶段安排与HEAD
提交进行比较,并总结差异*,并不真正关心您添加,移除或移动事物的次数,它只是比较“阶段是什么”看起来现在“反对”最后一次冻结的样子“。
[*它还将阶段与工作目录进行比较,并将 差异汇总为“未提交的更改”和/或“未跟踪文件”。]