Các khái niệm git của CHÍNH, chủ, nguồn gốc là gì?


193

Khi tôi tìm hiểu về git, tôi tiếp tục tìm hiểu các thuật ngữ CHÍNH, chủ, nguồn gốc và tôi không chắc sự khác biệt là gì. Nếu tôi hiểu chính xác, HEAD luôn bằng với phiên bản mới nhất? Và nếu vậy, đó có phải là phiên bản 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ể không? Điều này thậ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 lấy đầu tôi.

Câu trả lời:


227

Tôi đánh giá cao cuốn sách "Pro Git" của Scott Chacon . 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.

TRƯỚC : cam kết hiện tại repo của bạn là trên. Hầu hết thời gian HEADchỉ đến cam kết mới nhất trong chi nhánh hiện tại của bạn, nhưng đó không phải là trường hợp. HEADthực sự chỉ có nghĩa là "những gì repo của tôi hiện đang chỉ vào".

Trong trường hợp cam kết HEADđề cập không phải là tiền boa của bất kỳ chi nhánh nào, đâ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 lần đầu tiên tạo repo. 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 đến 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ừ chủ để phát hành. Repo địa phương của bạn có chi nhánh chính của nó, hầu như luôn theo sau chủ của một repo từ xa.

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

HEADlà một khái niệm chính thức trong git. HEADluôn luôn có một ý nghĩa được xác định rõ. masteroriginlà tên phổ biến thường được sử dụng trong git, nhưng chúng không phải là.


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

2
không rõ ý của bạn bằng repo (cục bộ hoặc từ xa). Nói chung, câu trả lời của bạn sử dụng các biểu thức, mà không giải thích chúng trước đây.

Tôi chỉ thực hiện một bản sao trong một thư mục song song để so sánh thư mục làm việc của tôi với mẹo của repo từ xa. Đây là cách tốt tất cả các câu trả lời git.

@JingHe Bạn đọc toàn bộ cuốn sách? nó thật sự đáng giá thế sao? Ý tôi là chúng ta đang nói về hơn 500 trang đọc kỳ dị, điều đó có vẻ hơi quá đối với tôi ...
Tối đa

1
Để xác minh rằng tôi hiểu logic, tôi có thể gọi một nhánh trong điều khiển từ xa là FeatureA và khi tôi đẩy sang nhánh đó, tôi gõ "git push origin FeatureA". Tôi cũng có thể kéo tương tự từ xa bằng cách nói "git pull origin FeatureA", thực hiện thay đổi. Và đầu chỉ đề cập đến bản sao địa phương. @ OK999 Tôi tin rằng CHÍNH đang chỉ đến bất kỳ chi nhánh nào bạn được kiểm tra tại thời điểm này tại địa phương. Nếu cam kết được thực hiện trong nhánhA nhưng hiện tại bạn đang ở nhánhB, thì ĐẦU đang trỏ đến nhánhB. Bạn phải di chuyển TRƯỚC để phân nhánh trở lại trước khi bạn thực hiện một cam kết cụ thể.
TLee

43

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

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

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


1
Bạn có thể đưa ra một ví dụ về thời điểm 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 vì chi nhánh của bạn đứng sau chi nhánh từ xa mà nó đang theo dõi?
Matt Greer

12
@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ì CHÍNH của bạn 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.
Greg Hewgill

8

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


9
Câu hỏi không yêu cầu một cuốn sách! Tôi vẫn chưa rõ, tại sao tôi lại cần một cuốn sách cho git, khi tôi không cần một cuốn sách cho C ++.

11
Bạn chỉ nghĩ rằng bạn không cần một cuốn sách cho C ++;)
Piotr Perak
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.