2010-02-01 29 views
9

Tôi thích sử dụng git add --patch (và gần đây hơn, git add -i) để gỡ rối các cam kết của tôi cũng như xác minh rằng những gì tôi cam kết là .Loại bỏ Hunk Tương tác với git add --patch

Thỉnh thoảng, tôi sẽ gặp một lỗi có thể là một câu lệnh ghi lỗi, một dòng mới bổ sung (thường là xoá dấu nhắc khai báo nói trên) - thứ mà tôi thực sự muốn xóa hoàn toàn.

Tôi không muốn lên sân khấu và tôi cũng chỉ muốn xóa nội dung được đề cập trong khi nó ở ngay trước mặt tôi (thay vì nhảy trở lại trình chỉnh sửa của tôi và thử lại). Tôi cũng muốn áp dụng thay đổi đối với tệp làm việc của mình.

Có cách nào để thực hiện việc này không?


Điều tôi đã xem xét là sử dụng chức năng chỉnh sửa đoạn.

Điều này, cùng với đề xuất hash được tạo bên dưới mang lại cho tôi luồng công việc đẹp hơn một chút so với hiện tại.

Tôi đồng ý rằng đó là sự vi phạm các mối quan ngại về tách rời của git add. OTOH nó sẽ rất thuận tiện; P Tôi nghe giống như sếp của tôi;)

+1

Hiện nay, câu trả lời là "không". Nó sẽ là chức năng tốt đẹp để có thể sử dụng add -i và liệt kê hunks, mặc dù. ví dụ, thay vì có/không cho mỗi hunk, bạn có thể tạo ra một chuỗi các bản vá lỗi, và sau đó cam kết sẽ nhắc nhở cho nhiều thông điệp tường trình. hoặc nếu bạn có một lựa chọn như 'giai đoạn/không có giai đoạn/stash' mỗi hunk, thay vì 'giai đoạn/không giai đoạn' hoặc 'stash/không stash' (thông qua stash -p) –

+0

Vâng, tôi nghĩ chung 'git add' không có ý định là một cách để chỉnh sửa các tệp cây công việc, mặc dù bạn đã đúng, nó sẽ rất tốt để có thể xử lý nó trong khi bạn đang ở đó. – Cascabel

+1

Điều tôi luôn nghĩ là sẽ rất tuyệt khi có 1-9 tùy chọn trong 'add -i'. Chọn '1' sẽ thêm phần tử vào cam kết đầu tiên, v.v. Điều đó sẽ hỗ trợ quy trình làm việc theo đó bạn có thể đặt tất cả các thay đổi nhận xét đó trong '1', đó là tính năng fizzbuzz trong' 2', vv và các khối bạn không muốn trong '9'. Tất cả trong một lần. Sau đó, chỉ cần loại bỏ cam kết cuối cùng. Bạn sẽ phải tìm ra cách để có được thông điệp cam kết trong đó, nhưng nó chắc chắn sẽ hữu ích. –

Trả lời

5

Tốt hơn sử dụng đặt lại HEAD cứng, sau khi cam kết tất cả các gói hợp lệ của bạn, bạn chỉ có thể git kiểm tra tệp để đặt lại thành những gì được ghi trong nhánh hiện tại. Bằng cách đó, nó không ảnh hưởng đến bất kỳ tệp nào khác.

0

Bạn có thể thêm vào chỉ mục bất cứ điều gì bạn muốn, cam kết, sau đó đặt lại HEAD cứng, sau đó những gì không có trong chỉ mục bị mất.

+0

Đây không phải là giải pháp thực sự. OP đề cập đến việc gỡ rối các cam kết, và do đó có khả năng có những sửa đổi mong muốn khác trong cây công việc mà một thiết lập lại/stash sẽ giết chết. – Cascabel

+0

Đó là những gì anh ta có thể làm để có được những gì anh ta muốn, không phải những gì anh ta muốn có thể làm, vâng. – hash

1

Có giải thích kỹ lưỡng về lý do tại sao git add không thực hiện điều này từ Git maintainer Junio ​​on the Git mailinglist để đáp ứng yêu cầu tính năng.

phiên bản ngắn của quá trình thay thế của mình:

# start from N-commit worth of change, debug and WIP 
git stash save -p debug ;# stash away only the debugging aid 
# now we have only N-commit worth of change and WIP 
git stash save -p wip ;# stash away WIP 

git add -p ;# prepare the index for the next commit 
git stash save -k ;# save away the changes for later commits 

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