प्रौद्योगिकी साझेदारी

[Git Study Notes] अध्यायः ४ git rebase rebase operation तथा तत्सम्बद्धाः उदाहरणानि (भागः १)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

अध्यायः ४ पुनः आधारसञ्चालनानि तथा तत्सम्बद्धाः प्रकरणाः

【सम्बन्धित विषय】

  • भविष्यति commit संस्करणं अन्यशाखायां पुनः आधारयन्तु
  • संस्करणविग्रहस्य सन्दर्भे पुनः आधारं कुर्वन्तु
  • निर्दिष्टे संस्करणे अन्तरक्रियाशीलं पुनः आधारं कुर्वन्तु
  • संस्करणानाम् समुच्चयार्थं अन्तरक्रियाशीलपुनर्आधारीकरणस्य उपयोगः
  • अन्तरक्रियाशीलपुनर्आधारीकरणस्य उपयोगेन प्रतिबद्धानां परिवर्तनम्
  • स्वचालित समुच्चय संस्करण

४.० पुनः आधारीकरणस्य परिचयः

पुनः आधार ( .Rebasing ) इति Git इत्यस्य अत्यन्तं शक्तिशाली विशेषता अस्ति ।पुनः आधारीकरणं एकः प्रकारः क्रिया अस्ति: यदि कcommit एकः प्रारम्भिकं आधारितम् आसीत्commit of thenएकः पुनः आधारं कुर्वन्तु, इत्यर्थः एकः आधारितं भवति संचालन।

निम्नलिखितप्रदर्शनप्रकरणे भवन्तः पश्यन्ति यत् पुनः आधारीकरणं प्रायः यथा दृश्यते तथा सुलभं न भवति ।

४.१ इच्छा commit संस्करणं अन्यशाखायां पुनः आधारयन्तु

प्रथमं सरलतमं प्रकारं rebase operation पश्यामः । सम्बद्धं सज्जताकार्यम् : नूतनसञ्चिकां प्रवर्तयन्तु, प्रस्तुतं कुर्वन्तु, सामग्रीं परिवर्तयन्तु, पुनः प्रस्तूयताम्।एवं प्रकारेण स्थानीयानां द्विगुणाः भवन्तिcommit संस्करण।

अद्यापि सह jgit पुस्तकालयः उदाहरणार्थम् : १.

# Clone jgit repo into chapter4
$ git clone https://git.eclipse.org/r/jgit/jgit chapter4
$ cd chapter4
# Checkout a new branch
$ git checkout -b rebaseExample --track origin/stable-3.1
# Create the 1st commit
$ echo "My Fishtank
    
Gravel, water, plants
Fish, pump, skeleton" > fishtank.txt
$ git add fishtank.txt
$ git commit -m "My brand new fishtank"
# Create the 2nd commit
$ echo "mosquitos" >> fishtank.txt
$ git add fishtank.txt
$ git commit -m "Feeding my fish"
# Rabase to stable-3.2
$ git rebase origin/stable-3.2
Successfully rebased and updated refs/heads/rebaseExample.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

पुनः आधारीकरणात् पूर्वं : १.

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

पुनः आधारीकरणानन्तरं : १.

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

git rebase निष्पादनप्रक्रिया : १.

  1. उपरि गच्छतु HEAD पुनः आधारेण सूचितस्य लक्ष्यशाखायाः मध्ये सामान्यं संस्करणं (merge-base);
  2. आधारितम् merge-base, लक्ष्यशाखायां सर्वाणि अनुपलब्धानि संस्करणाः अन्वेष्टुम्;
  3. लक्ष्यशाखायां एकैकशः लुप्तसंस्करणं प्रयोक्तुं प्रयतध्वम् ।

४.२ संस्करणविग्रहेषु पुनः आधारीकरणं करणम्

यदि क commit संस्करणं वा कbranch शाखां भिन्नं प्रति पुनः आधारयन्तुHEAD , संस्करणविग्रहाः भवितुं शक्नुवन्ति ।अस्मिन् क्षणे विग्रहस्य समाधानं कृत्वा आदेशः चालनीयःgit rebase --continue, पुनः आधारः सम्पन्नः भवितुम् अर्हति ।

अस्मिन् खण्डे उदाहरणानि विग्रहसन्निधौ पुनः आधारीकरणं कथं साधयितुं शक्नुवन्ति इति दर्शयन्ति ।खण्डे ४.१ प्रदर्शितस्य अन्तिमपरिणामस्य अनुसरणं कृत्वा, अस्मिन् समयेrebaseExample शाखायाः पुनः आधारः कृतः अस्तिstable-3.2 शाखा।उदाहरणं stable-3.1 तः नूतनशाखायाः पुनः परीक्षणं करिष्यति तथा च a and योजयिष्यतिrebaseExample समानशाखानाम्ना किन्तु असङ्गतसामग्रीयुक्ताः पाठसञ्चिकाःfishtank.txt

# Checkout rebaseExample2
$ git checkout -b rebaseExample2 --track origin/stable-3.1
# Add a new commit
$ echo "My Fishtank
Pirateship, Oister shell
Coconut shell
">fishtank.txt
$ git add fishtank.txt
$ git commit -m "My brand new fishtank"
# Rebase conflicting branches
$ git rebase rebaseExample
Auto-merging fishtank.txt
CONFLICT (add/add): Merge conflict in fishtank.txt
error: could not apply 24f9bf1ef... My brand new fishtank2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 24f9bf1ef... My brand new fishtank2
$ subl fishtank.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

विग्रहस्य स्थितिः यथा भवति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

निम्नलिखित सामग्रीं परिवर्तयन्तु, रक्षन्तु, बन्दं कुर्वन्तु च:

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

विलीनसञ्चिकाः योजयित्वा पुनः आधारीकरणं निरन्तरं कुर्वन्तु:

$ git add fishtank.txt
$ git rebase --continue
hint: Waiting for your editor to close the file...
  • 1
  • 2
  • 3

यः सम्पादकः उद्घाट्यते सः चित्रे दर्शितः अस्ति :

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

पुष्टिं कुर्वन्तु, रक्षन्तु, बन्दं कुर्वन्तु च, ततः भवन्तः पुनः आधारः सफलः इति प्रॉम्प्ट् द्रक्ष्यन्ति:

$ git rebase --continue
[detached HEAD 9911772b3] My brand new fishtank2
 1 file changed, 2 insertions(+), 3 deletions(-)
Successfully rebased and updated refs/heads/rebaseExample2.
# Check new status via gitk
$ gitk
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

विवरणं यथा- १.

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

द्रष्टुं शक्यते यत् अस्मिन् पुनः आधारे केवलं तानि संस्करणानि एव पुनः आधारीकृतानि भविष्यन्ति (अर्थात् नूतनानि संस्करणाः योजिताः भविष्यन्ति) । commit)。

प्रथमस्य rebase interruption इत्यस्य git prompt information इत्यत्र भवान् विकल्पद्वयं अपि द्रष्टुं शक्नोति ।

  1. git rebase --abort: शाब्दिकार्थत्वेन पुनः आधारं बाधित्वा

  2. git rebase --skip: विग्रहान् त्यक्त्वा प्रत्यक्षतया पुनः आधारं कुर्वन्तु, यस्य परिणामः भविष्यति rebaseExample2 नवीनं परित्यजन्तुcommit, प्रत्यक्षतया विलीनः rebaseExample, मातापिता पुनः आधारीकरणानन्तरं सूचितवान्, तथा च rebaseExample सङ्गत:

    अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु


4.3 निर्दिष्टे संस्करणे अन्तरक्रियाशीलं पुनः आधारं कुर्वन्तु

अस्मिन् उदाहरणे वयं... rebaseExample शाखानां आधारेण कथं उपयोगः करणीयः इति प्रदर्शयन्तु--interactive मार्क, 4.1 मध्ये द्वयोः पुनः आधारं कुरुतcommit दूरस्थनिरीक्षणशाखां प्रति पुनः आधारं कुर्वन्तुstable-3.1 श्रेष्ठतर:

$ git checkout rebaseExample
Switched to branch 'rebaseExample'
Your branch is ahead of 'origin/stable-3.1' by 109 commits.
  (use "git push" to publish your local commits)
$ git rebase origin/stable-3.1
  • 1
  • 2
  • 3
  • 4
  • 5

अस्मिन् समये, नूतने pop-up सम्पादके, श्रेणी सह, एकं commit सूची प्रदर्शितं भविष्यति rebaseExample तथाstable-3.1 मध्ये, सर्वेषां पुनः आधारः भवितुं शक्यतेstable-3.1 इत्यस्यcommit अभिलेख।नवद्वयं उदाहरणे स्थापयतुcommit, शेषं सर्वं विलोपयन्तु (अर्थात् ८९ पङ्क्तौ ततः पूर्वं च सामग्रीः):

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

रक्षणानन्तरं सम्पादकात् बहिः गच्छन्तु ततः निम्नलिखितम् आउटपुट् द्रक्ष्यन्ति ।

$ git rebase --interactive origin/stable-3.1
Successfully rebased and updated refs/heads/rebaseExample.
# Check in gitk view:
  • 1
  • 2
  • 3

परिणामः यथा भवति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

उदाहरणविस्तारः

अस्मिन् उदाहरणे भवन्तः शीघ्रमेव आदेशद्वारा अपि इष्टं प्रभावं प्राप्तुं शक्नुवन्ति ।

$ git rebase --onto origin/stable-3.1 origin/stable-3.2 rebaseExample
Successfully rebased and updated refs/heads/rebaseExample.
  • 1
  • 2

पुनः आधारीकरणात् पूर्वं पश्चात् च चित्रं निम्नलिखितम् अस्ति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु