我想了解Git在将文件移动到"暂存"状态时实际存储的内容.
请考虑以下顺序:
添加新文件并将其提交到本地存储库:
touch file.txt
git add file.txt
git commit
Run Code Online (Sandbox Code Playgroud)
我对文件进行了更改:
echo text1 > file.txt
git add file.txt
Run Code Online (Sandbox Code Playgroud)
然后我再次编辑该文件,然后再提交它:
echo text2 > file.txt
Run Code Online (Sandbox Code Playgroud)
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
#
Run Code Online (Sandbox Code Playgroud)
然后我提交文件:
git commit file.txt
Run Code Online (Sandbox Code Playgroud)
git如何能够处理新的第二次更新到file.txt而不被告知?"status"输出看起来好像会尝试检查第一个修订版,但是在不检查它们的情况下保留未分级的更改.
在这种情况下是否存在隐含的阶段?
将Git视为两件事 - 提交(文件快照)和标签(分支等).
Git实际上是在你git add而不是你的时候创建一个提交git commit.因此,当您git add对更改的文件执行时,它会创建一个包含这些更改的提交,并为该特定提交分配"staging"标签.
当您在执行之前再次更改文件时git commit,它现在具有"暂存提交"(git commit尚未对其执行),以及对既未添加也未提交的文件的新更改.这就是如何git status向你们展示的.
当你git commit,它实际上是将你当前的分支标签移动到那个特定的提交(并删除"staging"标签),所以提交不再被标记为"staging"而是"master"(或者你当前所在的任何分支) .