git临时区域如何存储文件?

时间:2012-04-26 03:24:04

标签: git

我想了解Git在将文件移动到“暂存”状态时实际存储的内容。

请考虑以下顺序:

添加新文件并将其提交到本地存储库:

touch file.txt
git add file.txt
git commit

我对文件进行了更改:

echo text1 > file.txt
git add file.txt

然后我再次编辑文件,然后提交它:

echo text2 > file.txt

git状态显示:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   file.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   file.txt
#
然后我提交文件:

git commit file.txt

git如何能够处理暂停对 file.txt 的新的第二次更新而不被告知? “状态”输出看起来好像会尝试检查第一个修订版,但是在不检查它们的情况下保留未分级的更改。

在这种情况下是否有隐含的阶段?

2 个答案:

答案 0 :(得分:8)

将Git视为两件事 - 提交(文件快照)和标签(分支等)。

Git实际上会在您git add时创建提交,而不是在您git commit时创建。因此,当您对更改的文件执行git add时,它会创建一个包含这些更改的提交,并为该特定提交分配“staging”标签。

当您在执行git commit之前再次更改文件时,它现在具有“暂存提交”(尚未执行git commit),以及对文件的新更改既没有增加也没有承诺。这就是git status能够向您展示的两种方式。

当您git commit时,它实际上是将您当前的分支标签移动到该特定提交(并删除“staging”标签),因此提交不再标记为“staging”而是“master”(或你现在所处的任何分支。)

答案 1 :(得分:4)

git commit <somefiles>相当于git add <somefiles>,后跟git commit。如果您只是执行git commit,git将提交所有暂存的更改,但不会提交自您上次处理相关文件以来所做的编辑。