10

我想了解将文件移动到“暂存”状态时 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的新的第二次更新?“状态”输出看起来好像它会尝试签入第一个修订版,但保留未暂存的更改而不签入它们。

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

4

2 回答 2

10

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

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

当您在执行之前再次更改文件时git commit,它现在具有“暂存提交”(git commit尚未对其执行),并且对文件的新更改既未添加也未提交。这git status就是能够向你们展示的方式。

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

于 2012-04-26T04:58:45.857 回答
4

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

于 2012-04-26T04:28:43.407 回答