Git - geçerli şube kısayolunu it


363

Git'e geçerli izleme dalını başlangıç ​​noktasına itmesini söyleyen bir kısayol var mı?
Not: Varsayılan itme davranışını değiştirebileceğimi biliyorum , ancak varsayılan davranışı değiştirmeyen geçici bir çözüm arıyorum.

Örneğin, dalda olduğumu varsayalım feature/123-sandbox-tests kullanacağım olduğumu

git push origin feature/123-sandbox-tests

Bu sıkıcı. Bir kısayol arıyorum, şöyle bir şey

git push origin current

git, akımın feature/123-sandbox-tests .


Düzenleme : sürüm 2.0'dan itibaren, git'in varsayılanı davranış daha sezgisel bir davranış, hangi elde etmek istedim değişti. Ayrıntılar için Bu SO sorusuna bakın.

Edit 2 : Ceztko'nun cevabı , ayarlardan bağımsız olarak mevcut dalı itmeye izin verdiği için en iyi cevaptır.

Yanıtlar:


702

git pushBelgelere göre :

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

Sanırım ihtiyacınız olan şey bu git push origin HEAD. Ayrıca git push -u origin HEAD, başlangıç ​​noktasını henüz belirlemediyseniz, yerel şubede yukarı izleme bilgilerini ayarlamak yararlı olabilir .


11
Bunu push.default'u basit veya güncel olarak ayarlamayı tercih ederim, çünkü farklı makineler farklı ayarlara sahip olabilir. git pushSadece mevcut dalı itmeye alışabilirsiniz , ancak diğer makinelerde yanlışlıkla eşleşen tüm dalları itebilirsiniz.
wisbucky

1
@wisbucky Ben de dahil olmak üzere çeşitli takma adlar var co, bu yüzden aşağı çekmek ve daha sonra ~/.gitconfigbu VM benim dosya olmadan kodu kontrol etmek için denemek olsaydı , hemen bileceğim. Bu, push varsayılanını değiştirme konusunda oldukça güvende hissetmemi sağlıyor upstream.
Damon

9
Bunun sadece işe yaramadığı ilginç, ki bu da @geçerli bir takma ad olarak belgeleniyor HEAD. (örn. git push -u origin @)
void.pointer

197

Git komutunu şu komutu kullanarak geçerli şubeye gönderilecek şekilde yapılandırabilirsiniz

git config --global push.default current

o zaman yap

git push 

bu, kodu geçerli dalınıza iletir.


push = refs/heads/current:refs/for/master/current.Git / config içindeki bir 'uzak' bölüme eklemek mantıklı mı ? Yani 'akım' burada özel bir kelime mi? Yoksa "güncel" diye bir şube mi arıyor?
David Doria

6
@DavidDoria 'current' burada adlandırılan bir şube değil.
Mahesh

git push -u origin feature_branch_nameYukarı akış / izleme ayarlamak için en iyisi ! En azından uzak bir depo kullanıyorsanız.
Flo

40

Benzer bir soruya bakmalısın , "git push" öğesinin varsayılan davranışı, dal belirtilmemiş olarak

Temel olarak, geçerli dalınızı yürütmek için varsayılan davranışın nasıl ayarlanacağını açıklar git push. Muhtemelen ihtiyacınız olan şey:

git config --global push.default current

Diğer seçenekler:

  • hiçbir şey : Hiçbir şey itme
  • eşleşen : Tüm eşleşen dalları itin
  • akış yukarı / izleme : Geçerli dalı izlemekte olduğu şeye itin
  • current : Geçerli dalı itin

11

Bu tür takma adı .bashrc yapılandırmamda kullanıyorum

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

Komutta $gpb mevcut şube adını alır ve kökeni iter.

İşte diğer takma adlar:

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

8

Değeri için, nihai kısayol:

Benim .bash_profilevar alias push="git push origin HEAD", bu yüzden her pushyazdığımda biliyorum ki şu anki dalı itiyorum.


6

Git 1.7.x kullanıyorsanız, uzaktan izleme dalını ayarlamak için aşağıdaki komutu çalıştırabilirsiniz.

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

Sonra git pushtüm değişiklikleri itmek için kullanabilirsiniz . Daha eksiksiz bir cevap için lütfen benzer bir sorunun kabul edilen cevabına bakın .

Geçerli dalı yalnızca push komutuyla itmek istiyorsanız, push davranışını yukarı akış olarak değiştirebilirsiniz:

git config --global push.default upstream

Teşekkürler, ancak bu durumda TÜM izleme şubeleri menşeine itilmez mi?
Elad

Cevabı değiştirdim, lütfen bağlantıya bakın, cevap orada daha eksiksiz.
Faruk Şahin

Yine sorun, takip eden dalların tüm dalların bu şekilde itilmesidir. Sorumda yazdığım gibi, dal ilk etapta izlenen bir dal, bu yüzden ön akış dalını önerdiğiniz gibi ayarlamanın gereksiz olduğunu düşünüyorum. Yoksa yanılıyor muyum?
Elad

Ardından git tuşuna basma davranışını değiştirerek yalnızca geçerli dalı itmek üzere yapılandırabilirsiniz. git config --global push.default upstreampush davranışını yalnızca geçerli dalı itecek şekilde ayarlar.
Faruk Şahin

5

En basit yol: bir git push -u origin feature/123-sandbox-testskez koş . Bu, dalı alıştığınız şekilde zorlar ve yerel yapılandırmanızdaki akış yukarı izleme bilgilerini ayarlar. Bundan sonra, git pushpaletli dalları yukarı akış uzaktan kumandalarına itebilirsiniz.

Bunu, yapılandırmada branch.<branch name>.merge, uzak dal adını (sizin durumunuzda yerel adla aynı) ayarlayarak ve isteğe bağlı olarak, branch.<branch name>.remoteitmek istediğiniz uzaktan kumandanın adına (varsayılan olarak başlangıç ​​noktası) ayarlayarak da kendiniz yapabilirsiniz . Yapılandırmanıza bakarsanız, büyük olasılıkla bu kümelerden biri zaten vardır, bu masternedenle bu örneği takip edebilirsiniz.

Son olarak, push.defaultayarı dikkate aldığınızdan emin olun . Varsayılan olarak, istenmeyen ve beklenmeyen sonuçlara sahip olabilen "eşleme" olarak ayarlanmıştır. Tanıdığım çoğu insan "yukarı doğru" daha sezgisel bulur, bu da sadece mevcut dalı iter.

Bu ayarların her birine ilişkin ayrıntılar, git-config kılavuz sayfasında bulunabilir .

İkinci düşüncede, sorunuzu yeniden okurken, tüm bunları bildiğinizi düşünüyorum. Bence aslında aradığınız şey mevcut değil. Bir bash işlevi (denenmemiş) gibi bir şeye ne dersiniz:

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}

1

Ceztko'nun cevabının yardımıyla hayatımı kolaylaştırmak için bu küçük yardımcı işlevi yazdım:

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
}

Geçerli dalı başlangıç ​​noktasına iter ve henüz kurulmadıysa uzaktan izleme dalını da ayarlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.