2010-02-25 20 views
23

Tôi có một tệp nguồn nơi đã thêm 2 tính năng. Để cho phép chọn cherry, tôi muốn cam kết trong 2 giai đoạn: một cho mỗi tính năng. Cho đến bây giờ, trong các tình huống tương tự, sử dụng git add -p phục vụ tôi tốt, để cam kết một tính năng trong khi rời khỏi các tệp cục bộ ở giai đoạn cuối cùng của chúng.Làm thế nào để chỉnh sửa Git "thêm miếng vá" hunks/diffs/dòng trong dàn dựng chọn lọc?

Tuy nhiên, hiện tại tôi gặp sự cố khi git add -p muốn đưa vào một đoạn bao gồm các chỉnh sửa cho cả hai tính năng. Mặc dù các chỉnh sửa nằm trên các dòng riêng biệt, s (đối với "tách") không còn muốn chia nhỏ thành từng phần nhỏ hơn nữa ...

Tóm lại: Tôi không thể tách riêng các thay đổi cho 2 tính năng theo cách này . Có cách nào để tự chỉnh sửa các bản vá, ví dụ bằng cách sử dụng vi, mà không thực sự thay đổi tập tin gốc?

+1

Một phần vấn đề của tôi là tôi có thể không nghĩ đến đúng thuật ngữ, để tìm kiếm trong Google. – bart

+0

Bạn có thể tìm thấy hướng dẫn chi tiết về cách chỉnh sửa các bản vá lỗi theo cách thủ công tại [tài liệu chính thức của git add - EDITING PATCHES] (https://www.kernel.org/pub/software/scm/git/docs/git-add.html#_editing_patches) . –

Trả lời

24

Như Alan nói, chỉnh sửa bản vá bằng cách nhấn e (thay vì s) trong thời gian git add -p. Thao tác này sẽ khởi chạy trình chỉnh sửa của bạn với phần bản vá đó để bạn có thể chỉnh sửa nó theo cách thủ công. Có các nhận xét bên trong văn bản giải thích cách loại bỏ các sửa đổi đúng cách và nó thực sự khá dễ dàng.

Khi bạn hoàn tất, lưu ý rằng bạn có thể kiểm tra nó chỉ với những thay đổi bạn vừa thêm bằng cách thực hiện git stash --keep-index. Những thay đổi bạn không thêm vào chỉ mục sẽ được lưu trữ và bạn hiện được tự do kiểm tra các thay đổi mà bạn sắp cam kết. Khi hoàn tất, chỉ cần git stash pop hoặc git stash apply để nhận lại các thay đổi khác.

+0

Cảm ơn thông tin bổ ích hữu ích ... – bart

+0

Nếu bạn thấy mình đang làm 'git stash --keep-index' thường xuyên,' git stash -k' sẽ làm tương tự, và tiết kiệm thời gian cho bạn. – Ryan

5

Bạn có thể chỉnh sửa bản vá bằng cách nhấn e trong một git add -p. Nó sẽ không ảnh hưởng đến tập tin gốc.

+0

git trả lời với 'Huh (e)?'. Có lẽ phiên bản của tôi hơi cũ? (Mặc dù tôi chỉ có nó trong 2 tuần và đó là cổng chính thức cho CentOS ...) – bart

+0

Sửa, sai pha 'git add -i'. Tại dấu nhắc cho những gì để làm với hunk, git chỉ đơn giản là bỏ qua "e" của tôi. – bart

+0

"e" không làm gì cả. git --version nói 1.5.5.6. Cái đó quá cũ à? – bart

6

Giống như những người khác đã nói, bạn có thể sử dụng e để chỉnh sửa nội dung bạn muốn chia nhỏ.

Để chỉ thêm một phần của đoạn, bạn có thể xóa các dòng khỏi thay đổi bạn muốn tách ra.

+Line 1 
+Line 2 
+Line 3 

Cho phép nói rằng bạn muốn giữ Line 1 và Line 3 trong một cam kết và Dòng 2 trong một cam kết khác. Tất cả những gì bạn phải làm là xóa Dòng 2:

+Line 1 
+Line 3 

Điều này sẽ đặt Dòng 1 và Dòng 3 trong khu vực dàn dựng của bạn. Dòng 2 sẽ vẫn được lập chỉ mục nhưng không được phân đoạn.

0

Tôi thường nhận được xung đột hợp nhất từ ​​git stash pop được mô tả trong câu trả lời của @ Dan. Xem git stash and edited hunks để biết giải pháp tránh xung đột.

1

Có GUI Git cho phép bạn chọn các dòng riêng lẻ mà bạn muốn hiển thị, cho phép bạn tách các đường mà thông thường bạn sẽ không thể sử dụng số git add --patch thông thường từ dòng lệnh.

Hai GUIs đó là:

  1. SourceTree.
  2. Git Cola.
Các vấn đề liên quan