git - áp dụng một cam kết trên một nhánh khác vào bản sao làm việc


81

vì vậy tôi có một cam kết có một thay đổi mã hữu ích, nhưng trên một nhánh khác.

Tôi muốn áp dụng cam kết này trong nhánh khác vào bản sao làm việc của tôi trên nhánh hiện tại của tôi (không phải như một cam kết khác).

Điều này có khả thi không? Làm thế nào tôi sẽ làm điều này?

Tôi nghĩ rằng tôi muốn chia sẻ điều này có liên quan đến câu hỏi trước đây của tôi nhưng dành riêng cho bản sao làm việc: git cherry hái một cam kết đến một nhánh khác


Câu trả lời:


137

Cách thêm (các) cam kết mong muốn vào các nhánh khác nhau.

git cherry-pick <SHA-1>...<SHA-1> --no-commit

Áp dụng thay đổi được giới thiệu bởi (các) cam kết ở đầu nhánh chính và tạo (các) cam kết mới với thay đổi này.

Cú pháp của ...là một phạm vi cam kết. lấy tất cả các cam kết từ đầu (loại trừ) đến cuối cùng. Nếu bạn muốn một cam kết sử dụng một SHA-1 duy nhất

nhập mô tả hình ảnh ở đây


cherry-pick không cam kết

Theo mặc định, git cherry-pick cam kết các thay đổi của bạn, vì vậy nếu bạn muốn chọn anh đào mà không thực hiện tất cả các thay đổi, chỉ cần thêm -ncờ

Điều này sẽ cho phép bạn xem lại các thay đổi và cam kết chúng theo cách thủ công nếu bạn muốn hoặc hủy bỏ nếu bạn gặp quá nhiều xung đột.

git cherry-pick -n <hash>

cherry-pick một cam kết hợp nhất

Trong trường hợp bạn cần chọn một hợp nhất thay vì một cam kết, hãy sử dụng -mcờ

#
# In this case, we select the [1] first parent in the commit
# Use git show <hash> to see a list of available parents
# 
git cherry-pick -m 1 <hash> 

Đọc tài liệu đầy đủ git cherry-pickđể biết tất cả các tùy chọn bạn có thể sử dụng


3
Cảm ơn! Đối với cả văn bản rõ ràng và được định dạng tốt và sơ đồ quyến rũ. Nếu bạn viết một cuốn sách, tôi sẽ mua nó ;-)
Spike0xff

1
Câu hỏi đề cập rõ ràng "không phải là một cam kết khác" trong khi câu trả lời của bạn đề cập rõ ràng "tạo một cam kết mới với thay đổi này". Tôi đang thiếu gì?
Amn

3
bạn đang thiếu lá cờ không có cam kết
CodeWizard

Đó thậm chí làm việc cho các cam kết từ xa miễn là kho lưu trữ cục bộ của bạn biết về họ (thực hiện git fetch remoteđể làm mới)
sberder

24

Bạn vẫn có thể sử dụng git cherry-picklệnh. Xem git cherry-pick --help:

   -n, --no-commit
       Usually the command automatically creates a sequence of
       commits. This flag applies the changes necessary to
       cherry-pick each named commit to your working tree and the
       index, without making any commit. In addition, when this
       option is used, your index does not have to match the HEAD
       commit. The cherry-pick is done against the beginning state
       of your index.

Vì vậy, bạn có thể chỉ cần git cherry-pick -n <commitid>và các thay đổi sẽ được áp dụng cho thư mục làm việc của bạn và được sắp xếp trong chỉ mục (như git -a), nhưng sẽ không được cam kết.


2
Tôi chấp nhận câu trả lời khác chỉ vì sơ đồ và thông tin bổ sung, nhưng bài đăng của bạn vẫn rất hữu ích. Cảm ơn!
Oliver Williams
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.