git push ke cabang tertentu

101

Bahkan setelah membaca pertanyaan ini: git-push-current-branch , saya masih mengalami kesulitan untuk mengetahui cara menulis perintah git push saya. Seperti yang disebutkan di tautan pertanyaan, tidak jelas dari dokumentasinya.

Saya ingin menggunakan contoh 'dunia nyata' saya. Berikut adalah apa yang saya lihat ketika saya melakukan git statusperintah di tingkat atas cabang saya:

Di cabang amd_qlp_tester

Cabang Anda di depan 'origin / amd_qlp_tester' dengan 5 komit.

dll ...

Jadi nama cabang saya amd_qlp_testertetapi "bercabang" dari cabang utama (jika saya salah istilah itu karena latar belakang SVN saya). Tapi kemudian ada juga nama `origin / amd_qlp_testser '

Jadi bagaimana cara menyusun perintah push saya?

Apakah itu salah satu dari yang berikut:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push
code_fodder
sumber

Jawaban:

92

git push origin amd_qlp_testerakan bekerja untukmu. Jika Anda hanya mengetik git push, maka remote dari cabang saat ini adalah nilai defaultnya.

Sintaks push terlihat seperti ini - git push <remote> <branch>. Jika Anda melihat remote Anda di .git/configfile, Anda akan melihat entri [remote "origin"]yang menentukan url dari repositori. Jadi, di bagian pertama perintah Anda akan memberi tahu Git di mana menemukan repositori untuk proyek ini, dan kemudian Anda cukup menentukan cabang.

Petr Mensik
sumber
Terima kasih :), dapatkah Anda menjelaskan mengapa itu adalah dua "kata" yang terpisah ketika deskripsi status dit menampilkannya sebagai jalur, yaitu mengapa origin amd_qlp_testserdan bukanorigin/amd_qlp_tester
code_fodder
Default "remote" didasarkan pada konfigurasi cabang saat ini (dalam hal ini memang akan demikian origin). Branch (es) untuk mendorong default (dalam versi git saat ini) ke :if unset, yang artinya matching, tapi itu seharusnya berubah di masa depan.
torek
Saya agak bingung, saya menggunakan v2.10, ketika saya mengetiknya git pushmencoba untuk mendorong semua cabang yang dilacak, bertentangan dengan apa yang Anda katakan ("remote cabang saat ini adalah nilai default").
Roberto
Git 2.x harus menggunakan simplestrategi push yang berarti hanya akan mendorong cabang saat ini. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik
fatal: Couldn't find remote ref branch-name-here
doug65536
112

Jika cabang lokal dan cabang jarak jauh Anda memiliki nama yang sama maka Anda dapat melakukannya:

git push origin branchName

Ketika nama cabang lokal dan jarak jauh Anda berbeda maka Anda dapat melakukannya:

git push origin localBranchName:remoteBranchName
Imranmadbar
sumber
Ini sangat membantu, sulit ditemukan :)
Pe Dro
Ya, Anda benar, juga sulit untuk diingat!
Imranmadbar
8

Jawaban atas pertanyaan yang Anda tautkan adalah tentang mengkonfigurasi git sehingga Anda dapat memasukkan git pushperintah yang sangat singkat dan meminta mereka melakukan apa pun yang Anda inginkan. Bagus sekali, jika Anda tahu apa yang Anda inginkan dan cara mengejanya di Git-Ese, tetapi Anda baru mengenal git! :-)

Dalam kasus Anda, jawaban Petr Mensik adalah (yah, "a") yang benar. Inilah alasannya:

Akar perintah di sekitar file Anda untuk menemukan "remote" bernama (misalnya, ). File konfigurasi mencantumkan:git push remote.git/configorigin

  • di mana (berdasarkan URL) "tinggal" jarak jauh itu (misalnya, )ssh://hostname/path
  • ke mana dorongan pergi, jika berbeda
  • apa yang didorong, jika Anda tidak mengatakan cabang apa yang akan didorong
  • apa yang diambil saat Anda berlari git fetch remote

Saat Anda pertama kali mengkloning repo — kapan pun itu — git menyiapkan nilai default untuk beberapa di antaranya. URL adalah apa pun yang Anda kloning dari dan sisanya, jika diatur atau tidak diset, semua "masuk akal" default ... atau, hmm, yang mereka?

Masalah dengan ini adalah bahwa orang telah berubah pikiran, dari waktu ke waktu, tentang apa yang "masuk akal". Jadi sekarang (tergantung pada versi git Anda dan apakah Anda telah mengonfigurasi secara detail), git mungkin mencetak banyak peringatan tentang perubahan default di masa mendatang. Menambahkan nama "cabang yang akan didorong" - amd_qlp_tester- (1) menutupnya, dan (2) mendorong hanya satu cabang itu.

Jika Anda ingin mendorong dengan lebih nyaman, Anda dapat melakukannya dengan:

git push origin

atau bahkan:

git push

tetapi apakah itu sesuai dengan keinginan Anda, tergantung pada apakah Anda setuju dengan "penulis git awal" bahwa default aslinya wajar, atau "penulis git nanti" bahwa default asli tidak masuk akal. Jadi, ketika Anda ingin melakukan semua hal konfigurasi (akhirnya), lihat pertanyaan (dan jawaban) yang Anda tautkan.

Adapun nama origin/amd_qlp_testerdi tempat pertama: itu sebenarnya adalah entitas lokal (nama yang disimpan di dalam repo Anda), meskipun itu disebut "cabang jarak jauh". Tebakan terbaik amd_qlp_testeradalah "di mana di sana". Git memperbaruinya jika bisa .

torek
sumber
1
Terima kasih atas penjelasannya, saya rasa saya sudah menjelaskannya sekarang. Saya suka lebih tepat jadi saya akan tetap melakukannya git push origin amd_qlp_testersampai saya memiliki kebutuhan untuk melakukan hal-hal yang lebih canggih :)
code_fodder
2

Saya ingin menambahkan jawaban yang diperbarui - sekarang saya telah menggunakan git untuk sementara waktu, saya menemukan bahwa saya sering menggunakan perintah berikut untuk melakukan dorongan (menggunakan pertanyaan asli sebagai contoh):

  • git push origin amd_qlp_tester- dorong ke cabang yang terletak di remote yang dipanggil originpada cabang jarak jauh yang dipanggil amd_qlp_tester.
  • git push -u origin amd_qlp_tester- sama seperti yang terakhir, tetapi mengatur upstream yang menghubungkan cabang lokal ke cabang jarak jauh sehingga lain kali Anda bisa menggunakan git push/pulljika belum terhubung (hanya perlu melakukannya sekali).
  • git push - Setelah Anda menyetel upstream, Anda dapat menggunakan versi yang lebih pendek ini.

-uOpsi catatan adalah versi pendek --set-upstream- keduanya sama.

code_fodder
sumber