Git - tekan pintasan cabang saat ini

365

Apakah ada jalan pintas untuk memberi tahu Git untuk mendorong cabang pelacakan saat ini ke asal?
Catatan: Saya tahu bahwa saya dapat mengubah perilaku push standar , tetapi saya mencari solusi ad-hoc yang tidak mengubah perilaku default.

Sebagai contoh, misalkan saya di cabang feature/123-sandbox-testssaya akan menggunakan

git push origin feature/123-sandbox-tests

yang membosankan. Saya mencari jalan pintas, semacamnya

git push origin current

dimana git tahu arus itu feature/123-sandbox-tests.


Sunting : Mulai dari versi 2.0, perilaku default git telah berubah menjadi perilaku yang lebih intuitif, yang ingin saya capai. Lihat pertanyaan SO ini untuk detailnya.

Sunting 2 : jawaban ceztko adalah jawaban terbaik karena memungkinkan untuk mendorong cabang saat ini, terlepas dari pengaturannya.

Elad
sumber

Jawaban:

703

Menurut git pushdokumentasi:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

Jadi saya pikir yang Anda butuhkan adalah git push origin HEAD. Juga bermanfaat git push -u origin HEADuntuk mengatur informasi pelacakan hulu di cabang lokal, jika Anda belum mendorong ke tempat asal.

ceztko
sumber
11
Saya lebih suka ini daripada pengaturan push.default daripada sederhana atau saat ini, karena mesin yang berbeda dapat memiliki pengaturan yang berbeda. Anda mungkin terbiasa git pushhanya mendorong cabang saat ini, tetapi pada mesin lain, Anda mungkin secara tidak sengaja mendorong semua cabang yang cocok.
wisbucky
1
@wisbucky Saya memiliki beberapa alias, termasuk co, jadi jika saya mencoba bahkan menarik ke bawah dan kemudian memeriksa kode tanpa ~/.gitconfigfile saya di VM itu, saya akan segera mengetahuinya. Itu membuat saya merasa cukup aman untuk mengubah push to default upstream.
Damon
9
Menarik bahwa ini tidak bekerja dengan adil @, yang didokumentasikan sebagai alias yang valid untuk HEAD. (mis. git push -u origin @)
void.pointer
197

Anda dapat mengkonfigurasi git untuk mendorong ke cabang saat ini menggunakan perintah berikut

git config --global push.default current

maka lakukan saja

git push 

ini akan mendorong kode ke cabang Anda saat ini.

Mahesh
sumber
Apakah masuk akal untuk menambahkan push = refs/heads/current:refs/for/master/currentke bagian 'remote' di .git / config? Artinya, apakah 'sekarang' adalah kata khusus di sini? Atau apakah ia akan mencari cabang yang disebut "saat ini"?
David Doria
6
@DavidDoria 'saat ini' bukan cabang yang disebutkan di sini.
Mahesh
Cara terbaik git push -u origin feature_branch_nameuntuk mengatur upstream / pelacakan! Jika Anda setidaknya menggunakan repositori jarak jauh.
Flo
40

Anda harus melihat pertanyaan serupa di Perilaku default "git push" tanpa cabang yang ditentukan

Pada dasarnya ini menjelaskan cara mengatur perilaku default untuk mendorong cabang Anda saat ini hanya mengeksekusi git push. Mungkin yang Anda butuhkan adalah:

git config --global push.default current

Pilihan lain:

  • tidak ada : Jangan mendorong apa pun
  • cocok : Dorong semua cabang yang cocok
  • hulu / pelacakan : Dorong cabang saat ini ke apa pun yang dilacak
  • saat ini : Dorong cabang saat ini
Najor
sumber
11

Saya menggunakan alias seperti itu di config .bashrc saya

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

Pada perintah $gpbitu dibutuhkan nama cabang saat ini dan mendorongnya ke asal.

Ini adalah alias saya yang lain:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'
theodor
sumber
8

Untuk apa nilainya, pintasan utama:

Di saya .bash_profilemiliki alias push="git push origin HEAD", jadi setiap kali saya mengetik pushsaya tahu saya mendorong ke cabang saat ini saya aktif.

Ryan Rebo
sumber
6

Jika Anda menggunakan git 1.7.x, Anda dapat menjalankan perintah berikut untuk mengatur cabang pelacakan jarak jauh.

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

Maka Anda cukup menggunakan git pushuntuk mendorong semua perubahan. Untuk jawaban yang lebih lengkap, silakan lihat jawaban yang diterima untuk pertanyaan serupa di sini.

Jika Anda hanya ingin mendorong cabang saat ini dengan perintah push, maka Anda dapat mengubah perilaku push ke upstream:

git config --global push.default upstream
Faruk Sahin
sumber
Terima kasih, namun dalam hal ini tidak akan SEMUA cabang pelacakan didorong ke asal?
Elad
Saya sudah memodifikasi jawabannya, silakan lihat tautannya, jawabannya lebih lengkap di sana.
Faruk Sahin
Sekali lagi, masalahnya adalah bahwa semua cabang yang dilacak cabang didorong seperti itu. Seperti yang saya tulis dalam pertanyaan saya, cabang adalah cabang yang dilacak di tempat pertama, jadi saya berpikir bahwa pengaturan cabang hulu seperti yang Anda sarankan berlebihan. Atau saya salah?
Elad
Kemudian Anda dapat mengkonfigurasi git untuk hanya mendorong cabang saat ini dengan mengubah perilaku git push. git config --global push.default upstreamakan mengatur perilaku push untuk hanya mendorong cabang saat ini.
Faruk Sahin
5

Cara paling sederhana: jalankan git push -u origin feature/123-sandbox-testssekali. Itu mendorong cabang seperti yang biasa Anda lakukan dan juga menyetel info pelacakan hulu di konfigurasi lokal Anda. Setelah itu, Anda bisa git pushmendorong cabang yang dilacak ke hulu jarak jauhnya.

Anda juga dapat melakukan ini di konfigurasi sendiri dengan menetapkan branch.<branch name>.mergenama cabang jarak jauh (dalam kasus Anda sama dengan nama lokal) dan secara opsional, branch.<branch name>.remotedengan nama jarak jauh yang ingin Anda dorong (default ke asal). Jika Anda melihat di konfigurasi Anda, kemungkinan besar sudah ada salah satu dari ini ditetapkan master, sehingga Anda dapat mengikuti contoh itu.

Akhirnya, pastikan Anda mempertimbangkan push.defaultpengaturannya. Ini default untuk "cocok", yang dapat memiliki hasil yang tidak diinginkan dan tidak terduga. Kebanyakan orang yang saya kenal menemukan "upstream" lebih intuitif, yang hanya mendorong cabang saat ini.

Detail tentang masing-masing pengaturan ini dapat ditemukan di halaman manual git-config .

Setelah dipikir-pikir, saat membaca kembali pertanyaan Anda, saya pikir Anda tahu semua ini. Saya pikir apa yang sebenarnya Anda cari tidak ada. Bagaimana dengan fungsi bash, sesuatu seperti (belum diuji):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}
Ryan Stewart
sumber
1

Dengan bantuan jawaban ceztko saya menulis fungsi pembantu kecil ini untuk membuat hidup saya lebih mudah:

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

Ini mendorong cabang saat ini ke asal dan juga mengatur cabang pelacakan jarak jauh jika belum diatur.

Bantak
sumber