Apa konsep utama HEAD, master, origin?

197

Ketika saya belajar tentang git, saya terus menemukan istilah HEAD, master, origin, dan saya tidak yakin apa perbedaannya. Jika saya mengerti benar, KEPALA selalu sama dengan revisi terbaru? Dan jika demikian, apakah itu revisi terbaru dari seluruh repositori, atau cabang atau tag tertentu? Ini sangat membingungkan. Saya telah membaca begitu banyak tutorial tentang hal ini dan hal-hal seperti percabangan / penggabungan, tetapi masih tidak dapat membungkus kepala saya di sekitarnya.

pengguna779159
sumber

Jawaban:

232

Saya sangat merekomendasikan buku "Pro Git" oleh Scott Chacon . Luangkan waktu dan benar-benar membacanya, sambil menjelajahi git repo yang sebenarnya seperti yang Anda lakukan.

KEPALA : komit saat repo Anda aktif. Sebagian besar waktu HEADmenunjuk ke komit terbaru di cabang Anda saat ini, tetapi itu tidak harus menjadi masalah. HEADbenar-benar hanya berarti "apa repo saya saat ini menunjuk".

Dalam hal komit HEADmerujuk bukan ujung cabang apa pun, ini disebut "kepala terpisah".

master : nama cabang default yang dibuat git untuk Anda saat pertama kali membuat repo. Dalam kebanyakan kasus, "master" berarti "cabang utama". Kebanyakan toko memiliki semua orang yang ingin menguasai, dan master dianggap sebagai pandangan pasti dari repo. Tetapi itu juga umum untuk cabang rilis dibuat dari master untuk melepaskan. Repo lokal Anda memiliki cabang master sendiri, yang hampir selalu mengikuti master repo jarak jauh.

origin : nama default yang diberikan git ke repo jarak jauh utama Anda. Kotak Anda memiliki repo sendiri, dan Anda kemungkinan besar mendorong ke beberapa repo jarak jauh yang Anda dan rekan kerja Anda dorong. Repo jarak jauh itu hampir selalu disebut asal, tetapi tidak harus begitu.

HEADadalah gagasan resmi di git. HEADselalu memiliki makna yang jelas. masterdan originmerupakan nama umum yang biasanya digunakan di git, tetapi tidak harus demikian.

Matt Greer
sumber
Apa yang Anda maksud dengan "KEPALA benar-benar hanya berarti" apa repo saya saat ini menunjuk pada "." Jika ada beberapa cabang dalam repositori, yang mana yang merupakan HEAD menurut Anda? jika ada 3 cabang (bersama dengan master), dan komit kebutuhan dibuat di branchA, HEAD masih bisa di komit dari 'master'. Jadi, revisi mana yang ditunjuk repo sekarang?
OK999
2
tidak jelas apa yang Anda maksud dengan repo (lokal atau jarak jauh). Secara umum jawaban Anda menggunakan ekspresi, tanpa menjelaskannya sebelumnya.
Saya baru saja melakukan klon di direktori paralel untuk membandingkan direktori kerja saya dengan ujung repo jarak jauh. Ini adalah seberapa bagus semua jawaban git.
@ Jing Dia membaca seluruh buku? Apakah ini benar-benar layak? Maksud saya, kita berbicara tentang 500+ halaman aneh yang dibaca, yang sepertinya terlalu banyak bagi saya ...
Maks
1
Untuk memverifikasi bahwa saya memahami logika, saya dapat memanggil cabang di remote sebagai featureA dan ketika saya mendorong ke cabang itu, saya mengetik "git push origin featureA". Saya dapat menarik yang sama dari jarak jauh juga dengan mengatakan "git pull originationA", membuat perubahan. Dan head hanya mengacu pada salinan lokal. @ OK999 Saya percaya KEPALA menunjuk ke cabang mana pun yang Anda periksa saat ini di lokal. Jika komit dibuat di branchA tetapi saat ini Anda berada di branchB, HEAD menunjuk ke branchB. Anda harus memindahkan HEAD ke branchA kembali sebelum Anda melakukan commit tertentu.
TLee
43

HEADbukan revisi terbaru, ini revisi saat ini . Biasanya, ini revisi terbaru dari cabang saat ini, tetapi tidak harus begitu.

master adalah nama yang biasa diberikan kepada cabang utama, tetapi bisa disebut hal lain (atau mungkin tidak ada cabang utama).

originadalah nama yang biasa diberikan ke remote utama. remote adalah repositori lain yang dapat Anda tarik dan dorong ke. Biasanya ada di beberapa server, seperti github.

svick
sumber
1
Bisakah Anda memberi contoh kapan HEAD terkini tetapi tidak terbaru? Saya belum pernah melihat itu sebelumnya. Atau maksud Anda itu mungkin bukan yang terbaru karena cabang Anda berada di belakang cabang terpencil yang dilacak?
Matt Greer
12
@MattGreer: Jika Anda melihat sesuatu yang lebih tua (seperti tag seperti git checkout v1.1) maka KEPALA Anda berubah menjadi komit tag itu. Ini mungkin bukan komitmen terbaru.
Greg Hewgill
8

Meskipun ini tidak langsung menjawab pertanyaan, ada buku bagus yang tersedia gratis yang akan membantu Anda mempelajari dasar-dasar yang disebut ProGit . Jika Anda lebih suka versi kayu mati untuk koleksi bit Anda dapat membelinya dari Amazon .

Piotr Perak
sumber
9
Pertanyaannya tidak meminta buku! Masih belum jelas bagi saya, mengapa saya membutuhkan buku untuk git, ketika saya tidak membutuhkannya untuk C ++.
13
Anda hanya berpikir bahwa Anda tidak memerlukan buku untuk C ++;)
Piotr Perak