Bagaimana Anda membuat cabang Git jarak jauh?

3130

Saya membuat cabang lokal yang ingin saya 'dorong' ke hulu. Ada pertanyaan serupa di sini di Stack Overflow tentang cara melacak cabang jarak jauh yang baru dibuat.

Namun, alur kerja saya sedikit berbeda. Pertama saya ingin membuat cabang lokal, dan saya hanya akan mendorongnya ke atas ketika saya puas dan ingin berbagi cabang saya.

  • Bagaimana saya melakukannya? (Pencarian google saya sepertinya tidak menghasilkan apa-apa).
  • Bagaimana saya memberi tahu kolega saya untuk menariknya dari repositori hulu?

UPDATE Dengan Git 2.0 ada jawaban sederhana yang saya tulis di bawah ini: https://stackoverflow.com/a/27185855/109305

Jesper Rønn-Jensen
sumber
14
apakah ada yang pernah menjawab pertanyaan kedua? >> Dan bagaimana saya akan memberitahu kolega saya untuk menariknya dari repositori hulu?
milkplus
1
@milkplus get fetch --allmengambil cabang baru di sisi jarak jauh (tetapi hanya get fetch --prunemenghapus secara lokal referensi ke cabang jarak jauh yang dihapus). Saya pikir, apakah ini harus diatur oleh mereka secara otomatis, atau Anda harus berbicara dengan mereka secara lisan.
peterh

Jawaban:

3732

Pertama, Anda membuat cabang secara lokal:

git checkout -b <branch-name> # Create a new branch and check it out

Cabang jarak jauh secara otomatis dibuat ketika Anda mendorongnya ke server jarak jauh. Jadi ketika Anda merasa siap untuk itu, Anda bisa melakukan:

git push <remote-name> <branch-name> 

Di mana <remote-name>biasanya origin, nama yang diberikan git ke remote yang Anda kloning. Kolega Anda kemudian hanya akan menarik cabang itu, dan secara otomatis dibuat secara lokal.

Perhatikan bahwa secara formal, formatnya adalah:

git push <remote-name> <local-branch-name>:<remote-branch-name>

Tetapi ketika Anda menghilangkan satu, itu mengasumsikan kedua nama cabang adalah sama. Setelah mengatakan ini, sebagai kata peringatan , jangan membuat kesalahan kritis dengan hanya menentukan :<remote-branch-name>(dengan titik dua), atau cabang jarak jauh akan dihapus!

Sehingga selanjutnya git pull tahu apa yang harus dilakukan, Anda mungkin ingin menggunakan:

git push --set-upstream <remote-name> <local-branch-name> 

Seperti dijelaskan di bawah, --set-upstreamopsi ini mengatur cabang upstream:

Untuk setiap cabang yang diperbarui atau berhasil didorong, tambahkan referensi upstream (pelacakan), digunakan oleh argumen-less git-pull (1) dan perintah lainnya.

Ikke
sumber
85
Perhatikan bahwa perilaku default git adalah untuk mendorong referensi yang cocok , jadi git push <remote>tidak akan mendorong cabang jika tidak aktif <remote>.
Jakub Narębski
222
Anda mungkin ingin menggunakannya git push -u <remote-name> <branch-name>sebagai gantinya, sehingga yang berikutnya git pullakan tahu apa yang harus dilakukan.
Bart Schuller
87
Alih-alih secara eksplisit menentukan nama server, Anda bisa menggunakan origin, yang berarti "server saya mendapatkan sisa repo ini dari": demikian git push origin <branch-name>.
lambshaanxy
68
Jika Anda lupa menggunakan -uopsi, Anda bisa mengetik git push -usetelahnya di cabang, lalu git pullakan berfungsi.
Jan
90
Menyatukan semuanya, git push -u origin <local-branch-name>itulah yang berhasil bagi saya.
Samo
881

Pertama, Anda harus membuat cabang secara lokal

git checkout -b your_branch

Setelah itu, Anda dapat bekerja secara lokal di cabang Anda, ketika Anda siap untuk berbagi cabang, dorong. Perintah berikutnya mendorong cabang ke asal repositori jauh dan melacaknya

git push -u origin your_branch

Rekan tim dapat mencapai cabang Anda, dengan melakukan:

git fetch
git checkout origin/your_branch

Anda dapat terus bekerja di cabang dan mendorong kapan pun Anda mau tanpa melewati argumen ke git push (argumen git push akan mendorong master ke master jarak jauh, your_branch lokal ke remote your_branch, dll ...)

git push

Rekan tim dapat mendorong ke cabang Anda dengan melakukan komit dan kemudian mendorong secara eksplisit

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

Atau melacak cabang untuk menghindari argumen agar git push

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push
dseminara
sumber
Apakah ada cara untuk membuat cabang jarak jauh tanpa membuat cabang lokal dengan nama yang sama?
Ariel Gabizon
330

Solusi Simple Git 2.0+:

Pada Git 2.0 perilaku menjadi lebih sederhana :

Anda dapat mengkonfigurasi git dengan push.default = currentuntuk membuat hidup lebih mudah:

Saya menambahkan ini jadi sekarang saya bisa mendorong cabang baru ke hulu

$ git push -u

-uakan melacak cabang jarak jauh dengan nama yang sama. Sekarang dengan konfigurasi ini Anda akan menebak secara otomatis referensi jarak jauh ke git push. Dari dokumentasi git.config :

push.default

Menentukan tindakan yang harus diambil git jika tidak ada refspec diberikan secara eksplisit.

push.default = current- dorong cabang saat ini untuk memperbarui cabang dengan nama yang sama di sisi penerima. Bekerja di alur kerja pusat dan non-pusat.

Bagi saya, ini adalah penyederhanaan yang baik dari alur kerja Git saya sehari-hari. Pengaturan konfigurasi menangani case use 'biasa' di mana Anda menambahkan cabang secara lokal dan ingin membuatnya dari jarak jauh. Juga, saya bisa dengan mudah membuat cabang lokal dari remote dengan hanya melakukan git co remote_branch_name(bukan menggunakan--set-upstream-to flag).

Saya tahu pertanyaan ini dan jawaban yang diterima agak lama, tetapi perilaku telah berubah sehingga sekarang ada opsi konfigurasi untuk membuat alur kerja Anda lebih sederhana.

Untuk menambah konfigurasi global Git Anda, jalankan ini pada baris perintah:

$ git config --global push.default current
Jesper Rønn-Jensen
sumber
5
Saya menemukan git push -u origin HEADsebagai dijawab di sini sedikit lebih verbose (Anda menulis apa yang Anda lakukan) tanpa terlalu banyak mengetik. Selain itu, git push -uargumen tanpa tambahan tidak berfungsi untuk saya jika cabang dibuat dengan-t
Qw3ry
git config --global push.default upstream && git checkout -b foo && <change a file> && git push -utidak bekerja (pada git 2.19.1); push membutuhkan argumen jarak jauh dan cabang.
knite
Bisakah Anda memperluas apa yang Anda maksud git co remote_branch_name?
flannelbeard
84

Sebagaimana dinyatakan dalam jawaban sebelumnya,

git push <remote-name> <local-branch-name>:<remote-branch-name>

cukup untuk mendorong cabang lokal.

Kolega Anda, dapat menarik semua cabang jarak jauh (termasuk yang baru) dengan perintah ini:

git remote update

Kemudian, untuk melakukan perubahan pada cabang, aliran biasa:

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>
Lucian
sumber
Saya suka karena ini memungkinkan nama jarak jauh berbeda dari yang lokal
Ariel Gabizon
66

Buat cabang baru secara lokal berdasarkan cabang saat ini:

git checkout -b newbranch

Komit setiap perubahan seperti biasa. Kemudian, dorong ke atas:

git push -u origin HEAD

Ini adalah jalan pintas untuk mendorong cabang saat ini ke cabang dengan nama yang sama origindan melacaknya sehingga Anda tidak perlu menentukan origin HEADdi masa depan.

Zenexer
sumber
4
Hal ini membantu dalam kasus saya: git push -u origin HEAD. Saya pikir itu cara yang paling jelas.
Scadge
2
Ya, Anda tidak pernah ingat apa yang Anda ketikkan terakhir sebagai cabang, jadi inilah cara yang harus dilakukan.
marksyzm
4
@markyzm Jika Anda tidak dapat mengingat cabang apa yang Anda gunakan atau apa nama Anda, Anda mungkin tidak perlu mendorong sama sekali! Setidaknya, bukan tanpa berlari git statusdulu.
Zenexer
1
Ya, harus memastikan dunia tidak meledak pada dorongan itu; Saya setuju.
markyzm
1
Ini adalah cara paling efisien untuk membuat cabang pelacakan serta cabang jarak jauh secara bersamaan. Saya juga ingin menambahkan git remote show originsebagai langkah ketiga hanya untuk memvisualisasikan hubungan pelacakan / dilacak baru.
hb5fa
54

Jika Anda ingin membuat cabang dari cabang saat ini

git checkout -b {your_local_branch_name} 

Anda ingin cabang dari cabang jarak jauh, Anda dapat mencoba

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

Jika Anda selesai dengan perubahan, Anda dapat menambahkan file.

git add -A or git add <each_file_names>

Kemudian lakukan komit secara lokal

git commit -m 'your commit message'

Ketika Anda ingin mendorong repo jarak jauh

git push -u origin <your_local_branch_name>

Semua bersama akan menjadi

git checkout -b bug_fixes 

atau Jika Anda ingin membuat cabang dari cabang jarak jauh katakanlah pengembangan

git checkout -b bug_fixes asal / pengembangan

Anda dapat mendorong ke cabang ke repo jarak jauh dengan

git push -u origin bug_fixes

Kapan saja Anda ingin memperbarui cabang Anda dari cabang lain katakanlah master .

git pull origin master.

sreekumar
sumber
46

Jika Anda ingin benar-benar hanya membuat cabang jarak jauh tanpa memiliki cabang lokal, Anda dapat melakukannya seperti ini:

git push origin HEAD:refs/heads/foo

Ini mendorong apa pun KEPALA Anda ke cabang foo yang tidak ada pada remote.

Tassadar
sumber
Melakukan ini benar-benar membingungkan Visual Studio saya ke titik di mana ia tidak memulai dengan benar. Team Explorer tidak mau memuat sama sekali, tetapi segala sesuatu yang lain menjadi kesalahan besar juga. Hanya FYI.
Josh
Sepertinya ini seharusnya bekerja, tetapi ketika saya benar-benar mencobanya, server gitlab kami tidak mengenali hasilnya sebagai cabang.
JosephH
Cabang apa yang bercabang di remote? Bagaimana jika saya ingin foo bercabang dari foo2? Apakah itu mungkin? Terima kasih.
user674669
Ini bekerja pada server gerrit juga, membuat cabang baru pada remote yang tidak ada sebelum perintah ini.
MichaelZ
33

Solusi termudah ... Drumm Roll ... git versi 2.10.1 (Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

NB - Cabang yang baru saja Anda buat di lingkungan lokal Anda, dan cabang jauh yang tidak ada di mana Anda mencoba untuk mendorong, harus memiliki nama yang sama .

lemah
sumber
3
Terima kasih atas saran Anda. Meskipun Anda menyebut ini solusi yang mudah, saya masih berpikir git push -ucara ini lebih mudah. Mengharuskan Anda memiliki satu baris konfigurasi global, lihat stackoverflow.com/a/27185855/109305 . Saya menggunakan git push -uterus-menerus, mencakup 99% dari penggunaan saya saat bekerja.
Jesper Rønn-Jensen
30

[Jawaban cepat]

Anda dapat melakukannya dalam 2 curam:

1. Gunakan checkoutuntuk buat cabang lokal:

git checkout -b yourBranchName

2. Gunakan pushperintah untuk membuat cabang secara otomatis dan mengirim kode ke repositori jarak jauh:

git push -u origin yourBanchName

Ada banyak cara untuk melakukan ini tetapi saya pikir cara ini sangat sederhana.

Javier C.
sumber
1
Cepat dan to the point!
Dev
26

Pertama Anda membuat cabang secara lokal:

git checkout -b your_branch

Dan kemudian untuk membuat cabang dari jarak jauh:

git push --set-upstream origin your_branch

Catatan: Ini berfungsi pada versi terbaru dari git:

$ git --version
git version 2.3.0

Bersulang!

ipegasus
sumber
Ini hanya teks bantuan yang dihasilkan oleh perintah git pushketika cabang lokal Anda tidak dilacak oleh remote.
nurettin
18

Buat cabang di mesin lokal Anda dan aktifkan cabang ini:

$ git checkout -b [name_of_your_new_branch]

Dorong cabang di github:

$ git push origin [name_of_your_new_branch]

Ketika Anda ingin melakukan sesuatu di cabang Anda, pastikan untuk berada di cabang Anda.

Anda dapat melihat semua cabang dibuat dengan menggunakan:

$ git branch

Yang akan ditampilkan:

* approval_messages
  master
  master_clean

Tambahkan remote baru untuk cabang Anda:

$ git remote add [name_of_your_remote] 

Dorong perubahan dari komit Anda ke cabang Anda:

$ git push origin [name_of_your_remote]

Perbarui cabang Anda ketika cabang asli dari repositori resmi telah diperbarui:

$ git fetch [name_of_your_remote]

Maka Anda perlu mendaftar untuk menggabungkan perubahan, jika cabang Anda berasal dari pengembangan, Anda harus melakukan:

$ git merge [name_of_your_remote]/develop

Hapus cabang pada sistem file lokal Anda:

$ git branch -d [name_of_your_new_branch]

Untuk memaksa penghapusan cabang lokal pada sistem file Anda:

$ git branch -D [name_of_your_new_branch]

Hapus cabang di github:

$ git push origin :[name_of_your_new_branch]

Di Sini Semua Informasi

Proyek lain yang ada

Numan Turkeri
sumber
14

Membuat cabang lokal dari cabang yang ada (dapat menjadi master / mengembangkan / cabang lainnya).

git checkout -b branch_name

Dorong ini ke jarak jauh

git push -u remote_name local_branch_name: remote_branch_name

Sini,

  1. -u: mengatur cabang hulu
  2. remote_name: git menetapkan nama secara default menjadi "origin" ketika membuat repositori. Namun ini dapat diubah menjadi nama arbitrer yang berbeda.
  3. local_branch_name: adalah nama cabang lokal yang akan didorong.
  4. remote_branch_name: adalah nama cabang jarak jauh yang ingin kita buat di remote.

Jika kami menghapus nama cabang lokal dan jarak jauh, itu akan memiliki format

git push -u remote_name branch_name

Ini akan mendorong cabang lokal ke jarak jauh dan dengan nama yang sama dengan branch_name cabang lokal. Cabang lokal juga akan melacak cabang jarak jauh.

iosCurator
sumber
10

Saya tahu pertanyaan ini dijawab dengan baik, tetapi hanya ingin mendaftar langkah-langkah yang saya ambil untuk membuat cabang baru "myNewBranch" dan mendorong ke jarak jauh ("asal" dalam kasus saya) dan mengatur pelacakan. Pertimbangkan ini versi "TL; DR" :)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch
sufinawaz
sumber
8

Sekarang dengan git, Anda bisa mengetik, ketika Anda berada di cabang yang benar

git push --set-upstream origin <remote-branch-name>

dan git buat untuk Anda cabang asal.

Maurizio Brioschi
sumber
1
-u adalah kependekan dari --set-upstream .. jadi perintah bisa berupa git push -u origin <remote-branch-name>
Uncaught Exception
fatal: 'origin' tampaknya bukan repositori git
Dmitry Grinko
mungkin Anda harus mengatur asal repositori git Anda
Maurizio Brioschi
8

Hanya ingin menambahkan itu sementara:

git checkout -b {branchName}

Membuat cabang baru, juga memeriksa cabang itu / menjadikannya cabang Anda saat ini. Jika, karena alasan tertentu, semua yang ingin Anda lakukan adalah mengambil cabang tetapi tidak menjadikannya cabang Anda saat ini, maka Anda akan menggunakan perintah berikut:

git branch {branchName}

Pada perintah pertama, "checkout" membuat cabang kata cabang Anda saat ini, dan "-b" berarti: cabang ini belum ada, jadi buatlah untuk saya.

Brian Sachetta
sumber
6

Bagaimana melakukannya melalui Source Tree

 1: Open SourceTree, click on Repository -> Checkout
 2 :Click on Create New Branch
 3: Select branch where from you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push button)
Monis Majeed
sumber
5

git push -u <remote-name> <branch-name> tidak berfungsi jika cabang yang baru dibuat tidak muncul dari repo yang sama, yaitu jika Anda belum membuat cabang baru menggunakan git checkout -b new_branch , maka ini tidak akan berfungsi.

Sebagai contoh, saya telah mengkloning dua repositori berbeda secara lokal dan saya harus menyalin repo2 / branch1 untuk repo1 / dan kemudian mendorongnya juga.

Tautan ini membantu saya mendorong cabang lokal saya (diklon dari repo lain) ke repo jarak jauh saya:

patah kaki
sumber
3

Inilah cara Anda melakukannya dalam gerhana melalui Egit.

1) Buka tampilan "Git Repository Exploring" dan keluarkan proyek git yang ingin Anda buat cabang. Di bawah Brances -> Local .. pilih cabang yang ingin Anda buat cabang (Dalam kasus saya saya pilih master .. Anda dapat memilih cabang lain jika Anda mau) .. kemudian klik kanan dan klik pada opsi Buat Cabang .. dan pilih opsi checkout proyek ini dan kemudian klik tombol selesai.

2) Sekarang dari penjelajah proyek pilih proyek .. klik kanan lalu Tim -> Push Branch.

Cabang jarak jauh baru akan dibuat. Anda dapat memberikan nama cabang kepada kolega Anda sehingga mereka dapat menariknya.

pengguna2225713
sumber
Peringatan Tangensial tentang Egit - dan semua klien berbasis JGit, AFAIK: mereka tidak mendukung .gitattributes! Ini berarti jika tim Anda menggunakan campuran Windows (CRLF) dan Linux / OSX (LF), Anda harus bergantung pada setiap klien yang memiliki pengaturan yang tepat setiap saat. Secara alami lebih baik untuk mengelola akhiran secara terpusat di tingkat repo atau proyek, dan .gitattributes adalah cara yang didukung untuk melakukan ini. Jadi, jika Anda tidak benar-benar harus menggunakan Egit ... jangan! :)
minggu
2

Saya telah menggunakan dua cara untuk membuat cabang

Jika Anda menggunakan TortoiseGit ikuti langkah-langkah ini: -

1.Buat Cabang menggunakan TortoiseGit

Klik kanan pada proyek Anda >>> TortoiseGit >>> Buat Cabang >>> tulis nama cabang dan pilih cabang dasar kemudian tekan ok

2.Tekan cabang

Klik kanan pada proyek Anda >>> TortoiseGit >>> tekan >>> klik ok

3. Beralih ke cabang baru

Klik kanan pada proyek Anda >>> TortoiseGit >>> Switch / Checkout >>> pilih cabang yang baru dibuat dan tekan ok

Jika Anda menggunakan command prompt ikuti langkah-langkah ini: -

1.Buat cabang menggunakan command prompt

$ git checkout -b new_branch_name

2.Tekan cabang

$ git push origin new_branch_name

3. Beralih ke cabang baru itu sudah akan beralih ke new_branch_name jika tidak Anda dapat menggunakan

$ git checkout new_branch_name

Mandeep Singh Gill
sumber
0

Saya menggunakan ini dan itu sangat berguna:

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

Penggunaan: git mkdir NEW_BRANCH

Anda bahkan tidak memerlukan status git; mungkin, saya hanya ingin memastikan semuanya berjalan dengan baik ...

Anda dapat memiliki KEDUA cabang LOKAL dan REMOTE dengan satu perintah.

Tarik
sumber