2013-01-24 36 views
58

Khi tôi chạy git add -p, có cách nào để git chọn các tệp mới được tạo làm hunks để chọn không ??'git add --patch' để bao gồm các tệp mới?

Vì vậy, nếu tôi tạo một tệp mới có tên foo.java, thì hãy chạy git add -p, git sẽ không cho phép tôi chọn nội dung của tệp đó được thêm vào chỉ mục.

Trả lời

9

Để làm điều này với tất cả các tập tin mới, bạn có thể chạy:

git add -N . 
git add -p 

Nếu bạn muốn sử dụng nó thường xuyên, bạn có thể tạo một bí danh trong ~/.bashrc của bạn:

alias gapan='git add --intent-to-add . && git add --patch' 

NB: Nếu bạn sử dụng điều này với một e Tệp mới mpty, git sẽ không thể vá và chuyển sang tệp tiếp theo.

86

Khi tôi thử dùng git add -p someNewFile.txt trên tệp mới (tệp không được theo dõi), git sẽ chỉ xuất ra No changes. và dừng. Tôi đã phải nói với git rằng tôi dự định theo dõi các tập tin mới đầu tiên.

git add -N someNewFile.txt 
git add -p 

Tuy nhiên, vì tệp không được theo dõi, nó sẽ hiển thị dưới dạng một đoạn khổng lồ không thể tách rời được (vì nó hoàn toàn mới!). Vì vậy, sau đó tôi cần phải chỉnh sửa hunk thành bit nhỏ hơn. Nếu bạn không quen với điều đó, hãy kiểm tra this reference để bắt đầu.

Cập nhật - Thông tin chỉnh sửa thư Tôi muốn cập nhật điều này trong trường hợp tham chiếu ở trên biến mất. Vì tệp mới không được tải xuống, git add -p sẽ hiển thị mọi dòng trong tệp dưới dạng dòng mới trong một đoạn. Sau đó nó sẽ hỏi bạn những gì bạn muốn làm gì với hunk rằng, cho bạn nhanh chóng sau:

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

Giả sử rằng bạn không muốn cam kết toàn bộ hunk (và do đó, toàn bộ tập tin, bởi vì tôi không chắc chắn lý do tại sao bạn muốn sử dụng git add -p trong trường hợp đó?), bạn sẽ muốn chỉ định tùy chọn e để nói với git rằng bạn muốn chỉnh sửa nội dung.

Khi bạn nói với git rằng bạn muốn chỉnh sửa đoạn, nó sẽ thả bạn vào trình soạn thảo lựa chọn của bạn để bạn có thể thực hiện thay đổi. Tất cả các dòng phải được bắt đầu bằng một + và git có một số nhận xét giải thích (bắt đầu bằng một #) ở cuối tệp. Chỉ cần xóa bất kỳ dòng nào bạn không muốn trong cam kết ban đầu của tệp. Sau đó lưu và thoát khỏi trình chỉnh sửa.

giải thích Git của tùy chọn hunk git:

y - stage this hunk 
n - do not stage this hunk 
q - quit; do not stage this hunk or any of the remaining ones 
a - stage this hunk and all later hunks in the file 
d - do not stage this hunk or any of the later hunks in the file 
g - select a hunk to go to 
/- search for a hunk matching the given regex 
j - leave this hunk undecided, see next undecided hunk 
J - leave this hunk undecided, see next hunk 
k - leave this hunk undecided, see previous undecided hunk 
K - leave this hunk undecided, see previous hunk 
s - split the current hunk into smaller hunks 
e - manually edit the current hunk 
? - print help 
+1

Vui lòng trả lời câu hỏi này một cách tóm tắt. –

+3

Tóm lại, 'git add -N someNewFile.txt' theo sau bởi' git add -p' – CatShoes

1

Ngoài ra còn có một cách tiếp cận tận dụng rất giống nhau của --cached cờ ...

1) Rẽ thay đổi unstaged của bạn vào dàn dựng, giống như bạn đã thêm tệp.

git add edited-file.txt 
git add new-file.txt 
git add directory-of-changes/ 

2) Xem xét khác biệt (lưu ý: bạn có thể bao gồm cả chỉnh sửa và tệp mới).

git diff --cached 

3) Tạo bản vá.

git diff --cached > my_patch_file.patch 
+0

Thật không may là sẽ không hoàn thành mục đích tương tự. Những gì tôi thích về 'git add -p' là nó không thêm mọi thứ, nhưng hãy để tôi chọn và chọn những gì tôi muốn thêm vào. Giải pháp này sẽ mù quáng thêm mọi thứ. –

+0

Bạn có thể chọn những gì bạn thêm vào! Tôi sẽ cập nhật câu trả lời. – doublejosh

+1

cảm ơn bạn: allthethings: điều này làm việc đáng kinh ngạc cho tôi – macool

2

git add -p thực sự là về việc thêm thay đổi vào các tệp đã theo dõi.

Lệnh để chọn tương tác tệp để thêm là git add -i. Ví dụ:

$ git add -i 

*** Commands *** 
    1: status 2: update 3: revert 4: add untracked 
    5: patch 6: diff  7: quit  8: help 
What now> a 
    1: another-new.java 
    2: new.java 
Add untracked>> 2 
    1: another-new.java 
* 2: new.java 
Add untracked>> 
added one path 

*** Commands *** 
    1: status 2: update 3: revert 4: add untracked 
    5: patch 6: diff  7: quit  8: help 
What now> q 
Bye. 
$ git status 
On branch master 
Changes to be committed: 
    (use "git reset HEAD <file>..." to unstage) 

     new file: new.java 

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

     another-new.java 

(Lệnh thực có màu sắc mà tôi không thể cắt-và-dán ở đây, do đó, nó đẹp hơn có vẻ như)

Trên thực tế, p atch lệnh của git add -i làm giống như git add -p, vì vậy phần thứ hai là tập hợp con đầu tiên (mặc dù tôi thừa nhận rằng tôi yêu thích số add -p và ghét chính mình add -i!).

+0

"Tôi thừa nhận tôi yêu add -p và ghét add -i bản thân mình!" Đây là lý do tại sao git add sau đó vá là giải pháp tôi yêu thích: Nó vẫn cho phép bạn kiểm tra nội dung của các tệp mới mà bạn đang thêm (vì bạn so sánh chúng với phiên bản trống) và vá tệp bạn đã chỉnh sửa! –

Các vấn đề liên quan