2015-07-20 78 views
2

我創建了一個新文件foo.rb爲什麼`git add -p`沒有處理未跟蹤的文件?

$ git add -p foo.rb

$ No changes.

然而,沒有添加作品-p。這是一個錯誤還是一個功能? 我期望它能讓我演示文件的一部分。

+0

如果你執行'git add foo.rb'然後'git reset -p foo.rb',會發生什麼?我懷疑會發生這種情況,因爲該文件以前從未被跟蹤過,所以它無法取消某些無法修改的內容,因爲它尚未實際添加。 – axelduch

回答

3

git add --patch被證明是這樣的:

這有效地運行add --interactive,但旁路初始命令菜單並直接跳轉到patch子命令。

而且git add --interactive被描述爲只添加修改變化:在工作樹交互

添加修改內容索引。

因此不,這種行爲是有目的的。

無論如何,使用補丁添加新文件並沒有多大意義,因爲整個文件添加是一個單獨的塊,可以分階段或不分階段(或者您必須手動編輯補丁)。所以它不是git add foo.rb

你可以懸停添加一個空文件使用git add --intent-to-add filegit add -N file簡而言之。這會爲該文件名分配一個空文件,因此下次運行git add -p時,該文件已知,並提供了一個真正的補丁。

0

您正在執行的操作是添加一個新文件,此操作的唯一撤銷操作是刪除,這適用於整個文件,因爲-p允許您應用部分臨時操作,所以無法在您的情況下執行操作。

記住提交是文件(或文件集合,每個文件1個動作)的單個動作,你的意思是做一個添加+修改的動作。

1

-p--patch將暫存區域與您的工作樹進行比較,並使您可以僅將文件的某些部分與完整文件本身進行比較。如果您想將文件更改分割爲獨立的提交,而不是一個大的提交,這個交互式命令特別有用。但是,如果你的文件沒有被跟蹤,這是沒有意義的,因爲它不是你工作樹的一部分。因此不會有任何變化。 add是一個多功能命令。如果在文件是工作樹的一部分之前使用git add一次,它將按預期工作。

使用git add後,運行git add -p實際上會向您顯示diff,併爲您提供多種選擇。

Stage this hunk [y,n,q,a,d,/,e,?]? 

這些選項的手冊頁的一點提取。

  • Ÿ - 階段這個大塊頭
  • n - 不舞臺這個大塊頭
+0

你爲什麼要解釋'git add -p'是如何工作的? OP已經意識到它是如何工作的,但是對如何將它用於新的,以前未分檔的文件感興趣。 – poke

+0

我想如果他知道git add -p是如何工作的,他不需要問這個問題。你甚至引用了文檔。 –

+0

@poke請注意,修改後的文件中有更多選項可用,而不是增加一個。 (@see's'(split)) – axelduch

相關問題