2010-08-04 50 views
74

Tôi chỉ mới bắt đầu sử dụng GIT và nghĩ rằng nó tuyệt vời, tuy nhiên tôi hơi bối rối về những gì lệnh merge thực hiện.Hợp nhất 2 chi nhánh với nhau trong GIT

Giả sử chúng tôi có một dự án đang hoạt động trong nhánh "A".

Tôi về nhà và thực hiện các thay đổi cho chi nhánh này và lưu nó thành "B". Một lập trình viên khác thực hiện các thay đổi đối với "A" và lưu thành "C".

Có cách nào hợp nhất hai chi nhánh "B" và "C" lại với nhau không, sau đó cam kết thay đổi làm chi nhánh mới, nói "D"?

Hoặc thiếu điểm 'hợp nhất'?

+0

không cần phải 'lưu thay đổi' trong một nhánh khác. làm việc một A và sau đó hợp nhất những A khác nhau với nhau – knittl

+0

Tôi không làm theo. A sẽ được trên máy tính địa phương của tôi, dev1 sẽ có một bản sao của A trên máy tính của mình, và dev2 có một bản sao của A trên máy tính của mình. Cả hai nhà phát triển thực hiện thay đổi, làm cách nào để hợp nhất các thay đổi này với nhau? – dotty

+0

xem . các nhà phát triển có thể cần phải đẩy/tải lên kho lưu trữ của họ ở đâu đó đầu tiên – knittl

Trả lời

127

merge được sử dụng để kết hợp hai (hoặc nhiều) nhánh lại với nhau.

một chút ví dụ:

# on branch A: 
# create new branch B 
$ git checkout -b B 
# hack hack 
$ git commit -am "commit on branch B" 

# create new branch C from A 
$ git checkout -b C A 
# hack hack 
$ git commit -am "commit on branch C" 

# go back to branch A 
$ git checkout A 
# hack hack 
$ git commit -am "commit on branch A" 

vì vậy bây giờ có ba chi nhánh riêng biệt (cụ thể là AB và C) với người đứng đầu khác nhau

để có được những thay đổi từ B và C trở về A, kiểm tra A (đã được thực hiện trong ví dụ này) và sau đó sử dụng lệnh hợp nhất:

# create an octopus merge 
$ git merge B C 

lịch sử của bạn sau đó sẽ giống như thế này:

…-o-o-x-------A 
     |\  /| 
     | B---/ | 
     \ /
     C---/ 

nếu bạn muốn hợp nhất qua biên giới kho lưu trữ/máy tính, hãy xem lệnh git pull, ví dụ: từ máy tính có nhánh A (ví dụ này sẽ tạo hai cam kết mới):

# pull branch B 
$ git pull ssh://host/… B 
# pull branch C 
$ git pull ssh://host/… C 
+0

Tôi gặp lỗi "xung đột nội dung" khi hợp nhất các chi nhánh. – dotty

+0

có nghĩa là cả hai nhánh đã thay đổi cùng một đoạn mã. sửa các conflitcs, 'git add conflicting_files' và sau đó' git commit' – knittl

+0

Nói tập tin trong A chứa từ "hello", A sửa đổi nó thành "HELLO" và B sửa đổi nó thành "Hello world". Điều gì sẽ là kết quả của việc sáp nhập các tệp này? – dotty

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