Git का उपयोग करते हुए एक पिछली प्रतिबद्ध से शाखा


1797

अगर मेरे पास n कमिट है, तो मैं n-3 से कैसे शाखा लगा सकता हूं?

मैं हर कमिट का हैश देख सकता हूं।

जवाबों:


2543

आप एक हैश के माध्यम से शाखा बना सकते हैं:

git branch branchname <sha1-of-commit>

या एक प्रतीकात्मक संदर्भ का उपयोग करके:

git branch branchname HEAD~3

इसे बनाते समय शाखा की जांच करना

git checkout -b branchname <sha1-of-commit or HEAD~3>

42
Git 1.8.2 मुझे पहले फॉर्म के लिए शॉर्ट sha1 का उपयोग करने दें।
दान बेनामी

53
@MattFenwick Git आपको हर जगह शॉर्ट हैश का उपयोग करने की अनुमति देगा, जब तक कि शॉर्ट हैश रिपॉजिटरी में '' अद्वितीय '' है। तो अगर यह काम नहीं किया, हैश से एक और चरित्र जोड़ने का प्रयास करें।
प्रहार

29
नई शाखा को सर्वर पर सही ढंग से धकेलने के लिए .. इस अंतिम चरण की आवश्यकता है:git push origin BRANCH_NAME
जीन बो

3
<sha1-of-commit>रन से एक शाखा शुरू करने के लिए, git checkout -b <name-of-branch> <sha1-of-commit>लेकिन यदि शाखा पहले से मौजूद हैgit checkout -B <name-of-branch> <sha1-of-commit>
Mostafazh

258

Github.com पर ऐसा करने के लिए:

  1. अपने प्रोजेक्ट पर जाएं।
  2. "कमिट" पर क्लिक करें।
  3. जिस शाखा से आप शाखा लगाना चाहते हैं, उस पर <> ("इतिहास में इस बिंदु पर भंडार ब्राउज़ करें") पर क्लिक करें।
  4. ऊपरी बाएँ में "ट्री: xxxxxx" पर क्लिक करें। भाषा सांख्यिकी बार के ठीक नीचे, आपको "शाखा खोजें या बनाएं" का विकल्प मिलेगा (बस एक नई शाखा के नाम में टाइप करें)पिछली प्रतिबद्ध से शाखा

4
सवाल जीथब के बारे में नहीं है, लेकिन गिट के बारे में है। अधिकांश गिट सर्वर जीथब नहीं हैं।
एंडर्स तोर्बलाद

46
इस तथ्य के बावजूद कि यह गिटब नहीं है, यह अभी भी काफी मददगार था!
लिज

दुर्भाग्य से यह अभी भी अन्य कमिट से परिवर्तन दिखाता है, जिसे मैं टालना चाहता था, यही कारण है कि मैंने इस प्रश्न के लिए खोज की
मैक्सिम

83

जादू को रीसेट करके किया जा सकता है ।

  1. एक नई शाखा बनाएं और इसे स्विच करें (इसलिए आपके सभी नवीनतम आवागमन यहां संग्रहीत हैं)

    git checkout -b your_new_branch

  2. अपनी पिछली कार्य शाखा में वापस जाएं (मान लें कि यह मास्टर है)

    git checkout master

  3. नवीनतम एक्स कमिट्स निकालें, मास्टर को साफ रखें

    git reset --hard HEAD~x # in your case, x = 3

इस क्षण से, सभी नवीनतम एक्स कमिट केवल नई शाखा में हैं, आपकी पिछली कार्य शाखा (मास्टर) में नहीं।


7
यह वही है जो मैं देख रहा था क्योंकि यह मास्टर से कमिट्स को हटाता है और इसे बनाता है जैसे कि आपको उन कमिट्स को बनाने से पहले ब्रांच बनाने के लिए याद किया गया था। धन्यवाद।
सुपरबेक

7
बस यह मत भूलो कि git reset --hardयह एक अच्छा विचार नहीं है यदि आप पहले से ही उत्पत्ति के लिए प्रतिबद्ध हैं ...
लुइसफ

1
आप कर सकते हैं git push --force यदि आप पहले से ही शाखा धक्का दिया था
सैन्य

लेकिन उपयोग करते समय वास्तव में सावधान रहें - जब blog.developer.atlassian.com/force-with-lease
18

74

यदि आप सुनिश्चित नहीं हैं कि आप पहले से किस शाखा में जाना चाहते हैं, तो आप कमिट की जाँच कर सकते हैं और उनके कोड की जांच कर सकते हैं (देखें स्रोत, संकलन, परीक्षण)

git checkout <sha1-of-commit>

एक बार जब आप पाते हैं कि आप से शाखा करना चाहते हैं, तो कमिट के भीतर (यानी पहले मास्टर के पास वापस जाने के बिना) सामान्य तरीके से एक शाखा बनाकर कर सकते हैं:

git checkout -b <branch_name>

22
git checkout -b <branch-name> <sha1-of-commit>

1
यह " git branch branchname <sha1-of-commit>" (स्वीकृत उत्तर से) कैसे भिन्न है ?
पीटर मोर्टेंसन

मुझे नहीं पता। मुझे लगता है कि वे बराबर हैं। मैं हमेशा git checkout -bएक नई शाखा बनाने के लिए उपयोग करता हूं ।
टायलर लॉन्ग

10
stackoverflow.com/a/7987711/3590629 git शाखा ... शाखा बनाता है, लेकिन आपको वर्तमान शाखा पर छोड़ देता है। git checkout -b ... शाखा बनाता है और आपको इसमें स्विच करता है।
esme_louise

9

अपने गितुब रेपो पर इसे करने का एक त्वरित तरीका निम्नानुसार होगा:

  • अपनी शाखा से विशिष्ट प्रतिबद्ध खोजें
  • SHA आईडी के अलावा, 'इतिहास में इस बिंदु पर रेपो ब्राउज़ करें' पर क्लिक करें
  • यहां आप इस कमिट से एक नई ब्रांच बना सकते हैं यहां छवि विवरण दर्ज करें

1
यह वास्तव में पुराना है
regetskcob

2
सवाल जीथब के बारे में नहीं है।
एंडर्स तोर्बलाद

8

बस चलाते हैं:

git checkout -b branch-name <commit>

उदाहरण के लिए :

git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8

checkoutपैरामीटर के साथ कमांड -bएक नई शाखा का निर्माण करेगा और यह यह करने के लिए आप में परिवर्तित कर देगा


1
मुझे ये वाला काफ़ी पसंद है। धन्यवाद
मूर्ख

क्या एक सुविधा शाखा के SHA के आधार पर एक शाखा बनाना संभव है जिसे पुल अनुरोध के माध्यम से हटाया गया था? या क्या मुझे मास्टर पर पुल अनुरोध की ओर से शाखा करनी है?
15:29 बजे user2966445

टर्मिनल का उपयोग करके अपनी परियोजना के फ़ोल्डर में चलाएं git fetchऔर git branchकमांड करें, फिर देखें कि क्या सुविधा शाखा मौजूद है, यदि यह मामला है, तो हाँ, निश्चित रूप से आप नष्ट शाखाओं से एक शाखा बनाने में सक्षम नहीं होंगे, आप मामले में एक शाखा हटाने को भी वापस कर सकते हैं। शाखा चला गया है
d1jhoni1b

4

एक महान संबंधित प्रश्न है: कैसे आप इस --helpविकल्प का उपयोग कर समझाना है? चलो यह करके देखें:

git branch --help

हम यह आउटपुट देखते हैं:

NAME
       git-branch - List, create, or delete branches    

SYNOPSIS
       git branch [--color[=<when>] | --no-color] [-r | -a]
               [--list] [-v [--abbrev=<length> | --no-abbrev]]
               [--column[=<options>] | --no-column]
               [(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
               [--points-at <object>] [<pattern>...]
       git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
       git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
       git branch --unset-upstream [<branchname>]
       git branch (-m | -M) [<oldbranch>] <newbranch>
       git branch (-d | -D) [-r] <branchname>...
       git branch --edit-description [<branchname>]

Gobbledegook।

"प्रतिबद्ध" शब्द के लिए बाद के पाठ के माध्यम से खोजें। हम यह पाते हैं:

   <start-point>
       The new branch head will point to this commit. It may be given as a branch name, a
       commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.

हम कहीं जा रहे हैं!

अब, gobbledegook की इस पंक्ति पर ध्यान दें:

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

इस के लिए संघनक:

git branch <branchname> [<start-point>]

और हो गया।


1
मुझे गिट से नफरत है। धन्यवाद।
बायरन व्हिटलॉक

4

ग्रहण में ऐसा करने के लिए:

  • "Git Repository Exploring" परिप्रेक्ष्य पर जाएं।
  • "टैग" का विस्तार करें और उस प्रतिबद्धता को चुनें, जिसमें से आप शाखा बनाना चाहते हैं।
  • प्रतिबद्ध पर राइट क्लिक करें और "ब्रांच बनाएँ" चुनें।
  • एक शाखा नाम प्रदान करें।

यह आपके लिए एक स्थानीय शाखा बनाएगा। फिर जब भी आप अपने परिवर्तनों को आगे बढ़ाते हैं, तो आपकी शाखा को दूरस्थ सर्वर पर धकेल दिया जाएगा।


3

आप इसे Stash में कर सकते हैं।

  1. कमिट पर क्लिक करें
  2. स्क्रीन के दाईं ओर "इस टैग को टैग करें" पर क्लिक करें
  3. फिर आप अपने द्वारा बनाए गए टैग से नई शाखा बना सकते हैं।

क्या जीयूआई है? GitHub?
ओस्ट्रिचोफिल

एटलसियन स्टैश
डेविड रुआन

3

मैं ऐसा करने में सक्षम था:

git branch new_branch_name `git log -n 1 --skip 3 --format=%H`

जहाँ आपको स्किप वैल्यू डालना होगा। 0 नवीनतम है, 1 पिछला है, 2 उससे पहले की प्रतिबद्धता है, आदि।


4
सिर्फ उपयोग क्यों नहीं HEAD~1(जहां 1 निर्दिष्ट 1 कमिट वापस)?
jduncanator

1
आपका रास्ता चयनित उत्तर द्वारा कवर किया गया है, और ठीक काम करता है। मेरा चयनित उत्तर की तुलना में एक अलग तरीका है।
माइक ग्राफ

3

यह एक आदेश के साथ शाखा बनाता है:

git push origin <sha1-of-commit>:refs/heads/<branch-name>

मैं ऊपर प्रकाशित लोगों की तुलना में इस तरह से बेहतर पसंद करता हूं, क्योंकि यह तुरंत शाखा बनाता है (बाद में अतिरिक्त पुश कमांड की आवश्यकता नहीं होती है)।


3

Sourcetree का उपयोग करना | सबसे आसान तरीका।

  • सबसे पहले, उस शाखा की जाँच करें जिसे आप एक नई शाखा बनाने के लिए विशिष्ट प्रतिबद्ध लेना चाहते हैं।
  • फिर टूलबार को देखें, रिपॉजिटरी> ब्रांच चुनें ... शॉर्टकट कमांड + शिफ्ट + बी है।
  • और उस विशिष्ट कमेट का चयन करें जिसे आप लेना चाहते हैं। और एक नया ब्रांच नाम दें फिर एक ब्रांच बनाएं!

यहां छवि विवरण दर्ज करें


अंत में यह उपयोगी उत्तर मिला। धन्यवाद
Firda Sahidi

1

यह जो मैंने किया है:

C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'

C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
  master
* responsivenavigation

इस मामले में, शाखा 8a75b001096536b3216022484af3026aa9c7bb5bसे संबंधित और पुरानी प्रतिबद्धता थी master


1

गिट रिपॉजिटरी के किसी विशेष कमिट पर जाएं

कभी-कभी एक गिट रिपॉजिटरी पर काम करते समय आप एक विशिष्ट समय पर अपनी परियोजना का स्नैपशॉट लेने के लिए एक विशिष्ट प्रतिबद्ध (संशोधन) पर वापस जाना चाहते हैं। यह करने के लिए कि आपको कमिटमेंट का SHA-1 हैश चाहिए, जिसे आप आसानी से कमांड के साथ लॉग चेक कर सकते हैं:

git log --abbrev-commit --pretty=oneline

जो आपको सभी आवागमन और SHA-1 हैश के लघु संस्करण की एक कॉम्पैक्ट सूची देगा।

अब जब आप जानते हैं कि आप जिस कमिटमेंट में जाना चाहते हैं उसका हैश निम्न 2 कमांडों में से एक का उपयोग कर सकता है:

git checkout HASH

या

git reset --hard HASH

चेक आउट

git checkout <commit> <paths>

दिए गए कमिट में अपने राज्य के साथ रास्तों की वर्तमान स्थिति को बदलने के लिए गिट बताता है। पथ फ़ाइल या निर्देशिका हो सकते हैं।

यदि कोई शाखा नहीं दी जाती है, तो जीआईएटी हेड कमिट करता है।

git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.

यदि कोई रास्ता नहीं दिया गया है, HEADतो दिए गए कमिट में कदम रखें (जिससे आप बैठे हैं और काम कर रहे हैं) को बदल दें।

git checkout branch //means switching branches.

रीसेट

git reset <commit> //re-sets the current pointer to the given commit.

यदि आप एक शाखा पर हैं (आप आमतौर पर होना चाहिए), HEADऔर इस शाखा को प्रतिबद्ध करने के लिए ले जाया जाता है।

यदि आप अलग HEADस्थिति में हैं, तो git रीसेट केवल चलता है HEADशाखा को रीसेट करने के लिए, पहले इसे देखें।

यदि आप git रीसेट और git चेकआउट के बीच अंतर के बारे में अधिक जानना चाहते हैं तो मैं आधिकारिक git ब्लॉग पढ़ने की सलाह दूंगा


2
आपके उत्तर के लिए धन्यवाद, FYI करें: यह: git log --abbrev-commit --pretty=oneline संक्षिप्त किया जा सकता हैgit log --oneline
सुहैब को

0

कमेटी का चयन करें

जीयूआई जीयूआई उपयोगकर्ताओं के लिए आप सभी इतिहास (यदि आवश्यक हो) की कल्पना कर सकते हैं और फिर उस शाखा पर राइट क्लिक कर सकते हैं जहां से आप शाखा का नाम दर्ज करना चाहते हैं।

शाखा का नाम दर्ज करें

सारे इतिहास की कल्पना करो


यह तभी काम करेगा जब उपयोगकर्ता किसी भी यूआई आधारित ओएस जैसे विंडोज और मैक का उपयोग कर रहा है
सौरभ एलसीडी

ये सही है। मेरा जवाब विशेष रूप से "गिट जीयूआई उपयोगकर्ताओं के लिए ..." शब्दों के साथ शुरू होता है। मैंने कोई जवाब नहीं दिया है जो सभी के लिए काम करेगा - जो पहले से ही किया गया है। मैंने एक वैकल्पिक तरीका दिया है जो बहुत से लोगों के लिए आसान हो सकता है। मुझे लगता है कि मेरे उत्तर को नापसंद करने का कारण यह है क्योंकि इसका समाधान हर किसी के लिए नहीं है, लेकिन यह पहले से ही एक हजार अपवित्रों के साथ मौजूद है। हालाँकि यह मेरे उत्तर को "Git GUI उपयोगकर्ताओं के लिए" गलत नहीं बनाता है! जीयूआई में नया ब्रांच बनाना है। मुझे संदेह है कि मैं इसका उपयोग करने वाला दुनिया का एकमात्र व्यक्ति हूं!
इवान

0

विजुअल स्टूडियो 2015 और 2017 में स्वीकृत उत्तर देने के लिए:

परिवर्तन में क्लिक करें

परिवर्तन में क्लिक करें (ऊपर लाल तीर)

इतिहास देखने के लिए क्रिया पर क्लिक करें

क्रिया में क्लिक करें (ऊपर लाल तीर) और ड्रॉपडाउन मेनू पर इतिहास देखें पर क्लिक करें

और नया टैब खुलेगा:

इतिहास टैब

और आपको पिछली कमेट पर राइट क्लिक करना चाहिए जो आप चाहते हैं कि आपका कोड वापस लौट जाए: राइट पिछली कमिट पर क्लिक करें

एक नई शाखा और वॉयला चेकआउट करने के लिए चुनें!

नीचे, हालांकि ओपी प्रश्न का हिस्सा नहीं है, लेकिन मैं दोनों बहुत कुछ करता हूं और यह एक ट्रिक स्टेप है, कम से कम मेरे लिए: यदि आप एक नई शाखा को चेकआउट किए बिना, एक पिछली प्रतिबद्ध वापस करना चाहते हैं, तो वापस मत चुनें ( ?); आपको नए सिरे से परिभाषित या निर्धारित करना चाहिए:

दाईं ओर पिछली कमिट पर क्लिक करें और फिर से परिभाषित करें


कृपया अपने जवाब अंग्रेजी में साझा करें क्योंकि हम में से अधिकांश यहाँ अंग्रेजी के अलावा किसी अन्य विदेशी भाषा को नहीं बोलते या जानते हैं।
शमीउल हसन रुम्मन

@ShamiulHasanRumman, पाठ में जो चित्रों को समझाते हैं - आमतौर पर नीचे - मैंने रेड एरो शब्द का अंग्रेजी में अनुवाद किया है, जैसे कि क्लिक इन एक्शन (लाल तीर ऊपर) यह पर्याप्त नहीं था?
मार्सेलो स्कोनो

@MarceloScofano, क्या स्क्रीनशॉट लेने से पहले संपादक को अंग्रेजी में बदलना मुश्किल था?
एंड्रयू सर्डू

1
@AndreiSurdu: क्योंकि मुझे कभी ऐसा करने की आवश्यकता नहीं थी, मुझे उम्मीद थी कि अंग्रेजी में बदलने के लिए मुझे कुछ अतिरिक्त पैकेज स्थापित करने होंगे। लेकिन आप सही हैं, इसके लिए केवल वी.एस. रिस्टार्ट चाहिए, इंस्टालेशन बिल्कुल नहीं। मैं खाली समय मिलते ही उपरोक्त चित्रों को बदलने की कोशिश करूँगा।
मार्सेलो स्कोफ़ानो

0

यदि आप स्रोत पेड़ का उपयोग करते हैं जो बहुत सीधे आगे है।

  • जहाँ से आपको एक नई शाखा बनाने की आवश्यकता है, उस पर राइट क्लिक करें
  • 'शाखा' पर क्लिक करें
  • संवाद में नई शाखा का नाम दिखाई दिया और 'शाखा बनाएँ' पर क्लिक करें

0

यदि आप कमांड-लाइन आधारित समाधान की तलाश कर रहे हैं, तो आप मेरे उत्तर को अनदेखा कर सकते हैं। मैं आपको GitKraken का उपयोग करने का सुझाव देने वाला हूं । यह एक असाधारण git UI क्लाइंट है। यह होमपेज पर Git ट्री दिखाता है। आप बस उन्हें देख सकते हैं और जान सकते हैं कि परियोजना के साथ क्या हो रहा है। बस एक विशिष्ट प्रतिबद्ध का चयन करें, उस पर राइट-क्लिक करें और 'यहां एक शाखा बनाएं' विकल्प चुनें। यह आपको शाखा नाम दर्ज करने के लिए एक पाठ बॉक्स देगा। शाखा का नाम दर्ज करें, 'ठीक' चुनें और आप सेट हैं। यह वास्तव में उपयोग करने के लिए बहुत आसान है।

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