我想了解當將文件移動到「暫存」狀態時,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
如何是混帳能夠處理分期新的,第二次更新file.txt的而不告訴? 「狀態」輸出看起來好像它會嘗試檢查第一個修訂版本,但是在不檢查它們的情況下保留未執行的更改。
在這種情況下是否存在隱式階段?
我在運行上述測試時觀察到的行爲是,它將文件的非分離內容(「text2」)提交到回購庫中。這個解釋是否正確?我認爲它會提交文件的「stage」版本(「text1」)。我通過做一個「git checkout file.txt」來確認這是什麼。 – 2012-04-26 07:23:52
我剛做了一個測試,但沒有得到你的結果。 'git test''cd gittest''git init''echo text 1> test.txt''git add。''git commit -m'初始提交''echo text 2> test.txt''git add .' 'echo text 3> test.txt'此時,存在分階段更改(「文本2」)和未分離更改(「文本3」)。現在,'git checkout test.txt'和'cat test.txt'。我得到「文本2」。隨着階段性變化,本地更改被廢棄。 – redhotvengeance 2012-04-26 07:39:36
我得到與您的測試序列相同的結果。但是,如果我在'echo text 3> test.txt'步驟之後執行'git commit'(類似於我在原始文章中的步驟),那麼當我觀察git隱式地分級「text 3」內容並將其提交給回購。爲了清楚起見,我在這裏做的序列是:'mkdir gittest''cd gittest''git init'' echo text 1> test.txt''git add。''git commit -m'初始提交'' echo文本2 > test.txt''git add .'' echo text 3> test.txt''git commit -m'new'' git checkout test.txt''cat test.txt',result a output of「text 3 」。 – 2012-04-26 07:52:30