Sự khác biệt giữa git pull --rebase và git pull --ff-only


102

Giả sử origin/mastercó cam kết A--B--Cvà của tôi local/mastercó cam kết A--B--D.

Điều gì sẽ xảy ra nếu tôi sử dụng git pull --rebase?

Điều gì sẽ xảy ra nếu tôi sử dụng git pull --ff-only?

Có sự khác biệt nào trong cây cam kết kết quả không?

Câu trả lời:


126

Điều gì sẽ xảy ra nếu tôi sử dụng git pull --rebase?

git pull --rebase gần tương đương với

git fetch
git rebase origin/master

tức là các thay đổi từ xa của bạn ( C) sẽ được áp dụng trước các thay đổi cục bộ ( D), dẫn đến cây sau

A -- B -- C -- D

Điều gì sẽ xảy ra nếu tôi sử dụng git pull --ff-only?

Nó sẽ thất bại.

git pull --ff-only tương ứng với

git fetch
git merge --ff-only origin/master

--ff-onlychỉ áp dụng các thay đổi từ xa nếu chúng có thể được tua đi nhanh. Từ người đàn ông:

Từ chối hợp nhất và thoát với trạng thái khác không trừ khi HEAD hiện tại đã được cập nhật hoặc việc hợp nhất có thể được giải quyết dưới dạng tua nhanh

Vì các chi nhánh địa phương và từ xa của bạn đã khác nhau, chúng không thể được giải quyết bằng cách tua nhanh và git pull --ff-onlysẽ thất bại.


Điều gì sẽ xảy ra nếu không có cam kết Dtrong thay đổi cục bộ? Cả hai lệnh sẽ tương đương nhau?
Nico

7
Có, cả hai đều sẽ dẫn đến A--B--C.
Gabriele Petronella

sẽ git pull --rebase --ff-onlylàm gì (giả sử có C & D)
Refael Ackermann

2
IIRC tùy chọn --ff-only chỉ đơn giản bị bỏ qua khi được ghép nối với --rebase
Gabriele Petronella

5
@BreakingBenjamin rất hữu ích nếu bạn muốn đảm bảo lịch sử tuyến tính. Theo mặc định, pullcó thể giới thiệu các cam kết hợp nhất, trong khi bạn có thể chỉ thích làm việc với rebase và ff.
Gabriele Petronella
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.