我想了解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 的新的第二次更新而不被告知? “状态”输出看起来好像会尝试检查第一个修订版,但是在不检查它们的情况下保留未分级的更改。
在这种情况下是否有隐含的阶段?
答案 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将提交所有暂存的更改,但不会提交自您上次处理相关文件以来所做的编辑。