2011-08-26 28 views
172

Tôi có một nhánh địa phương của một dự án ("configUpdate") mà tôi đã chia nhỏ từ dự án của người khác và tôi đã thực hiện một tải thay đổi và muốn hợp nhất những thay đổi mà họ đã thực hiện cho chi nhánh địa phương của tôi.Làm thế nào để kết hợp tổng thể từ xa với chi nhánh địa phương

Tôi đã thử

git pull --rebase origin configUpdate 

nhưng nó đã không nắm lấy những thay đổi mới nhất - làm thế nào tôi có thể hợp nhất hai? (Cũng cho điểm thưởng đã tôi phải làm gì với lệnh pull --rebase?)

+0

có thể trùng lặp của [Git: Hợp nhất một chi nhánh từ xa địa phương] (https://stackoverflow.com/questions/21651185/git-merge-a-remote-branch-locally) –

Trả lời

61

tôi phát hiện ra đó là:

$ git fetch upstream 
$ git merge upstream/master 
+6

Vì vậy, nếu bạn không tìm ra nó, 'pull --rebase' của bạn không hoạt động vì' origin' đang trỏ đến ngã ba của bạn. Nó sẽ làm việc nếu bạn đã làm 'git pull --rebase upstream/master'. –

+0

Hãy thử: git merge origin/master – Chris

264

Làm thế nào về (giả sử bạn đang ở chi nhánh configUpdate):

git fetch 
git rebase origin/master 

Tóm lại:

  • git merge branchname thực hiện các cam kết mới từ chi nhánh branchname và thêm chúng vào chi nhánh hiện tại. Nếu cần thiết, nó sẽ tự động thêm một cam kết "Hợp nhất" trên đầu trang.

  • git rebase branchname thực hiện các cam kết mới từ chi nhánh branchname và chèn chúng vào "thay đổi" của bạn. Chính xác hơn, nó sửa đổi lịch sử của nhánh hiện tại sao cho nó dựa trên đỉnh của branchname, với bất kỳ thay đổi nào bạn thực hiện trên đầu trang đó.

  • git pull về cơ bản giống như git fetch; git merge origin/master.

  • git pull --rebase về cơ bản giống như git fetch; git rebase origin/master.

Vậy tại sao bạn muốn sử dụng git pull --rebase thay vì git pull? Dưới đây là ví dụ đơn giản:

  • Bạn bắt đầu làm việc với tính năng mới.

  • Khi bạn sẵn sàng đẩy các thay đổi của mình, một số cam kết đã được các nhà phát triển khác đẩy lên.

  • Nếu bạn git pull (sử dụng hợp nhất), thay đổi của bạn sẽ được chôn bởi các cam kết mới, ngoài cam kết hợp nhất được tạo tự động.

  • Nếu bạn git pull --rebase thay vào đó, git sẽ nhanh chóng chuyển tiếp tổng thể của bạn tới thượng nguồn, rồi áp dụng các thay đổi của bạn ở trên cùng.

+0

Tôi đã làm điều này trên cành đúng nhưng tôi vẫn có thể thấy sự khác biệt giữa các tệp cục bộ của tôi và nhánh chủ từ xa của dự án gốc (mặc dù nó nói mọi thứ đã được cập nhật!) có lẽ tôi đã thiết lập dự án không chính xác? Bất kỳ cách nào để kiểm tra? – Martyn

+0

@ Martart: Sự khác biệt phải là thay đổi cục bộ của bạn. Thực hiện một nhánh khác của nhánh từ xa và kiểm tra xem nhánh đó có nội dung tệp chính xác hay không. – ZeissS

+1

Tôi biết đây là câu trả lời cũ, nhưng lưu ý rằng bạn có thể thích thực hiện MERGE thay vì trả lại. Bạn không muốn thực hiện rebase nếu sau này bạn phải hợp nhất vào một repo từ xa đã có một số thay đổi của bạn. –

27

Chuyển đến chi nhánh địa phương của bạn

> git checkout configUpdate

Merge thạc sĩ từ xa đến chi nhánh của bạn

> git rebase chủ configUpdate

Trong trường hợp bạn có bất kỳ mâu thuẫn, sửa chữa chúng và cho mỗi tập tin mâu thuẫn làm lệnh

> git add [path_to_file/conflicted_file] (ví dụ git add app/tài sản/Javascripts/test.js)

Tiếp tục rebase

> git rebase --continue

+0

đừng ngại sử dụng rebase thay vì hợp nhất dành thời gian điều tra sự khác biệt nếu bạn cảm thấy khoảng cách trong câu hỏi này –

+1

Cảm ơn rất nhiều. Quá trình này làm việc cho tôi. – Fortisimo

9

git rebase dường như không làm việc cho tôi. Sau khi git rebase, khi tôi cố gắng đẩy các thay đổi vào nhánh địa phương của mình, tôi đã nhận được một lỗi ("gợi ý: Các cập nhật bị từ chối bởi vì đầu của nhánh hiện tại của bạn nằm phía sau đối tác từ xa của nó. Tích hợp các thay đổi từ xa (ví dụ: 'git pull. .. ') trước khi đẩy lại. ") ngay cả sau khi git kéo. Điều cuối cùng làm việc cho tôi là git merge.

git checkout <local_branch> 
git merge <master> 

Nếu bạn là người mới bắt đầu như tôi, đây là bài viết tốt về git merge vs git rebase. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

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