Hợp nhất với một cam kết cụ thể


373

Tôi đã tạo một nhánh mới có tên newbranchtừ masternhánh trong git. Bây giờ tôi đã thực hiện một số công việc và muốn hợp nhất newbranchvới master; tuy nhiên, tôi đã thực hiện một số thay đổi bổ sung newbranchvà tôi muốn hợp nhất newbranchvới cam kết thứ tư từ lần cuối cùng đến master.

Tôi đã sử dụng cherry-picknhưng nó hiển thị thông báo để sử dụng các tùy chọn đúng:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

Tôi có thể sử dụng git mergeđể làm điều đó thay vào đó?

git merge newbranch <commitid>

Câu trả lời:


593

Chắc chắn, ở trong masterchi nhánh tất cả những gì bạn cần làm là:

git merge <commit-id>

nơi commit-idbăm của cam kết cuối cùng newbranchmà bạn muốn nhận được trong masterchi nhánh của mình .

Bạn có thể tìm hiểu thêm về bất kỳ lệnh git nào bằng cách thực hiện git help <command>. Đó là trường hợp đó git help merge. Và các tài liệu đang nói rằng đối số cuối cùng cho mergelệnh là <commit>..., vì vậy bạn có thể chuyển tham chiếu đến bất kỳ cam kết hoặc thậm chí nhiều cam kết. Mặc dù, tôi không bao giờ làm sau này bản thân mình.


30
không chỉ một cam kết mà tất cả các cam kết trước đócommit-id
Dau

53
Vâng, nó sẽ hợp nhất tất cả các cam kết từ newbranchkể từ thời điểm lịch sử của nó tách ra từ masterlên đến commit-idthành masterchi nhánh. Bạn có thể nghĩ đến git merge <commit-id>việc hợp nhất một số chi nhánh không tên kết thúc với commit-idchi nhánh hiện tại của bạn.
KL-7

2
Tôi có thể hợp nhất giữa hai nhánh cục bộ không phải là master, sử dụng id id không?
skt

1
@skt, bạn có thể, chỉ cần ở chi nhánh địa phương mà bạn muốn hợp nhất trước khi sử dụng git merge. tức là bạn muốn hợp nhất cam kết 18a6fac từ nhánh b2 thành nhánh b1 chỉ cần làmgit checkout b1; git merge 18a6fac
XioRcaL

1
Điều này dường như KHÔNG hoạt động, Nếu tôi ở một nhánh tôi muốn hợp nhất vào và có một số nhánh khác có các xác nhận AB và C, và tôi hợp nhất trong C, nó chỉ nhận được các thay đổi được thực hiện trong C, không phải A và B.
ggb667

12

Để giữ cho nhánh sạch, bạn có thể làm điều này:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

Bằng cách này, newbranch sẽ kết thúc tại nơi nó được hợp nhất thành chủ và bạn tiếp tục làm việc trên newbranch2.


1

Chạy lệnh bên dưới vào thư mục nhánh hiện tại để hợp nhất từ <commit-id>nhánh này sang nhánh hiện tại, --no-commitkhông tự động thực hiện một cam kết mới

git merge --no-commit <commit-id>

git merge --continue chỉ có thể được chạy sau khi hợp nhất đã dẫn đến xung đột.

git merge --abort Hủy bỏ quá trình giải quyết xung đột hiện tại và cố gắng xây dựng lại trạng thái hợp nhất trước.

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.