Dalam Git, apa perbedaan antara origin / master vs master asal?

290

Saya tahu, asal adalah istilah untuk repositori jarak jauh dan master adalah cabang di sana.

Saya sengaja menghilangkan "konteks" di sini dan saya berharap jawabannya tidak tergantung pada konteksnya. Jadi pada command line git, apa perbedaan antara origin / master dan origin master . Apakah ada cara yang tidak ambigu untuk memahami kapan harus menggunakan asal / master dan kapan saya harus menggunakan master asal ?

Senthil Kumaran
sumber

Jawaban:

390

Sebenarnya ada tiga hal di sini: origin masterada dua hal yang terpisah, dan origin/mastersatu hal. Tiga hal total.

Dua cabang:

  • master adalah cabang lokal
  • origin/masteradalah cabang jarak jauh (yang merupakan salinan lokal dari cabang bernama "master" pada remote bernama "asal")

Satu remote:

  • origin adalah remote

Contoh: tarik dalam dua langkah

Karena origin/mastermerupakan cabang, Anda dapat menggabungkannya. Berikut ini dua langkah menarik:

Langkah satu, ambil masterdari remote origin. The masterpada cabang originakan diambil dan salinan lokal akan diberi nama origin/master.

git fetch origin master

Kemudian Anda menggabungkan origin/masterke dalam master.

git merge origin/master

Kemudian Anda dapat mendorong perubahan baru Anda masterkembali ke origin:

git push origin master

Lebih banyak contoh

Anda dapat mengambil beberapa cabang dengan nama ...

git fetch origin master stable oldstable

Anda dapat menggabungkan beberapa cabang ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290
Dietrich Epp
sumber
5
Bagian pertama sangat berguna. Saya tidak bisa menghubungkan bagaimana lebih banyak contoh, terutama yang menggabungkan berlaku. Terima kasih atas jawabannya.
Senthil Kumaran
1
... karena ketika saya "git checkout asal / master" saya masuk ke keadaan kepala terpisah. Jika saya memang memiliki salinan lokal cabang master jarak jauh, mengapa saya tidak bisa bekerja dan berkomitmen dan menambahkannya? Atau mungkin saya bisa, tetapi mengapa itu terlepas?
stu
3
Anda hanya dapat melakukan ke cabang lokal, jadi ketika Anda memeriksa cabang jarak jauh, Anda mendapatkan "kepala terpisah". Tentu saja, ini adalah salinan lokal dari cabang jarak jauh, tetapi masih merupakan cabang terpencil. Tidak ada aturan bahwa "master" terkait dengan "asal / master" sama sekali, mereka bisa sangat berbeda.
Dietrich Epp
7
@ Jwan622 "asal adalah remote" ... "asal" hanyalah sebuah nama, Anda dapat memilih nama untuk remote tetapi "asal" adalah nama default. Remote adalah repositori di tempat lain. Bisa jadi GitHub atau bisa juga komputer yang berbeda atau bahkan bisa juga di tempat lain di komputer yang sama.
Dietrich Epp
2
@ Jwan622: "git remote add" adalah perintah yang membuat remote baru. "origin" adalah nama yang ditambahkan oleh remote. Karena "asal" hanyalah nama, Anda dapat memilih nama yang berbeda jika diinginkan. Sebagai contoh, git remote add home my-server:projects/my-projectmenambahkan remote bernama "home". Anda mungkin ingin membaca dokumentasi: git-scm.com/docs/git-remote
Dietrich Epp
16

origin/masteradalah entitas (karena itu bukan cabang fisik) yang mewakili keadaan mastercabang pada remote origin.

origin masteradalah cabang masterpada remote origin.

Jadi kita punya ini:

  • origin / master (Representasi atau pointer ke cabang jarak jauh)
  • master - ( cabang aktual )
  • <Your_local_branch> ( cabang sebenarnya )
  • <Your_local_branch2> ( cabang sebenarnya )
  • <Your_local_branch3> ( cabang sebenarnya )

Contoh (di cabang lokal master):

git fetch # get current state of remote repository
git merge origin/master # merge state of remote master branch into local branch
git push origin master # push local branch master to remote branch master
Femaref
sumber
24
Ini tidak benar ... origin masterbukan cabang ... itu sebenarnya dua hal yang terpisah, "asal" (remote) dan "master" (cabang lokal).
Dietrich Epp
Keadaan cabang master jarak jauh, hadir secara lokal, kan?
Senthil Kumaran
4
ya ini salah origin/masteradalah cabang master jarak jauh. Cabang lokal hanya master.
Aniket Thakur
5

origin/masteradalah mastercabang jarak jauh

Biasanya setelah melakukan a git fetch originuntuk membawa semua perubahan dari server, Anda akan melakukan git rebase origin/master, untuk rebase perubahan Anda dan memindahkan cabang ke indeks terbaru. Di sini, origin/mastermerujuk ke cabang jarak jauh, karena pada dasarnya Anda memberi tahu GIT untuk rebase origin/mastercabang ke cabang saat ini.

Anda akan menggunakannya origin mastersaat mendorong, misalnya. git push origin masterhanya memberitahu GIT untuk mendorong ke repositori jarak jauh mastercabang lokal .

Raul Rene
sumber
1
Ini tampaknya benar-benar paling dekat dengan apa yang dicari OP - origin mastermemberitahu perangkat lunak untuk melakukan sesuatu dengan apa pun yang ada di 'master' dalam repositori 'asal'. origin/masteradalah referensi dengan cara yang sama f3a4d5atau HEAD.
Nemesarial
4

origin adalah nama untuk remote git url. Ada banyak lagi contoh remote di bawah ini.

bangalore => bangalore.example.com:project.git

boston => boston.example.com:project.git

sejauh asal / master (contoh bangalore / master) berjalan, itu adalah penunjuk ke "master" yang melakukan di situs bangalore . Anda melihatnya di klon Anda.

Mungkin bangalore terpencil telah maju sejak Anda melakukan "ambil" atau "tarik"

forvaidya
sumber
2

Mengingat fakta bahwa Anda dapat beralih ke origin/master(meskipun dalam kondisi terpisah) saat kabel jaringan Anda dicabut, itu harus merupakan representasi lokal dari mastercabang di origin.

Martin
sumber
Dalam jawaban di atas dan di bawah, orang mengatakan asal / master adalah cabang master jarak jauh. Jawaban Anda agak bertentangan dengan apa yang mereka katakan. Tolong jelaskan.
Luna Lovegood