2011-02-09 26 views
38

Nếu tôi đã thực hiện nhiều tập hợp thay đổi cho một tệp lớn, bạn có thể chia các tập hợp đó thành các cam kết riêng biệt bằng git không?Chia nhỏ nhiều thay đổi thành các cam kết riêng biệt với git?

+0

Có thể trùng lặp [Làm cách nào để chia nhỏ cam kết nhỏ hơn với Git ?] (http://stackoverflow.com/questions/2118042/how-to-split-a-commit-into-smaller-commits-with-git). –

+2

Ngoài ra, nó không rõ ràng nếu những thay đổi đã được cam kết hay không. Nếu họ đã cam kết trong một số cam kết, 'rebase --interactive' là con đường để đi. Nếu không, 'git add --patch' là một trong các tùy chọn bạn nên xem xét. –

Trả lời

64

Bạn muốn git add --patch, điều này sẽ cho phép bạn chọn những thay đổi nào đối với sân khấu.

+4

Tại sao lại là downvote? git add -i là overkill nếu tất cả những gì bạn muốn là chọn hunks, vì tùy chọn đầu tiên bạn sẽ chọn từ menu -i là 'p' (hoặc 5), vì vậy bạn có thể cũng đã nhảy thẳng vào nó với - vá. –

+8

Thực sự, một downvote khác không có lời giải thích? Nếu bạn tin rằng có điều gì đó sai trái với 'git add --patch', vui lòng có lịch sự để cung cấp giải thích tại sao. –

+1

Tôi nghĩ rằng các downvotes (không phải từ tôi!) Là từ dân gian đã cam kết, nơi mà câu trả lời này sẽ không hoạt động. Câu hỏi không cho biết liệu các thay đổi có được thực hiện hay không. – mikemaccana

16

Có, bạn có thể - sử dụng git add -i để chọn những khối bạn muốn hiển thị cho mỗi lần commit. Bạn có thể nhận tài liệu bằng cách chạy git help add và cuộn đến "Chế độ tương tác".

1

Williams answer hoàn toàn hợp lệ. Nhưng đôi khi nó dễ dàng hơn để làm việc bằng tay. Ví dụ: nếu bạn vô tình cập nhật một số thư viện của bên thứ ba với nhiều tệp trước khi thực hiện các thay đổi bạn đã thực hiện trước đó. Với git add -p (giống như --patch), bạn sẽ cần phải đi qua tất cả các tệp này. Vì vậy, trong trường hợp này, việc thuận tiện hơn cho giai đoạn mà bạn muốn cam kết và thực hiện cam kết thứ hai với tất cả các thay đổi khác:

> git add /path/to/your/file.txt 
> git commit -m "my commit message" 
[master a0c5ea6] my commit message 
1 file changed, 2 insertions(+), 1 deletion(-) 
> git add --all 
> git commit -m "updated library xyz" 
+5

Thực ra,' git add -p' cho phép bạn chọn tệp cụ thể tại dòng lệnh và trong phiên tương tác, bạn có thể nhảy đến một hunk cụ thể bằng cách sử dụng 'g', hoặc tìm kiếm một hunk phù hợp với một regex bằng cách sử dụng'/'. Điểm của 'add -p' là chọn các khối từ một tệp, nhưng giải pháp được đề xuất này yêu cầu thêm toàn bộ tệp, đó không phải là những gì mà OP muốn. –

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