2012-04-05 36 views
6

Đây là kịch bản. Tôi đã tạo ra một nhánh "dev" ngoài nhánh "master" và thực hiện một vài commit mới. Một số thay đổi đó sẽ chỉ liên quan đến máy phát triển địa phương của tôi. Ví dụ tôi đã thay đổi một biến URL để trỏ đến một máy chủ apache địa phương thay vì URL thực được đăng trực tuyến (tôi đã làm điều này cho tốc độ trong giai đoạn thử nghiệm). Bây giờ tôi muốn kết hợp các thay đổi của tôi từ nhánh dev vào nhánh master nhưng KHÔNG những thay đổi đó chỉ có ý nghĩa trong môi trường cục bộ của tôi.Cách hợp nhất các nhánh trong Git bằng "hunk"

Tôi đã hình dung ra một thứ gì đó như một hợp nhất --patch cho phép tôi chọn các thay đổi mà tôi muốn hợp nhất từng dòng.

Hoặc có thể tôi có thể thanh toán chi nhánh "chính", nhưng giữ các tệp trong thư mục làm việc của tôi giống như trong nhánh "dev", sau đó thực hiện lệnh git add --patch. Liệu điều đó có hiệu quả?

Trả lời

2

Có thể bạn có thể thử một cái gì đó như thế này?

git merge --squash --no-commit $YOUR_OTHER_BRANCH 
git reset HEAD 
git add -p 
git commit 
+0

lưu ý rằng --squash ngụ ý --không cam kết, kể từ git mới nhất, dù sao, – CharlesB

6

Một cách tiếp cận là hợp nhất các thay đổi từ chi nhánh khác, nhưng loại bỏ nội dung cụ thể về phát triển trước khi thực hiện hợp nhất.

Trước tiên, hãy nhận các thay đổi mà không cam kết với git merge --no-ff --no-commit dev.

Xóa các thay đổi phát triển cụ thể bằng cách chỉnh sửa các tệp bị ảnh hưởng và git add nhập chúng hoặc git reset HEAD các tệp bị ảnh hưởng và sau đó git add --patch các phần bạn muốn.

Sau đó, hãy hợp nhất. Một lợi thế của việc thực hiện một cam kết hợp nhất là việc sáp nhập trong tương lai sẽ không đau. Bởi vì các cam kết phát triển cụ thể được coi là sáp nhập, các hợp nhất trong tương lai không liên quan đến các phần phát triển cụ thể có thể được thực hiện với một đơn giản git merge dev. Bằng cách này, bạn có thể vô thời hạn duy trì một chi nhánh riêng biệt với cấu hình riêng của nó trong khi vẫn không thể sáp nhập các thay đổi vào nhánh chính.

+0

Điều đó dường như không hoạt động. Tôi tryped git merge --no-commit dev và quay lại: "Cập nhật 91a6696..056b567 Tua đi nhanh". Vì vậy, sau đó tôi gõ git reset HEAD và git add --patch và nó nói "không có thay đổi". – asolberg

+0

Ah, xin lỗi về điều đó, tôi đã không lường trước được sự hợp nhất nhanh về phía trước. Hãy thử với lệnh được cập nhật bao gồm '--no-ff'. Điều đó sẽ buộc hợp nhất cam kết được tạo ra, mặc dù không thực sự cam kết. – blahdiblah

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