2012-06-21 38 views
16

Sau khi lấy từ xa sử dụng git fetch, chúng ta cần phải sử dụng một cái gì đó giống nhưgit merge origin/master làm gì?

git merge origin/master 

Tôi muốn biết nếu lệnh này cũng làm git commit cùng một lúc? Đơn đặt hàng origin/master có quan trọng không? Tôi có thể viết master/original không?

+0

Bạn thực sự phải tự làm việc thông qua [Sách] (http://git-scm.com/book/en/Git-Branching-Remote-Branches). – kostix

Trả lời

8

Việc này sẽ kết hợp chi nhánh được gọi là nguồn gốc/chủ vào chi nhánh hiện tại của bạn. Đơn đặt hàng là rất quan trọng. Từ nguồn gốc là nơi mà bạn đã sao chép kho lưu trữ của mình, tức là nguồn gốc của kho lưu trữ, từ master chỉ là tên chi nhánh, tuy nhiên chính thường được sử dụng làm nhánh chính hoặc chi nhánh trunk như một số hệ thống khác gọi nó.

Hợp nhất có thể cần thực hiện cam kết tùy thuộc vào trạng thái phát triển của bạn. Nếu lịch sử của bạn không tách rời khỏi nguồn gốc, nó có thể thực hiện những gì được gọi là nhanh về phía trước --- tất cả những gì cần làm là đặt lịch sử mới lên trên đầu trang của bạn. Nếu sự phát triển của bạn đã tách ra khỏi nguồn gốc thì nếu hợp nhất có thể được thực hiện mà không có xung đột thì việc hợp nhất được thực hiện và một cam kết mới được ghi lại tại HEAD để xác định hợp nhất và hai cha mẹ. Hơn nữa, nếu việc sáp nhập không thể thực hiện được do xung đột, bản sao làm việc của bạn được cập nhật để phản ánh thực tế là có xung đột, khi bạn khắc phục chúng, bạn thực hiện cam kết ghi lại hợp nhất theo cách thủ công.

+0

Câu trả lời của bạn không chính xác ở hai nơi.Đầu tiên: "_merges nhánh hiện tại của bạn với nhánh được gọi là origin/master_" là không chính xác, vì 'origin/master' được hợp nhất thành ** nhánh hiện tại. Hoặc có lẽ đây là sự mơ hồ tôi thấy ở nơi này, sau đó xin vui lòng làm rõ. Thứ hai, 'git merge' ** thực hiện cam kết ** trong một số trường hợp (ví dụ: khi không được thông báo rõ ràng để không thực hiện chúng và khi hợp nhất có thể được thực hiện theo kiểu chuyển tiếp nhanh. – Tadeck

+0

Vâng, đó là ý của tôi, tôi có Bạn có nói rằng một tiến nhanh về phía trước thực sự giống như một cam kết? Tôi đã theo ấn tượng rằng một tiến nhanh hơn giống như nối lịch sử phát triển mới trên đầu trang của riêng bạn – Jarryd

+0

Xem điều này: http: //www.kernel.org/pub/software/scm/git/docs/git-merge.html#_description - đặc biệt là dòng này: "_ (...)' git merge topic' sẽ phát lại các thay đổi được thực hiện trên ' chi nhánh topic' kể từ khi nó phân tách từ 'master' (...) cho đến khi commit hiện tại của nó trên đầu trang của' master', và ** ghi lại kết quả trong một commit mới ** cùng với tên của hai commit cha và log tin nhắn từ người dùng mô tả các thay đổi_ ". Tôi tin rằng điều này là khá rõ ràng. Nó ** không ** thực hiện cam kết (trừ khi một số xung đột được phát hiện và bạn cần phải giải quyết nó đầu tiên). – Tadeck

19

git merge origin/master có thể thực hiện một trong hai điều (hoặc lỗi).

Trong trường hợp đầu tiên, nó tạo ra một cam kết mới có hai cha mẹ: HEAD hiện tại và cam kết được chỉ định bởi ref origin/master (trừ khi bạn đang làm điều gì đó vui nhộn, đây có thể là (con trỏ cục bộ đến) chi nhánh có tên master trên điều khiển từ xa có tên origin, mặc dù điều này hoàn toàn thông thường).

Trong trường hợp thứ hai, khi không có phối cảnh cấp cây cần thiết, thay vì tạo một cam kết mới, nó cập nhật ref hiện được kiểm tra để trỏ đến cùng một cam kết như được chỉ dẫn bởi origin/master. (Điều này được gọi là nhanh chóng chuyển tiếp hợp nhất - git có thể được chuyển hướng đến việc luôn luôn hoặc không bao giờ thực hiện điều này khi bạn hợp nhất thông qua cờ dòng lệnh).

Nó không gọi trực tiếp số git commit, đó là lệnh cấp cao hơn (sứ trong lệnh git-parlance) dành cho người dùng.

Calling git merge master/original sẽ cố gắng và giải quyết master/original đến một cam kết, mà sẽ gần như chắc chắn (một lần nữa, trừ khi bạn đã làm điều gì đó cố ý) không được giống như origin/master. Nếu bạn tình cờ có một điều khiển từ xa có tên là master có một chi nhánh có tên là original, nó sẽ tạo một cam kết mới có đó là phụ huynh thứ hai.

Bạn có thể tìm thấy git help rev-parse để giúp giải mã cách git cố gắng giải quyết tên ref hoặc ký hiệu khác thành cam kết.

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