Một câu hỏi khác cho biết git pullcũng giống như một git fetch+ git merge.
Nhưng sự khác biệt giữa git pullVS git fetch+ là git rebasegì?
Một câu hỏi khác cho biết git pullcũng giống như một git fetch+ git merge.
Nhưng sự khác biệt giữa git pullVS git fetch+ là git rebasegì?
Câu trả lời:
Có một điều khá rõ ràng từ câu hỏi của bạn rằng bạn thực sự chỉ đang hỏi về sự khác biệt giữa git mergevà git rebase.
Vì vậy, giả sử bạn đang ở trong trường hợp phổ biến - bạn đã thực hiện một số công việc trên nhánh chính của mình và bạn lấy từ nguồn gốc, cũng đã thực hiện một số công việc. Sau khi tìm nạp, mọi thứ trông như thế này:
- o - o - o - H - A - B - C (master)
\
P - Q - R (origin/master)
Nếu bạn hợp nhất tại thời điểm này (hành vi mặc định của git pull), giả sử không có bất kỳ xung đột nào, bạn sẽ kết thúc với điều này:
- o - o - o - H - A - B - C - X (master)
\ /
P - Q - R --- (origin/master)
Mặt khác, nếu bạn thực hiện rebase thích hợp, bạn sẽ kết thúc với điều này:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
Nội dung của cây công việc của bạn sẽ kết thúc giống nhau trong cả hai trường hợp; bạn vừa tạo ra một lịch sử khác nhau dẫn đến nó . Rebase viết lại lịch sử của bạn, làm cho nó trông như thể bạn đã cam kết trên nhánh chính mới của nguồn gốc ( R), thay vì nơi bạn đã cam kết ban đầu ( H). Bạn không bao giờ nên sử dụng phương pháp rebase nếu người khác đã rút khỏi nhánh chính của bạn.
Cuối cùng, lưu ý rằng bạn thực sự có thể thiết lập git pullcho một nhánh nhất định để sử dụng rebase thay vì hợp nhất bằng cách đặt tham số cấu hình branch.<name>.rebasethành true. Bạn cũng có thể làm điều này cho một lần kéo bằng cách sử dụng git pull --rebase.
git pullcũng giống như chạy git fetchsau đó git merge
git pull --rebaselà như git fetchsau đógit rebase
git pullgiống như một git fetch+ git merge.
"Trong chế độ mặc định của nó, git pull là tốc ký được
git fetchtheo sau bởigit mergeFETCH_HEAD" Chính xác hơn,git pullchạygit fetchvới các tham số đã cho và sau đó gọigit mergeđể hợp nhất các đầu nhánh được truy xuất vào nhánh hiện tại "
(Tham khảo: https://git-scm.com/docs/git-pull )
'Nhưng sự khác biệt giữa git pullVS git fetch+ git rebase' là gì?
Một lần nữa, từ cùng một nguồn:
git pull --rebase
"Với --rebase, nó chạy git rebase thay vì git merge."
'sự khác biệt giữa mergevà rebase'
điều đó cũng được trả lời ở đây:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(sự khác biệt giữa việc thay đổi lịch sử phiên bản được ghi lại)
git fetch + git rebaselàm việc của các lệnh từ bây giờ. Không có ít nhiều xung đột trên cây git của chúng tôi kể từ bây giờ :)