Git Pull và Git Rebase


123

Tôi là một Noob trong Git, và cố gắng tìm hiểu sự khác biệt giữa git pullvs git rebase. Ai đó có thể cung cấp một ví dụ khi sử dụng tùy chọn nào vì tôi cảm thấy rằng cả hai đều phục vụ cùng một mục đích.


Vâng, tôi đã làm. Sự khác biệt giữa pull và rebase là pull thực hiện hợp nhất. Vì vậy, câu trả lời cho câu hỏi của bạn là ở liên kết tôi đã dán.
Thibault D.

1
@ user4943236. tài liệu
Tim

1
Có thể có bản sao của 'git merge' và 'git rebase' là gì?
SiGe

Điều này có trả lời câu hỏi của bạn không? git pull VS git fetch Vs git rebase
Shiwangini

Câu trả lời:


130

git pullgit rebasekhông thể thay thế cho nhau, nhưng chúng được kết nối chặt chẽ với nhau.

git pulltìm nạp những thay đổi mới nhất của nhánh hiện tại từ điều khiển từ xa và áp dụng những thay đổi đó vào bản sao cục bộ của nhánh. Nói chung điều này được thực hiện bằng cách hợp nhất, tức là các thay đổi cục bộ được hợp nhất vào các thay đổi từ xa. Vì vậy, git pulltương tự với git fetch & git merge.

Rebasing là một giải pháp thay thế cho việc hợp nhất. Thay vì tạo một cam kết mới kết hợp hai nhánh, nó di chuyển các cam kết của một trong các nhánh lên trên nhánh kia.

Bạn có thể kéo bằng cách sử dụng rebase thay vì merge ( git pull --rebase). Các thay đổi cục bộ bạn đã thực hiện sẽ được hoàn nguyên trên các thay đổi từ xa, thay vì được hợp nhất với các thay đổi từ xa.

Atlassian có một số tài liệu tuyệt vời về hợp nhất và phục hồi .


51

git-pull - Tìm nạp từ và tích hợp với một kho lưu trữ khác hoặc một chi nhánh cục bộ GIT PULL

Về cơ bản, bạn đang kéo chi nhánh từ xa đến cục bộ của mình, ví dụ:

git pull origin master

Sẽ kéo nhánh chính vào kho lưu trữ cục bộ của bạn

git-rebase - Forward-port local cam kết với đầu ngược dòng được cập nhật GIT REBASE

Đây là cách đặt các thay đổi cục bộ của bạn lên trên các thay đổi được thực hiện từ xa bởi những người dùng khác. Ví dụ:

  • Bạn đã thực hiện một số thay đổi trên chi nhánh địa phương của mình, chẳng hạn như SOME-FEATURE
  • Trong thời gian chờ đợi, bạn của bạn đang làm việc trên các tính năng khác và anh ấy đã hợp nhất chi nhánh của mình thành chính

Bây giờ bạn muốn xem những thay đổi của anh ấy và của bạn trên chi nhánh địa phương của bạn. Vì vậy, sau đó bạn thanh toán masternhánh:

git checkout master

thì bạn có thể kéo:

git pull origin master

và sau đó bạn đi đến chi nhánh của mình:

git checkout SOME-FEATURE

và bạn có thể thực hiện rebase masterđể nhận những thay đổi mới nhất từ ​​nó và đặt cam kết chi nhánh của bạn lên hàng đầu:

git rebase master

Tôi hy vọng bây giờ nó rõ ràng hơn một chút cho bạn.


15
Bạn không cần phải kiểm tra tổng thể. Ở trên chi nhánh của bạn và làm: git fetchsau đó git rebase origin/master.
Antoine Martin

Bằng cách kiểm tra bản gốc cục bộ và sau đó kéo bản gốc gốc cũng sẽ cập nhật bản gốc cục bộ của bạn. Đây là một trong những phương pháp hay nhất nên được sử dụng
Ashwani

20

Tóm lại:

-> Git Merge: Nó sẽ đơn giản hợp nhất các thay đổi của bạn và từ xa, và điều đó sẽ tạo ra một bản ghi lịch sử cam kết khác

-> Git Rebase: Nó sẽ đặt các thay đổi của bạn lên trên tất cả các thay đổi từ xa mới và viết lại lịch sử cam kết, vì vậy lịch sử cam kết của bạn sẽ gọn gàng hơn nhiều so với hợp nhất git. Rebase là một hoạt động phá hoại. Điều đó có nghĩa là, nếu bạn không áp dụng nó một cách chính xác, bạn có thể mất công việc đã cam kết và / hoặc phá vỡ tính nhất quán của kho lưu trữ của nhà phát triển khá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.