2012-01-05 34 views
45

Giả sử tôi có một nhánh chủ đề riêng được gọi là phát triển với 2 cam kết trước chủ nhân.Điều gì sẽ xảy ra khi tôi làm chủ gốc git pull trong nhánh phát triển?

git pull origin master làm gì?

Kéo mọi thứ từ chủ từ xa vào địa phương phát triển và hợp nhất? Kéo mọi thứ trong nhánh chủ cục bộ và hợp nhất nó?

Và có cách nào để cập nhật tổng thể từ phát triển mà không cần git checkout master trước tiên không?

Trả lời

72

git pull origin master kéo nhánh chính từ xa được gọi là nguồn gốc vào nhánh hiện tại của bạn. Nó chỉ ảnh hưởng đến chi nhánh hiện tại của bạn, không ảnh hưởng đến chi nhánh chính tại địa phương của bạn.

Nó sẽ cung cấp cho bạn lịch sử tìm kiếm một cái gì đó như thế này:

- x - x - x - x (develop) 
    \  /
    x - x - x (origin/master) 

ngành thạc sĩ địa phương của bạn là không thích hợp trong việc này. git pull về bản chất là sự kết hợp của git fetchgit merge; nó lấy nhánh từ xa rồi trộn nó vào nhánh hiện tại của bạn. Đó là một sự hợp nhất như bất kỳ thứ gì khác; nó không làm bất cứ điều gì huyền diệu.

Nếu bạn muốn cập nhật chi nhánh chính tại địa phương, bạn không còn cách nào khác ngoài kiểm tra. Không thể hợp nhất vào một chi nhánh không được kiểm tra, bởi vì Git cần một cây làm việc để thực hiện hợp nhất. (Đặc biệt, nó là hoàn toàn cần thiết để báo cáo xung đột hợp nhất và cho phép bạn giải quyết chúng.)

Nếu bạn tình cờ biết rằng việc kéo vào tổng thể sẽ tiến nhanh (tức là bạn không có cam kết trong tổng thể địa phương của bạn chi nhánh không có trong văn bản gốc) bạn có thể làm việc xung quanh, as described in this answer.

+1

Bạn có thể đẩy vào chi nhánh không được kiểm tra tại địa phương nếu chi nhánh chuyển tiếp nhanh. Nhưng đó là một hack;) – knittl

+0

@knittl: Đúng vậy! Đẩy là thanh lịch ở chỗ nó kiểm tra xem nó có thể chuyển tiếp nhanh cho bạn hay không. Tôi thích giải pháp 'update-ref' vì bạn có thể để lại dấu vết đúng trong các reflog, và tôi bị ám ảnh như thế. – mrj

+0

@ e-satis: Khuyến khích người dùng mới bỏ phiếu cho các câu hỏi là tuyệt vời ... nhưng đáng trả lời và đáng được coi là không phải là điều tương tự. (Mặc dù câu hỏi của bạn là cả hai.) – Cascabel

3

Khi bạn cam kết bạn chuyển thành chi nhánh của bạn bằng cách sử dụng

git add -A 
git commit -m <message> 

Sau đó, bạn có thể làm:

git pull origin master 

thành chi nhánh của bạn và điều đó sẽ giữ cam kết của bạn trên đầu trang của các bậc thầy kéo. Chi nhánh của bạn giờ đây sẽ trở thành chủ nhân + các cam kết của bạn ở trên cùng. Vì vậy, bây giờ bạn có thể làm:

git push 

và git sẽ đẩy các thay đổi của bạn, cùng với thầy cam kết vào chi nhánh của bạn. Bạn có thể dễ dàng sau đó hợp nhất vào master trên Github.

+0

đây là một bổ sung tốt nếu đọc sau câu trả lời của @ mrj. Chủ yếu là chúng tôi đang trong công việc tương tự khi kéo – kushalvm

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