git - गिट गिटहब से एक निश्चित शाखा खींचें
merge branch (6)
मेरे पास कई शाखाओं वाला एक प्रोजेक्ट है। मैं उन्हें GitHub में धक्का दे रहा हूं, और अब कोई और उन पर काम कर रहा है, मुझे गिटहब से खींचने की जरूरत है। यह मास्टर में ठीक काम करता है। लेकिन कहें कि मेरे पास शाखा xyz है। मैं गिटहब से शाखा xyz कैसे खींच सकता हूं और इसे अपने लोकहोस्ट पर शाखा xyz में विलय कर सकता हूं?
मेरे पास वास्तव में मेरा जवाब है: गिट में शाखाओं को पुश करें और खींचें
लेकिन मुझे एक त्रुटि मिलती है "! [खारिज]" और "नॉन फास्ट फॉरवर्ड" के बारे में कुछ।
कोई सुझाव?
लेकिन मुझे एक त्रुटि मिलती है "! [खारिज कर दिया]" और "नॉन फास्ट फॉरवर्ड" के बारे में कुछ
ऐसा इसलिए है क्योंकि गिट शाखाओं से आपके वर्तमान मास्टर में परिवर्तनों को विलय नहीं कर सकता है। मान लीजिए कि आपने शाखा master
जांच की है, और आप रिमोट शाखा other-branch
शाखा में विलय करना चाहते हैं। जब आप ऐसा करते हैं:
$ git pull origin other-branch
गिट मूल रूप से ऐसा कर रहा है:
$ git fetch origin other-branch && git merge other-branch
यही है, एक pull
सिर्फ एक merge
बाद एक merge
। हालांकि, जब pull
, तो गिट केवल other-branch
विलय करेगा यदि यह तेजी से आगे विलय कर सकता है। एक फास्ट फॉरवर्ड विलय एक मर्ज है जिसमें आप जिस शाखा में विलय करने की कोशिश कर रहे हैं उसका सिर उस शाखा के सिर का प्रत्यक्ष वंशज है जिसे आप विलय करना चाहते हैं। उदाहरण के लिए, यदि आपके पास यह इतिहास वृक्ष है, तो other-branch
विलय करने से परिणामस्वरूप तेजी से आगे बढ़ने का परिणाम होगा:
O-O-O-O-O-O
^ ^
master other-branch
हालांकि, यह एक तेजी से आगे विलय नहीं होगा:
v master
O-O-O
\
\-O-O-O-O
^ other-branch
अपनी समस्या को हल करने के लिए, पहले रिमोट शाखा लाएं:
$ git fetch origin other-branch
फिर इसे अपनी वर्तमान शाखा में विलय करें (मैं उस master
), और किसी विलय विवादों को ठीक करें:
$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit # And commit the merge!
आप निम्न शाखाओं के साथ एक शाखा को शाखा में खींच सकते हैं।
git pull {repo} {remotebranchname}:{localbranchname}
git pull origin xyz:xyz
जब आप मास्टर शाखा में हों तो आप पहली बार शाखा की जांच भी कर सकते हैं:
git checkout -b xyz
यह मास्टर से एक नई शाखा, "xyz" बनाता है और सीधे इसे जांचता है।
फिर आप करते हैं:
git pull origin xyz
यह नई शाखा को आपकी स्थानीय xyz
शाखा में खींचता है।
इससे मुझे दूसरे में विलय करने से पहले दूरस्थ शाखा प्राप्त करने में मदद मिली:
git fetch repo xyz:xyz
git checkout xyz
बस अपनी रिमोट शाखाओं को स्पष्ट रूप से ट्रैक करें और एक साधारण git pull
केवल वही करेगा जो आप चाहते हैं:
git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name
या फोर्किंग पर गिटहब दस्तावेज़ के साथ और भी अधिक उपयुक्त:
git branch -f new_local_branch_name upstream/remote_branch_name
सबसे अच्छा तरीका है:
git checkout -b <new_branch> <remote repo name>/<new_branch>
git fetch
शाखाओं की नवीनतम सूची पकड़ लेंगे।
अब आप git checkout MyNewBranch
कर सकते हैं
किया हुआ :)
अधिक जानकारी के लिए दस्तावेज़ देखें: गिट fetch