2012-04-27 33 views

Trả lời

7

git pull --rebase là cách để đi khi bạn muốn đưa chi nhánh phát triển của bạn cập nhật - những nhánh này thường không được xuất bản cho những người khác (ngoại trừ có thể xem nó) để ghi lại lịch sử không phải là vấn đề và bạn thực sự không muốn hợp nhất vv trong một chi nhánh như vậy.

git merge thực hiện hợp nhất; xem manpage để biết chi tiết - comand có rất nhiều tùy chọn sẽ là quá nhiều để giải thích ở đây.

git rebase thực hiện rebase, tức là ghi lại lịch sử. Nó sẽ đưa các cam kết của bạn đến điểm mà chúng phân tách từ nhánh khác, loại bỏ chúng tạm thời, áp dụng các cam kết còn thiếu từ nhánh kia và sau đó áp dụng lại các cam kết của bạn. git rebase cũng có một chế độ tương tác, nơi bạn có thể loại bỏ/sửa đổi/kết hợp (bí) một số cam kết nhất định.

Hãy xem http://learn.github.com/p/rebasing.html để biết một số đồ thị đẹp về cách hoạt động của các lần rebases.

+0

Lưu ý: git 2.8 (tháng 3 năm 2016) sẽ cho phép lệnh 'git pull --rebase = interactive'. Xem http://stackoverflow.com/a/29717607/6309. – VonC

6

git rebase cho phép bạn tách chi nhánh khỏi điểm mà nó đã phân kỳ và cắm lại trên đầu nhánh khác. git merge thay vào đó chỉ cần hợp nhất các thay đổi từ một nhánh khác trong nhánh hiện tại, mà không cần cắm lại lịch sử.

Nếu không có xung đột, kết quả là giống hệt nhau giữa hợp nhất và rebase, nhưng lịch sử là khác nhau:

(merge branch on master): 
master --A--B--C--E 
       /
branch   --D 

(rebase branch onto master): 
master  --A--B--C--D' 

Trong trường hợp đầu tiên hợp nhất tạo ra các chi nhánh branch được sáp nhập vào master, dẫn đến việc tạo ra cam kết hợp nhất, E. Trong trường hợp thứ hai, D chỉ đơn giản là cắm lại vào master, tạo anther commit, D'.

git pull --rebase sẽ tìm nạp các thay đổi từ điều khiển từ xa và rebase (cắm lại) thay đổi của bạn trên đầu trang. Nó theo nghĩa đen sẽ ghi lại những thay đổi bạn đã thực hiện mà không phải trên điều khiển từ xa và phát lại chúng bắt đầu từ thay đổi cuối cùng mà nó vừa tải xuống.

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