2011-03-01 8 views
11

मैं एक बैश स्क्रिप्ट लिख रहा हूं, और मैं एक टैग चेकआउट करना चाहता हूं और फिर मैंने कहां से शुरू किया है चेकआउट करना चाहता हूं।गिट pushd और popd? यानी, चेकआउट अंतिम राज्य

मैंने git co [email protected]{1} की कोशिश की, लेकिन जब मास्टर से शुरू होता है, तो मुझे मास्टर के प्रतिबद्धता SHA पर ले जाता है लेकिन एक अलग सिर के साथ।

क्या कुछ ऐसा है जैसे pushd & popd गिट के लिए?

उत्तर

21

git checkout @{-1} जिसे संक्षिप्त रूप से git checkout - पर संक्षिप्त किया जा सकता है।

From the manpage:

एक विशेष मामला, "@ {- एन}" के रूप में वाक्य रचना एन वें पिछले शाखा चेक शाखा (बजाय अलग करने के लिए)। आप भी निर्दिष्ट कर सकते हैं - जो "@ {- 1}" के साथ समानार्थी है।

+1

यह अद्भुत है! उस सरल तरीके से +1। – eckes

+1

गिट के किस संस्करण में आप 'गिट चेकआउट -1' कर सकते हैं? यह गिट 1.7.1 में काम नहीं करता है और मैन पेज का कहना है कि 'गिट चेकआउट' 'गिट चेकआउट @ {- 1}' –

+0

@ मार्क लॉन्गयर के बराबर है: कोई नहीं। मैंने गलत समझा। यह बात बताने के लिए धन्यवाद। मैं इसे ठीक कर दूंगा। – wnoise

0

अपनी स्क्रिप्ट में, पहले वर्तमान शाखा (this answer में लिखा की तरह) को बचाने:

branch_name="$(git symbolic-ref HEAD 2>/dev/null)" || 
branch_name="(unnamed branch)"  # detached HEAD 
branch_name=${branch_name##refs/heads/} 

तो जाने के लिए और

git checkout -b tag_branch tag_name 

करने के लिए टैग आप चाहते हैं चेकआउट क्या आप पर करना चाहते हैं उस शाखा, फिर पुरानी शाखा को फिर से चेकआउट करें:

git checkout $branch_name 

यही है।

3

संपादित करें: wnoise के सुझाव यदि आप एक स्पष्ट इतिहास रास्ता pushd/popd करता है रखने के लिए नहीं करना चाहते हैं काम करेंगे। यदि आप करते हैं (और अपने एलआरयू को प्रभावित करने के लिए सामान्य checkout नहीं चाहते हैं):

मुझे कुछ भी पता नहीं है जो आप बॉक्स से बाहर करना चाहते हैं, लेकिन साथ में कुछ साथ हैक करना मुश्किल नहीं है उन पंक्तियों। यदि आप अपने पीएटीएच में git-foo नाम की एक फ़ाइल जोड़ते हैं, तो आपको एक नया git foo कमांड मिलता है। तो, git-pushd दिखाई दे सकता है जैसे:

#!/bin/bash 

SUBDIRECTORY_OK=1 
. $(git --exec-path)/git-sh-setup 

git symbolic-ref HEAD | sed s_refs/heads/__ >> $GIT_DIR/.pushd 
git checkout "[email protected]" 

और git-popd:

#!/bin/bash 

SUBDIRECTORY_OK=1 
. $(git --exec-path)/git-sh-setup 

REF=$(head -n1 $GIT_DIR/.pushd) 

[ -n "$REF" ] || die "No refs to pop" 
git checkout "$REF" && sed -i -e '1d' $GIT_DIR/.pushd 
संबंधित मुद्दे