Một câu hỏi khác cho biết git pull
cũng giống như một git fetch
+ git merge
.
Nhưng sự khác biệt giữa git pull
VS git fetch
+ là git rebase
gì?
Một câu hỏi khác cho biết git pull
cũng giống như một git fetch
+ git merge
.
Nhưng sự khác biệt giữa git pull
VS git fetch
+ là git rebase
gì?
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 merge
và 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 pull
cho 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>.rebase
thà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 pull
cũng giống như chạy git fetch
sau đó git merge
git pull --rebase
là như git fetch
sau đógit rebase
git pull
giống như một git fetch
+ git merge
.
"Trong chế độ mặc định của nó, git pull là tốc ký được
git fetch
theo sau bởigit merge
FETCH_HEAD" Chính xác hơn,git pull
chạygit fetch
vớ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 pull
VS 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 merge
và 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 rebase
là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ờ :)