आप इसे केवल एक git कमांड के साथ नहीं कर सकते, लेकिन आप इसे एक bash लाइन के साथ स्वचालित कर सकते हैं।
एक पंक्ति के साथ सभी शाखाओं को सुरक्षित रूप से अपडेट करने के लिए, यहाँ मैं क्या करूँ:
git fetch --all && for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*') ; do git checkout $branch && git merge --ff-only || break ; done
यदि यह एक शाखा को तेजी से अग्रेषित नहीं कर सकता है या किसी त्रुटि का सामना कर सकता है, तो यह आपको रोक देगा और आपको उस शाखा में छोड़ देगा ताकि आप वापस नियंत्रण ले सकें और मैन्युअल रूप से विलय कर सकें।
यदि सभी शाखाएं तेजी से अग्रेषित की जा सकती हैं, तो यह उस शाखा के साथ समाप्त हो जाएगी जो आप वर्तमान में थे, आपको छोड़कर जहां आप अपडेट करने से पहले थे।
स्पष्टीकरण:
बेहतर पठनीयता के लिए, इसे कई लाइनों में विभाजित किया जा सकता है:
git fetch --all && \
for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*')
do git checkout $branch && \
git merge --ff-only || break
done
git fetch --all && ...
=> सभी रीमेक से फ़ॉर्म्स प्राप्त होते हैं और यदि कोई त्रुटि नहीं हुई है, तो अगले कमांड के साथ जारी रखें।
git branch | sed '/*/{$q;h;d};$G' | tr -d '*'
=> के आउटपुट से git branch
, sed
लाइन को ए के साथ *
ले जाएं और इसे अंत तक ले जाएं (ताकि वर्तमान शाखा अंतिम रूप से अपडेट हो जाए)। फिर tr
बस हटा दें *
।
for branch in $(...) ; do git checkout $branch && git merge --ff-only || break ; done
=> पिछली कमांड से प्राप्त प्रत्येक शाखा के नाम के लिए, इस शाखा की जाँच करें और तेजी से आगे बढ़ने के साथ विलय करने का प्रयास करें। यदि यह विफल हो जाता है, break
तो कॉल किया जाता है और कमांड यहां बंद हो जाती है।
बेशक, आप बदल सकते हैं git merge --ff-only
के साथ git rebase
अगर यह होता है कि आप क्या चाहते।
अंत में, आप इसे अपने bashrc में एक उपनाम के रूप में रख सकते हैं :
alias git-pull-all='git fetch --all && for branch in $(git branch | sed '\''/*/{$q;h;d};$G'\'' | tr -d "*") ; do git checkout $branch && git merge --ff-only || break ; done'
या यदि आप 'और' के साथ खिलवाड़ करने से डरते हैं, या आप अपने संपादक में सिंटैक्टिक पठनीयता रखना पसंद करते हैं, तो आप इसे एक समारोह के रूप में घोषित कर सकते हैं:
git-pull-all()
{
git fetch --all && for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*') ; do git checkout $branch && git merge --ff-only || break ; done
}
बक्शीश:
उन लोगों के लिए जो इस sed '/*/{$q;h;d};$G'
भाग पर स्पष्टीकरण चाहते हैं :
/*/
=> एक के साथ लाइन के लिए खोजें *
।
{$q
=> यदि यह अंतिम पंक्ति में है, तो पद छोड़ें (हमें कुछ भी करने की आवश्यकता नहीं है क्योंकि वर्तमान शाखा पहले से ही सूची में अंतिम है)।
;h;d}
=> अन्यथा, होल्ड बफर में लाइन को स्टोर करें और इसे वर्तमान सूची स्थिति में हटा दें।
;$G
=> जब यह अंतिम पंक्ति तक पहुंचता है, तो होल्ड बफर की सामग्री को जोड़ दें।