Mengapa 'git branch' saya tidak memiliki master?

94

Saya seorang pemula yang git dan saya terus membaca tentang cabang "master". Apakah "master" hanya nama konvensional yang digunakan orang atau memiliki arti khusus HEAD?

Ketika saya melakukan git branchklon yang saya miliki, saya hanya melihat 1 cabang tunggal - yang saya gunakan. Tidak ada "master" sama sekali. Jika saya mengetik git checkout master(seperti yang saya lihat di banyak tutorial atau panduan), saya mengerti

error: pathspec 'master' did not match any file(s) known to git.

Saya hanya bingung mengapa klon saya tidak memiliki masteryang semua orang menyiratkan bahwa itu selalu ada.

aberrant80
sumber

Jawaban:

73

Sebagian besar repositori Git digunakan mastersebagai cabang utama (dan default) - jika Anda menginisialisasi repo Git baru melalui git init, itu akan masterdiperiksa secara default.

Namun, jika Anda mengkloning repositori, cabang default yang Anda miliki adalah apa pun yang HEADditunjukkan oleh remote ( HEADsebenarnya adalah referensi simbolis yang menunjuk ke nama cabang). Jadi jika repositori yang Anda kloning memiliki tujuan HEAD, katakanlah foo, maka klon Anda hanya akan memiliki foocabang.

Remote yang Anda kloning mungkin masih memiliki mastercabang (Anda dapat memeriksa git ls-remote origin master), tetapi Anda tidak akan membuat versi lokal dari cabang tersebut secara default, karena git clonehanya memeriksa remote HEAD.

Amber
sumber
6
Lalu bagaimana cara checkout master dari asal jika ada?
Bunyk
bagaimana Anda mengatur HEAD ke master
Matt Smith
32
Saya membuat repo saya dengan git init dan cabang master tidak dibuat. Dengan Github, cabang dibuat secara otomatis, tetapi tidak dengan Bitbucket. Langkah-langkah mising adalah: git add ., git commit -m "Test", kemudian git push -u origin master.
Shailen
12
@Amber Saya mendapatkan kesalahan ini "fatal: master: bukan SHA1 yang valid"
KK_07k11A0585
1
@Aber git ls-remote origin mastertidak menunjukkan apa-apa.
Parisa Khateri
86

Untuk memeriksa cabang yang tidak ada secara lokal tetapi dalam repo jarak jauh Anda dapat menggunakan perintah ini:

git checkout -t -b master origin/master
Bunyk
sumber
Terima kasih telah mencoba membantu, meskipun pertanyaan ini sudah cukup lama. Tapi jawabanmu bukanlah yang aku tanyakan.
aberrant80
fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre
Diperbaiki di github membuat cabang master dan pengaturan sebagai default
Raphael Onofre
45

master hanyalah nama sebuah cabang, tidak ada keajaiban tentangnya kecuali itu dibuat secara default ketika repositori baru dibuat.

Anda dapat menambahkannya kembali dengan git checkout -b master.

Matt Curtis
sumber
git checkout -b masterhanya menambahkan cabang baru dari yang sekarang untuk saya.
nnyby
1
@nnyby git checkout -b masterakan membuat mastercabang dari apa pun HEAD- jadi jika Anda berada di cabang lain, itu akan membuat mastercabang dari itu. Kecuali jika Anda sudah memiliki mastercabang (yang akan Anda lakukan, kecuali misalnya Anda telah menghapusnya atau tidak pernah berkomitmen padanya). Jika Anda sudah memiliki mastercabang, perintah ini hanya akan memberi Anda kesalahan.
Matt Curtis
2
Pertanyaan saya adalah: bagaimana saya secara tidak sengaja menghapus master?
Eric Walker
@EricWalker masterhanyalah sebuah cabang, yang dapat dihapus dengan git branch -d master. Meskipun git akan melindungi Anda dari menghapus cabang tempat Anda berada, tidak ada yang khusus melindungi mastercabang tersebut. Lebih khusus dari itu, sulit untuk mengatakan bagaimana Anda melakukannya. Mungkin Anda menggunakan historyperintah shell Anda untuk melihatnya?
Matt Curtis
1
Hai @MattCurtis, jawaban Anda saat ini menyesatkan. git checkout -b masterhanya akan bekerja jika HEAD disetel ke origin / master. Dalam kasus lain (misalnya Anda sedang 'mengembangkan'), git checkout -b masterakan membuat cabang bernama 'master' yang didasarkan pada posisi HEAD saat ini (misalnya dari 'berkembang'). Anda juga perlu menyatakan cabang mana yang akan menjadi kulit pohon untuk yang baru. @Bunyk memiliki jawaban yang benar di utas ini: stackoverflow.com/a/21330943/287109
AVIDeveloper
23

Saya sebenarnya memiliki masalah yang sama dengan repositori yang benar-benar baru. Saya bahkan telah mencoba git checkout -b mastermembuatnya dengan , tetapi itu tidak membuat cabang. Saya kemudian menyadari jika saya membuat beberapa perubahan dan melakukannya, git membuat cabang master saya.

eacousineau.dll
sumber
1
Bagian yang menyesatkan adalah bahwa orang mengatakan saya memiliki master, tetapi apa pun yang saya coba lakukan, saya akan mendapatkan pesan kesalahan yang mengatakan saya tidak memiliki master. (Saya mencoba membuat cabang dev sementara repo saya masih kosong.) Dengan melakukan sesuatu (file apa saja), master sekarang muncul, dan saya dapat melanjutkan untuk melakukan hal lain. Saya mencoba hal-hal di jawaban lain, tetapi tidak ada yang membantu. Jawaban yang satu ini mungkin berlaku untuk banyak orang di luar sana. (Saya membaca banyak tentang hashing di Git. Saya kira jika tidak ada di awal, tidak ada yang perlu di-hash.)
Fai Ng
15

Dalam kasus saya, ada cabang yang berkembang tetapi tidak ada cabang induk . Oleh karena itu saya mengkloning repositori yang menunjuk HEAD yang baru dibuat ke cabang yang ada. Kemudian saya membuat cabang master yang hilang dan memperbarui HEAD agar mengarah ke cabang master baru.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master
antoniob
sumber
Ah itu dia .. Aku tidak punya tuan atau apapun. Pertama saya menambahkan file baru dan komit awal - lalu lakukan ini. Bekerja seperti pesona
Dustin Silk
12

jika ini adalah repo baru yang telah Anda kloning, mungkin masih kosong, dalam hal ini:

git push -u origin master

kemungkinan besar harus menyelesaikannya.

(lakukan dalam kasus saya. tidak yakin ini adalah masalah yang sama, saya pikir saya harus memposting ini hanya memetikan. mungkin membantu orang lain.)

angka
sumber
8

Saya mengalami masalah yang sama dan menemukan masalahnya. Saat Anda menginisialisasi repositori sebenarnya tidak ada cabang apa pun. Ketika Anda memulai proyek, jalankan git add .dan kemudian git commitcabang master akan dibuat.

Tanpa memeriksa apa pun, Anda tidak memiliki cabang master. Dalam hal ini, Anda perlu mengikuti langkah-langkah yang disarankan orang lain di sini.

Nick ONeill
sumber
2
benar. lakukan "git init" diikuti dengan "git checkout -b somebranchname" dan Anda tidak akan memiliki cabang utama
koem
Ini juga mungkin tidak cukup jika foldernya kosong. Jadi, agar ini berfungsi, Anda harus menambahkan beberapa file. Kecanggungan lain ini sebenarnya mengecewakan.
alehro
0

Tampaknya setidaknya harus ada satu komit lokal di cabang master yang harus dilakukan:

git push -u origin master

Jadi jika Anda melakukannya git init .dan kemudian git remote add origin ..., Anda masih perlu melakukan:

git add ...
git commit -m "..."
Zelphir Kaltstahl
sumber