我創建了一個新文件foo.rb
。爲什麼`git add -p`沒有處理未跟蹤的文件?
$ git add -p foo.rb
$ No changes.
然而,沒有添加作品-p
。這是一個錯誤還是一個功能? 我期望它能讓我演示文件的一部分。
我創建了一個新文件foo.rb
。爲什麼`git add -p`沒有處理未跟蹤的文件?
$ git add -p foo.rb
$ No changes.
然而,沒有添加作品-p
。這是一個錯誤還是一個功能? 我期望它能讓我演示文件的一部分。
git add --patch
被證明是這樣的:
這有效地運行
add --interactive
,但旁路初始命令菜單並直接跳轉到patch子命令。
而且git add --interactive
被描述爲只添加修改變化:在工作樹交互
添加修改內容索引。
因此不,這種行爲是有目的的。
無論如何,使用補丁添加新文件並沒有多大意義,因爲整個文件添加是一個單獨的塊,可以分階段或不分階段(或者您必須手動編輯補丁)。所以它不是git add foo.rb
。
你可以懸停添加一個空文件使用git add --intent-to-add file
或git add -N file
簡而言之。這會爲該文件名分配一個空文件,因此下次運行git add -p
時,該文件已知,並提供了一個真正的補丁。
您正在執行的操作是添加一個新文件,此操作的唯一撤銷操作是刪除,這適用於整個文件,因爲-p
允許您應用部分臨時操作,所以無法在您的情況下執行操作。
記住提交是文件(或文件集合,每個文件1個動作)的單個動作,你的意思是做一個添加+修改的動作。
-p
或--patch
將暫存區域與您的工作樹進行比較,並使您可以僅將文件的某些部分與完整文件本身進行比較。如果您想將文件更改分割爲獨立的提交,而不是一個大的提交,這個交互式命令特別有用。但是,如果你的文件沒有被跟蹤,這是沒有意義的,因爲它不是你工作樹的一部分。因此不會有任何變化。 add
是一個多功能命令。如果在文件是工作樹的一部分之前使用git add
一次,它將按預期工作。
使用git add
後,運行git add -p
實際上會向您顯示diff
,併爲您提供多種選擇。
Stage this hunk [y,n,q,a,d,/,e,?]?
這些選項的手冊頁的一點提取。
- Ÿ - 階段這個大塊頭
- n - 不舞臺這個大塊頭
如果你執行'git add foo.rb'然後'git reset -p foo.rb',會發生什麼?我懷疑會發生這種情況,因爲該文件以前從未被跟蹤過,所以它無法取消某些無法修改的內容,因爲它尚未實際添加。 – axelduch