2011-11-19 43 views
119

Khi tôi đang học về git, tôi tiếp tục xem các thuật ngữ HEAD, master, origin, và tôi không chắc sự khác biệt là gì. Nếu tôi hiểu đúng, HEAD luôn bằng phiên bản mới nhất? Và nếu có, đó là bản sửa đổi mới nhất của toàn bộ kho lưu trữ, hoặc của một chi nhánh hoặc thẻ cụ thể? Điều này rất khó hiểu. Tôi đã đọc rất nhiều hướng dẫn về điều này và những thứ như phân nhánh/hợp nhất, nhưng vẫn không thể quấn đầu của tôi xung quanh nó.Các khái niệm git của HEAD, master, origin là gì?

Trả lời

154

Tôi rất khuyên bạn nên đọc sách "Pro Git" by Scott Chacon. Hãy dành thời gian và thực sự đọc nó, trong khi khám phá một repo git thực tế như bạn làm.

HEAD: hiện tại cam kết repo của bạn đang bật. Phần lớn thời gian HEAD trỏ đến cam kết mới nhất trong chi nhánh của bạn, nhưng điều đó không phải là trường hợp. HEAD thực sự chỉ có nghĩa là "repo của tôi hiện trỏ đến" là gì.

Trong trường hợp cam kết HEAD đề cập đến không phải là đầu của bất kỳ nhánh nào, điều này được gọi là "đầu tách rời".

master: tên của nhánh mặc định mà git tạo cho bạn khi tạo repo lần đầu tiên. Trong hầu hết các trường hợp, "master" có nghĩa là "nhánh chính". Hầu hết các cửa hàng có tất cả mọi người đẩy để làm chủ, và chủ được coi là quan điểm dứt khoát của repo. Nhưng nó cũng phổ biến cho các nhánh phát hành được tạo ra từ master để phát hành. Repo địa phương của bạn có nhánh chính của riêng nó, hầu như luôn luôn theo chủ của một repo từ xa.

nguồn gốc: tên mặc định mà git cung cấp cho repo từ xa chính của bạn. Hộp của bạn có repo riêng của nó, và bạn rất có thể đẩy ra một số repo từ xa mà bạn và tất cả đồng nghiệp của bạn thúc đẩy. Đó là repo từ xa gần như luôn luôn được gọi là nguồn gốc, nhưng nó không phải là.

HEAD là khái niệm chính thức về git. HEAD luôn có ý nghĩa rõ ràng. masterorigin là các tên thường được sử dụng trong git, nhưng chúng không nhất thiết phải như vậy.

+0

Ý bạn là gì bởi "HEAD thực sự chỉ có nghĩa là" repo của tôi hiện trỏ đến "." Nếu có nhiều nhánh trong kho, cái nào là HEAD theo bạn? nếu có 3 nhánh (cùng với master), và một cam kết cần phải được thực hiện trong branchA, HEAD có thể vẫn còn trong cam kết của 'master'. Vì vậy, cái nào là bản sửa đổi mà repo đang chỉ vào lúc này? – OK999

31

HEAD không phải là bản sửa đổi mới nhất, đây là phiên bản hiện tại. Thông thường, đó là bản sửa đổi mới nhất của chi nhánh hiện tại, nhưng nó không nhất thiết phải như vậy.

master là tên thường được đặt cho chi nhánh chính, nhưng nó có thể được gọi là bất kỳ thứ gì khác (hoặc có thể không có nhánh chính).

origin là tên thường được cung cấp cho điều khiển từ xa chính. từ xa là một kho lưu trữ khác mà bạn có thể kéo và đẩy đến. Thông thường nó trên một số máy chủ, như github.

+0

Bạn có thể đưa ra ví dụ về thời điểm HEAD là hiện tại nhưng không phải là mới nhất? Tôi chưa bao giờ thấy điều đó trước đây. Hoặc bạn có nghĩa là nó có thể không phải là mới nhất bởi vì chi nhánh của bạn là đằng sau các chi nhánh từ xa nó theo dõi? –

+9

@MattGreer: Nếu bạn kiểm tra một cái gì đó cũ hơn (chẳng hạn như một thẻ như 'git checkout v1.1') thì HEAD của bạn sẽ thay đổi thành cam kết của thẻ đó. Nó có thể không phải là cam kết mới nhất. –

10

Trong khi điều này không trực tiếp trả lời câu hỏi, có sách tuyệt vời miễn phí sẽ giúp bạn tìm hiểu các khái niệm cơ bản được gọi là ProGit. Nếu bạn muốn phiên bản gỗ chết đến một bộ sưu tập các bit, bạn có thể mua nó từ Amazon.

+3

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. – nha

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