full - integrate git bash with visual studio code




एक ही शाखा के रूप में किसी अन्य शाखा से सभी परिवर्तनों को मर्ज करें (4)

गिट में, क्या एक शाखा से सभी परिवर्तनों को दूसरे में विलय करने का कोई तरीका है, लेकिन एक ही समय में एक ही प्रतिबद्धता के लिए स्क्वैश?

मैं अक्सर एक अलग शाखा में एक नई सुविधा पर काम करता हूं और नियमित रूप से बैकअप के लिए या अन्यथा मशीन पर काम करने के लिए नियमित रूप से प्रतिबद्ध / धक्का देता हूं। ज्यादातर लोग कहते हैं कि "फ़ीचर xxx डब्ल्यूआईपी" या कुछ अनावश्यक है।

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

क्या इसे करने का कोई आसान तरीका है?

वैकल्पिक रूप से, एक आदेश के बारे में कैसे एक शाखा पर काम करता है, जिस बिंदु से इसे ब्रांच किया गया था?


अपनी फीचर शाखा पर git rebase -i master प्रयास करें। फिर आप काम को गठबंधन करने के लिए 'स्क्वैश' पर एक 'पिक' के अलावा सभी को बदल सकते हैं। स्क्वैशिंग के साथ स्क्वैशिंग प्रतिबद्धता देखें

अंत में, आप मास्टर शाखा से विलय कर सकते हैं।


आप इसे "रिबेस" कमांड के साथ कर सकते हैं। चलो शाखाओं को "मुख्य" और "फीचर" कहते हैं:

git checkout feature
git rebase main

रिबेस कमांड "फीचर" पर सभी कामों को फिर से चलाएगा क्योंकि एक माता-पिता के साथ "मुख्य" के बराबर प्रतिबद्ध होगा।

"फीचर" बनाया गया था (या सबसे हालिया विलय के बाद से) "मुख्य" बदल गया है, तो आप git rebase main git merge main से पहले git merge main को चलाने के लिए चाहते हैं। इस तरह, आपके पास विलय संघर्ष होने पर भी आपका पूरा इतिहास है।

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

git checkout main
git merge feature

एक अच्छा अवलोकन के लिए संकल्पनात्मक रूप से समझने के rebase पेज देखें


मैं अपने मास्टर में सभी कामों को स्क्वैश करना चाहता था। मैंने इस असफल तरीके से कोशिश की:

$ git checkout --orphan new_master
$ git merge --squash master
fatal: Squash commit into empty head not supported yet

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

$ tar cf /tmp/git.tar --exclude .git .
$ git checkout --orphan new_master
$ tar xf /tmp/git.tar
$ git commit -m "Initial commit"

जो अच्छी तरह से काम किया।


git merge --squash <feature branch> एक अच्छा विकल्प है। "गिट प्रतिबद्ध" आपको यह रखने के लिए अपनी पसंद के साथ सभी फीचर शाखा प्रतिबद्ध संदेश बताता है।

कम प्रतिबद्ध विलय के लिए।

गिट मर्ज एक्स एक्स टाइम्स - रीट हेड ^ - सॉफ़्ट फिर गिट प्रतिबद्ध करें।

जोखिम - हटाई गई फाइलें वापस आ सकती हैं।





git