2010-10-06 23 views
6

Giả sử bạn có chi nhánh master và một chi nhánh khác production, cả hai đều chứa phiên bản của tệp prog.py, cũng như nhiều tệp khác. Hãy tưởng tượng rằng bạn sửa đổi nhiều tệp trong chi nhánh sản xuất, bao gồm prog.py. Bây giờ, cách tốt nhất để chỉ có một số thay đổi được thực hiện trên prog.py trong chi nhánh production nào được áp dụng cho phiên bản của nó trong chi nhánh master?Git: Cách tốt nhất để chỉ thêm một số phần của tệp từ một chi nhánh khác?

tôi bắt đầu di chuyển đến chi nhánh master và nhập khẩu các tập tin từ các chi nhánh production:

git checkout master 
git checkout production -- prog.py 

vì tôi đã hy vọng để có thể làm git add -p và chọn thay đổi bằng tay. Vấn đề là prog.py là cả hai trong cây làm việc và trong chỉ mục. Làm thế nào tôi có thể loại bỏ nó khỏi chỉ mục mà không cần chạm vào cây đang hoạt động?

Hoặc có cách nào tốt hơn để chọn những thay đổi nào trong prog.py phải được nhập từ chi nhánh production vào chi nhánh master?

Trả lời

17

Tôi không chắc chắn nếu điều này là sự thật khi câu hỏi này được hỏi, nhưng với một phiên bản hiện tại của git bạn có thể làm như sau:

git checkout -p production -- prog.py 

và bạn sẽ nhận được cùng một tương tác hunk-picker bạn làm cho hầu hết các lệnh -p.

+0

Xin cảm ơn! Tôi đã thay đổi câu trả lời được chấp nhận từ tôi thành của bạn, vì bạn là một phương pháp hiệu quả hơn. – EOL

4

Thực hiện các cam kết nhỏ và chi tiết mà chỉ thực hiện một việc, sau đó sau đó chọn các thay đổi bạn muốn ở chi nhánh khác bằng cách sử dụng git cherry-pick $commit_id có vẻ như là một cách tiếp cận hợp lý.

+0

Cảm ơn. Cherry-pick có cho phép bạn thay đổi lựa chọn anh đào * trong * một tệp không? – EOL

+1

Nó cam kết lựa chọn anh đào, mà bạn chắc chắn có thể sửa đổi sau này nếu nó chỉ ra bạn đã không làm cam kết của bạn như chi tiết như bạn có thể đã muốn. ví dụ. 'git reset HEAD ~ 1', và' git add -p', và 'git commit -c $ commit_id', – rafl

1

Được rồi, tôi vừa thử git reset và đã xóa các thay đổi được lưu trữ trong chỉ mục. git add -p sau đó hoạt động như mong đợi, cho phép người dùng chọn các thay đổi riêng lẻ sẽ được áp dụng (tức là được lưu trữ trong chỉ mục). Sau đó, các thay đổi không mong muốn có thể bị hủy với git commit và sau đó là git reset --hard.

Hy vọng câu hỏi và câu trả lời này sẽ được người khác quan tâm! :)

PS: Tôi đã đánh dấu câu trả lời này là câu trả lời vì nó kiểm tra một tệp đơn, như được hỏi trong câu hỏi gốc.

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