[英]How can you git add a new file without staging it?
為了有效地使用git(並且按照預期),我進行了小型的原子提交,而我確實有更長的會話,我不僅要改變一件事。 因此,我大量使用git add -p
。 但是,這對於全新的文件不起作用,因為我以后往往會忘記它們。
我想要做的是,告訴git
, 有一個新的文件,我想它來跟蹤,而不是階段,它 :
示例:運行git status
會產生:
# On branch my-current-branch
# Your branch is ahead of 'origin/my-current-branch' by 2 commits.
#
# Changes to be committed:
#
<<STAGED SECTION>> // A
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
<<UNSTAGED-YET-KNOWN SECTION>> // B
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
<<UNKNOWN SECTION>> // C
如果我在C部分有一個文件foo
,並且我說git add foo
它將轉到A部分。 如果我說git add -N foo
它會轉到A和B.然而,這意味着它將包含在下一次提交中,至少是因為有一個新文件。
我想讓它專門進入B部分,這樣我以后可以使用git add -p
或git add foo
(或其他)將其添加到A.
關於add -N
解決方案,這不起作用,因為如果我在說add -N
並且沒有正確添加它之后嘗試提交,git會抱怨因為它不知道如何處理空文件:
foo: not added yet
error: Error building trees
使用Git 2.5, git add -N/--intent-to-add
實際上是正確的解決方案。
新文件不會成為下一次提交的一部分。
請參閱NguyễnTháiNgọcDuy 提交的d95d728 ( pclouds
)(合並於d0c692263 ):
diff-lib.c
:調整diff中條目的位置
由“
git add -N
”git add -N
條目是用戶的提醒,以便他們在提交之前不會忘記添加它們。 這些條目即使不是真實的,也會出現在索引中。 他們在索引中的存在會導致令人困惑的“git status
”,如下所示:
On branch master
Changes to be committed:
new file: foo
Changes not staged for commit:
modified: foo
如果你執行“
git commit
”,即使“status
”將其報告為“to be committed
git commit
”,也不會包含“foo
”。
此修補程序將輸出更改為
On branch master
Changes not staged for commit:
new file: foo
no changes added to commit
這意味着:
將這些路徑視為“尚未添加到索引中,但Git已經了解它們”; “
git diff HEAD
”和“git diff --cached HEAD
”不應該談論它們,而“git diff
”應該將它們顯示為新的。 +尚未添加到索引的文件。
也許您可以嘗試編寫一些預提交掛鈎,如果您有未跟蹤的文件,它會提醒您。 這將要求你始終保持你的git目錄清潔(顯然你需要保持最新的.gitignore)。
還可以嘗試git add -i
,它類似於git add -p
但也有一個用於添加新文件的界面。
在進行更改之前,您可以使用該路徑提交空文件。 如果你已經在那里寫了東西,移動文件,制作一個空白文件,提交,然后正常添加-p和git commit --amend
這樣你就沒有“添加空白文件”提交。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.