Saya baru masuk git
dan sedang berlatih. Saya membuat cabang lokal tetapi saya melihat bahwa ketika saya melakukannya git push
, cabang saya tidak diunggah ke repositori. Aku harus benar-benar melakukan: git push -u origin --all
.
Kenapa ini? Bukankah cabang perubahan baru yang didorong secara default? Mengapa saya perlu menjalankan perintah kedua?
git
version-control
Cratylus
sumber
sumber
push.default
, lihatman git-config
). Jika Anda melakukannyagit config --add push.default current
, makagit push
secara otomatis akan membuat cabang di repo jarak jauh jika perlu. Mengapa ini bukan default dijelaskan dalam jawaban.current
' dan 'upstream
', lihat jawaban saya yang lebih lama stackoverflow.com/a/13751847/6309 .Jawaban:
Alasan sebenarnya adalah bahwa, dalam repo baru (git init), tidak ada cabang (tidak
master
, tidak ada cabang sama sekali, nol cabang)Jadi, ketika Anda mendorong untuk pertama kalinya ke repo hulu kosong (umumnya yang kosong ), repo hulu tidak memiliki cabang dengan nama yang sama.
Dan:
matching
' (mendorong semua cabang dengan nama yang sama, menciptakan mereka jika mereka tidak ada),simple
' (push hanya cabang saat ini, dan hanya jika memiliki cabang pelacakan jarak jauh yang bernama sama di hulu, karena git 1.7.11 )Dalam kedua kasus, karena repo kosong hulu tidak memiliki cabang:
Itu berarti dorongan lokal pertama Anda tidak tahu:
Jadi, Anda setidaknya perlu melakukan:
Tetapi jika Anda hanya melakukan itu, Anda:
master
cabang hulu di hulu (sekarang repo tidak kosong): bagus.master
' perlu didorong ke hulu (origin
) 'master
' (cabang hulu): buruk.Itulah mengapa disarankan, untuk dorongan pertama, untuk melakukan:
Itu akan merekam
origin/master
sebagai cabang pelacakan jarak jauh , dan akan memungkinkan dorongan berikutnya untuk secara otomatis mendorongmaster
keorigin/master
.Dan itu akan bekerja juga dengan kebijakan push '
current
' atau 'upstream
'.Dalam setiap kasus, setelah inisial
git push -u origin master
, dorongan git yang sederhana akan cukup untuk terus mendorong master ke cabang hulu kanan.sumber
git push
juga mengharapkan cabang sudah ada?simple
': push ke cabang upstream yang tercatat, jika cabang upstream itu memiliki nama yang sama dengan yang lokal. Sederhanagit push
saja sudah cukup.git push --set-upstream origin new_branch
ataugit push -u origin new_branch
singkatnya. The-all
bahwa penanya digunakan dilewati penamaan cabang baru tertentu dengan termasuk semua cabang. Ini dicakup oleh + Klas Mellbourn dalam jawabannya.Anda tidak, lihat di bawah
Saya menemukan 'fitur' ini agak mengganggu karena saya tidak mencoba meluncurkan roket ke bulan, cukup dorong cabang sialan saya. Anda mungkin melakukannya juga atau Anda tidak akan ada di sini!
Ini adalah perbaikannya: jika Anda ingin secara implisit mendorong untuk cabang saat ini terlepas dari apakah cabang itu ada pada asal hanya mengeluarkan perintah ini sekali dan Anda tidak akan pernah harus lagi di mana saja:
Jadi, jika Anda membuat cabang seperti ini:
dan kemudian melakukan beberapa komitmen dan kemudian melakukan a
untuk mengeluarkannya dari asal (berada di cabang itu) dan itu akan membuat cabang tersebut untuk Anda jika tidak ada.
Perhatikan bit -u memastikan mereka terhubung jika Anda menarik nanti dari cabang tersebut. Jika Anda tidak memiliki rencana untuk menarik cabang nanti (atau boleh saja dengan satu liner jika Anda melakukannya) -u tidak perlu.
sumber
git push -u
Output
git push
ketika mendorong cabang barugit push
Asumsi sederhana bahwa sudah ada cabang terpencil yang dilacak oleh cabang lokal saat ini. Jika tidak ada cabang jarak jauh seperti itu, dan Anda ingin membuatnya, Anda harus menentukan bahwa menggunakan flag-u
(bentuk pendek--set-upstream
).Kenapa begitu? Saya kira para pelaksana merasa bahwa membuat cabang pada remote adalah suatu tindakan besar sehingga harus sulit melakukannya secara tidak sengaja.
git push
adalah sesuatu yang Anda lakukan sepanjang waktu."Bukankah cabang perubahan baru yang didorong secara default?" Saya akan mengatakan bahwa "perubahan" di Git adalah komitmen. Cabang adalah pointer ke komit. Bagi saya lebih masuk akal untuk memikirkan dorongan sebagai sesuatu yang mendorong komitmen ke repositori lain. Komit mana yang didorong ditentukan oleh cabang mana Anda berada dan hubungan pelacakan dari cabang itu ke cabang di remote.
Anda dapat membaca lebih lanjut tentang melacak cabang di bab Cabang Jarak Jauh dari buku Pro Git .
sumber
fatal
tetapi saya sudah melakukan komit di cabang. Apakah hal ini?git push -u origin
disalin ke repositori jarak jauh.fatal
pesan seperti yang Anda sebutkan dalam jawaban. Apakah perbedaan ini bergantung pada fakta bahwa saya melakukan sesuatu pada cabang?fatal
pesan itu. Saya kira perbedaannya tergantung pada implementasi git yang Anda gunakan. Output saya dari 1.8.1.msysgit.1 berjalan di Windows 8.Saya tidak dapat menemukan alasan oleh pengembang asli ini secepat ini, tetapi saya dapat memberikan Anda tebakan yang dididik berdasarkan pengalaman Git selama beberapa tahun.
Tidak, tidak setiap cabang adalah sesuatu yang ingin Anda dorong ke dunia luar. Itu mungkin mewakili eksperimen pribadi.
Apalagi ke mana harus
git push
mengirim semua cabang? Git dapat bekerja dengan beberapa remote dan Anda mungkin ingin memiliki set cabang yang berbeda pada masing-masing. Misalnya repo proyek pusat GitHub mungkin memiliki cabang rilis; garpu GitHub dapat memiliki cabang topik untuk ditinjau; dan server Git lokal mungkin memiliki cabang yang berisi konfigurasi lokal. Jikagit push
akan mendorong semua cabang ke remote yang dilacak oleh cabang saat ini, skema semacam ini akan mudah dikacaukan.sumber
It might represent a private experiment
Oke tapi apa masalahnya? Cabang "utama" yang digunakan semua orang yaitumaster
tidak terpengaruh. Kecuali Anda bermaksud menyembunyikan kode sumber 2)git push, without a remote, pushes to the current branch's remote
Saya kehilangan Anda di sini :(git fetch
ratusan cabang setengah bekerja setiap saat. 2) Saya mengacu padagit push
perilaku default. Ini mendorong ke remote yang dilacak oleh cabang saat ini, jika ada.HEAD adalah kependekan dari cabang saat ini sehingga git push -u asal HEAD berfungsi. Sekarang untuk menghindari pengetikan ini setiap kali saya menggunakan alias:
git config --global alias.pp 'push -u origin HEAD'
Setelah ini, setiap kali saya ingin mendorong cabang yang dibuat melalui cabang git -b saya bisa mendorongnya menggunakan:
git pp
Semoga ini menghemat waktu untuk seseorang!
sumber
Pada pemeriksaan pertama
Langkah-1:
git remote -v
// jika ditemukan git menginisialisasi kemudian hapus atau lewati langkah-2
Langkah-2:
git remote rm origin
// Kemudian konfigurasikan alamat email Anda secara global git
Langkah-3:
git config --global user.email "[email protected]"
Langkah-4:
git initial
Langkah-5:
git commit -m "Initial Project"
// Jika sudah menambahkan repo proyek maka lewati langkah-6
Langkah-6:
git remote add origin %repo link from bitbucket.org%
Langkah-7:
git push -u origin master
sumber
Saya baru saja mengalami permutasi lebih lanjut dari masalah ini.
Saya memiliki nama cabang
feat/XYZ-1234-some-description
karena saya mengerjakan Jira edisi 1234. Selama pekerjaan saya membuat masalah Jira baru untuk melacak bagian yang lebih kecil dari pekerjaan, dan ketika saya datang untuk mendorong saya memutuskan untuk mendorong ke nama cabang dengan nomor penerbitan baru ini. di:Ini memberi saya kesalahan yang sedang dibahas di utas SO ini. Tetapi karena saya mencoba untuk mendorong ke nama cabang yang berbeda dari cabang saya saat ini, masalah saya berbeda dengan yang dijelaskan di sini. Saya akhirnya mengganti nama cabang lokal saya sebelum saya bisa mendorongnya:
Setelah sedikit lebih membaca sekitar saya menyadari bahwa saya bisa menetapkan
src
padagit push
, baik untuk nama cabang saat, atau hanyaHEAD
jika sesuai:sumber
Jika Anda mengaktifkan untuk mendorong perubahan baru dari cabang baru Anda pertama kali. Dan mendapatkan kesalahan di bawah ini:
Untuk mendorong cabang saat ini dan mengatur remote sebagai upstream, gunakan
sumber