Git - वर्तमान शाखा शॉर्टकट को पुश करें


363

क्या वर्तमान ट्रैकिंग शाखा को मूल में धकेलने के लिए Git को बताने का कोई शॉर्टकट है?
नोट: मुझे पता है कि मैं डिफ़ॉल्ट पुश व्यवहार को बदल सकता हूं , लेकिन मैं एक एड-हॉक समाधान की तलाश कर रहा हूं जो डिफ़ॉल्ट व्यवहार को नहीं बदलता है।

उदाहरण के लिए, मान लें कि मैं उस शाखा पर feature/123-sandbox-testsहूं जिसका मैं उपयोग कर रहा हूं

git push origin feature/123-sandbox-tests

जो थकाऊ है। मैं एक शॉर्टकट की तलाश में हूं, कुछ ऐसा है

git push origin current

जहां पता है कि वर्तमान है feature/123-sandbox-tests


संपादित करें : संस्करण 2.0 से शुरू होकर, गिट का डिफ़ॉल्ट व्यवहार एक अधिक सहज व्यवहार में बदल गया है, जो कि मैं हासिल करना चाहता था। देखें यह तो सवाल यह जानकारी के लिए।

संपादित करें 2 : सेस्तको का जवाब सबसे अच्छा जवाब है क्योंकि यह सेटिंग्स की परवाह किए बिना वर्तमान शाखा को धक्का देने की अनुमति देता है।

जवाबों:


701

git pushप्रलेखन के अनुसार :

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

इसलिए मुझे लगता है कि आपको क्या चाहिए git push origin HEAD। इसके अलावा git push -u origin HEAD, स्थानीय शाखा में अपस्ट्रीम ट्रैकिंग जानकारी सेट करने के लिए यह उपयोगी हो सकता है , अगर आपने पहले से ही मूल को धक्का नहीं दिया है।


11
मैं इसे सरल या चालू करने के लिए push.default सेट करना पसंद करता हूं, क्योंकि विभिन्न मशीनों में अलग-अलग सेटिंग्स हो सकती हैं। आपको git pushकेवल वर्तमान शाखा को धकेलने की आदत हो सकती है , लेकिन अन्य मशीनों पर, आप गलती से सभी मिलान शाखाओं को धक्का दे सकते हैं।
बुद्धिमानबीर

1
@wisbucky मेरे पास कई उपनाम हैं, जिनमें शामिल हैं co, इसलिए यदि मुझे नीचे खींचने की कोशिश भी करनी थी और फिर ~/.gitconfigउस वीएम पर मेरी फ़ाइल के बिना कोड की जांच करें , तो मुझे तुरंत पता चल जाएगा। यह मुझे पुश डिफ़ॉल्ट को बदलने के बारे में बहुत सुरक्षित महसूस करने देता है upstream
डेमन

9
दिलचस्प है कि यह सिर्फ उसी के साथ काम नहीं करता है @, जिसे एक वैध उर्फ ​​के रूप में प्रलेखित किया गया है HEAD। (जैसे git push -u origin @)
void.pointer

196

आप निम्न कमांड का उपयोग करके वर्तमान शाखा को पुश करने के लिए गिट कॉन्फ़िगर कर सकते हैं

git config --global push.default current

तो बस करो

git push 

यह कोड को आपकी वर्तमान शाखा में धकेल देगा।


क्या यह push = refs/heads/current:refs/for/master/current.git / config में 'दूरस्थ' अनुभाग में जोड़ने के लिए समझ में आता है ? अर्थात्, 'वर्तमान' यहाँ एक विशेष शब्द है? या यह "वर्तमान" नामक एक शाखा की तलाश में होगा?
डेविड डोरिया

6
@ दाविदोरिया 'करंट' यहां नाम की एक शाखा नहीं है।
महेश

git push -u origin feature_branch_nameअपस्ट्रीम / ट्रैकिंग सेट अप करने के लिए सबसे अच्छा है ! यदि आप कम से कम एक दूरस्थ भंडार का उपयोग करते हैं।
फ्लो

40

आपको एक समान प्रश्न पर एक नज़र डालनी चाहिए निर्दिष्ट शाखा के बिना "गिट पुश" के डिफ़ॉल्ट व्यवहार डालनी चाहिए

मूल रूप से यह बताता है कि अपनी वर्तमान शाखा को निष्पादित करने के लिए डिफ़ॉल्ट व्यवहार कैसे सेट करें git push। संभवतः आपको जो चाहिए वह है:

git config --global push.default current

अन्य विकल्प:

  • कुछ भी नहीं : कुछ भी धक्का मत करो
  • मिलान : सभी मिलान शाखाओं को पुश करें
  • अपस्ट्रीम / ट्रैकिंग : जो भी ट्रैकिंग कर रहा हो, उसे करंट ब्रांच को पुश करें
  • करंट : करंट ब्रांच को पुश करें

11

मैं अपने .bashrc विन्यास में ऐसे उपनाम का उपयोग करता हूं

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

आज्ञा पर $gpb यह वर्तमान शाखा का नाम लेता है और इसे मूल पर धकेलता है।

यहाँ मेरे अन्य उपनाम हैं:

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

8

इसके लायक क्या है, अंतिम शॉर्टकट:

मेरे .bash_profileपास मेरे पास है alias push="git push origin HEAD", इसलिए जब भी मैं टाइप करता pushहूं मुझे पता है कि मैं वर्तमान शाखा पर जोर दे रहा हूं।


6

यदि आप git 1.7.x का उपयोग कर रहे हैं, तो आप दूरस्थ ट्रैकिंग शाखा को सेट करने के लिए निम्न कमांड चला सकते हैं।

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

तब आप बस git pushसभी परिवर्तनों को धकेलने के लिए उपयोग कर सकते हैं। अधिक पूर्ण उत्तर के लिए, कृपया यहां एक समान प्रश्न का स्वीकृत उत्तर देखें

यदि आप केवल वर्तमान शाखा को पुश कमांड के साथ पुश करना चाहते हैं, तो आप पुश व्यवहार को अपस्ट्रीम में बदल सकते हैं:

git config --global push.default upstream

धन्यवाद, हालांकि इस मामले में सभी ट्रैकिंग शाखाओं को मूल में नहीं धकेला जाएगा?
एलाड

मैंने उत्तर को संशोधित कर दिया है, कृपया लिंक देखें, उत्तर वहाँ अधिक पूर्ण है।
फारुक साहिन 15

फिर, समस्या यह है कि सभी शाखाएं ट्रैक कर रही हैं शाखाएं इस तरह से धकेल दी जा रही हैं। जैसा कि मैंने अपने प्रश्न में लिखा था कि शाखा पहली बार एक ट्रैक की गई शाखा है, इसलिए मुझे लगता है कि आपके द्वारा सुझाई गई अपस्ट्रीम शाखा को सेट करना निरर्थक है। या मैं गलत हूँ?
इलाद

फिर आप गिट पुश व्यवहार को बदलकर केवल वर्तमान शाखा को पुश करने के लिए गिट कॉन्फ़िगर कर सकते हैं। git config --global push.default upstreamकेवल वर्तमान शाखा को पुश करने के लिए पुश व्यवहार सेट करेगा।
फारुक साहिन

5

सबसे सरल तरीका: git push -u origin feature/123-sandbox-testsएक बार चलाएं । उस शाखा को धक्का देता है जिस तरह से आप इसे करने के लिए उपयोग किए जाते हैं और अपने स्थानीय कॉन्फ़िगरेशन में अपस्ट्रीम ट्रैकिंग जानकारी भी सेट करते हैं। उसके बाद, आप केवल git pushट्रैक की गई शाखाओं को उनके अपस्ट्रीम रिमोट (एस) पर धकेल सकते हैं ।

आप इसे branch.<branch name>.mergeदूरस्थ शाखा के नाम (आपके मामले में स्थानीय नाम के समान) और वैकल्पिक रूप से, branch.<branch name>.remoteउस रिमोट के नाम पर सेट कर सकते हैं जिसे आप पुश करना चाहते हैं (मूल के लिए डिफ़ॉल्ट)। यदि आप अपने कॉन्फ़िगरेशन में देखते हैं, तो इसके लिए सबसे अधिक संभावना पहले से ही इनमें से एक है master, इसलिए आप उस उदाहरण का अनुसरण कर सकते हैं।

अंत में, सुनिश्चित करें कि आप पर विचार करें push.default सेटिंग पर हैं। यह "मिलान" के लिए चूक करता है, जिसमें अवांछित और अप्रत्याशित परिणाम हो सकते हैं। अधिकांश लोगों को मैं जानता हूं कि "अपस्ट्रीम" अधिक सहज है, जो केवल वर्तमान शाखा को धक्का देता है।

इन सेटिंग्स में से प्रत्येक पर विवरण गिट-कॉन्फिग मैन पेज में पाया जा सकता है ।

दूसरे विचार पर , आपके प्रश्न को फिर से पढ़ने पर, मुझे लगता है कि आप यह सब जानते हैं। मुझे लगता है कि जो आप वास्तव में खोज रहे हैं वह मौजूद नहीं है। कैसे एक काम के बारे में कुछ (अप्रकाशित):

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

1

Ceztko के जवाब की मदद से मैंने अपने जीवन को आसान बनाने के लिए यह छोटा सहायक कार्य लिखा:

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
}

यदि यह अभी तक सेटअप नहीं किया गया है, तो यह वर्तमान शाखा को मूल में धकेलता है और दूरस्थ ट्रैकिंग शाखा को भी सेट करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.