ऐसा लगता है कि एक रिबेस क्या करता है।
git svn rebase
वर्तमान HEAD के SVN माता-पिता से संशोधन प्राप्त करेगा और वर्तमान (SVN को अनधिकृत) इसके विरुद्ध कार्य करता है।
git rebase
उल्लेख करता है:
ध्यान दें कि एक रिबेस मर्ज शाखा के शीर्ष पर काम करने वाली शाखा से प्रत्येक कमिट को पुन : जोड़कर काम करता है <upstream>
।
इस वजह से, जब एक मर्ज संघर्ष होता है:
- हमारी ओर से रिपोर्ट की गई, अब तक की शुरू की गई श्रृंखला है
<upstream>
,
- और उनकी काम करने वाली शाखा है ।
दूसरे शब्दों में, पक्षों की अदला-बदली की जाती है ।
git rebase प्रत्येक शाखा के शीर्ष पर कार्यरत शाखा से पुनरीक्षण करता है <upstream>
।
यदि आप दोनों परिभाषाओं को समेटते हैं:
- एसवीएन से आने वाले कमिट्स ऊपर हैं, जिनमें से स्थानीय गिट कमिट्स फिर से शुरू होते हैं। वे "अब तक की विद्रोही श्रृंखला" का हिस्सा हैं, और "हमारे" (आपके मामले में,
test.txt
फ़ाइल के साथ bar
) के रूप में संदर्भित हैं
- काम करने वाली शाखा (Git युक्त, SVN के लिए अज्ञात है, आपके मामले में, सामग्री के
test.txt
साथ फ़ाइल baz
) "उनका" है, और उन स्थानीय Git कमिट में से प्रत्येक को फिर से दोहराया जा रहा है।
दूसरे शब्दों में, एसवीएन या नहीं:
- "
<upstream>
" शाखा (जिसके ऊपर से कुछ भी फिर से शुरू होता है, और जो अब तक किए गए कमिट का हिस्सा है ")" हमारा "है।
- जो रिप्ले किया जा रहा है (वर्किंग ब्रांच) " उनका " है।
CommaToast द्वारा अच्छा मेमनोनिक टिप :
जो भी HEAD की ओर इशारा करता है वह है "हमारा"
(और सबसे पहली बात git rebase upstream
यह है upstream
कि आप उस शाखा को चेकआउट करना चाहते हैं जिसके शीर्ष पर आप रिबास करना चाहते हैं: HEAD का अर्थ है upstream
- ours
अब।)
भ्रम की संभावना एक क्लासिक में काम करने वाली शाखा की भूमिका से आ रही है git merge
।
जब आप विलय कर रहे हैं:
- "वर्किंग ब्रांच" वह है जिसमें "अभी तक मर्ज किया गया" है, और जिसे "हमारा" माना जाता है,
- जबकि दूसरी प्रतिबद्धता यह दर्शाती है कि क्या किया जा रहा है - रिप्ले नहीं किया गया है - लेकिन वर्किंग ब्रांच के शीर्ष पर मर्ज किया गया है, और "उनका" माना जाता है।
जैसा कि git rebase
मैन पेज का उल्लेख है, एक रिबेस के दौरान मर्ज का अर्थ है कि पक्ष अदला-बदली है।
एक ही बात कहने का एक और तरीका यह है कि:
- हमारे पास जो चेक आउट शाखा है वह ' हमारी ' है।
- जो हमारे पास था (और विलीन हो रहा है या फिर से बनाया जा रहा है) ' उनका ' है।
एक मर्ज पर :
x--x--x--x--x(*) <- current branch B ('*'=HEAD)
\
\
\--y--y--y <- other branch to merge
, हम वर्तमान शाखा 'बी' को नहीं बदलते हैं, इसलिए हमारे पास अभी भी वही है जो हम काम कर रहे थे (और हम दूसरी शाखा से विलय करते हैं)
x--x--x--x--x---------o(*) MERGE, still on branch B
\ ^ /
\ ours /
\ /
--y--y--y--/
^
their
लेकिन एक रिबास पर , हम पक्ष बदल देते हैं क्योंकि रिबास की पहली चीज अपस्ट्रीम शाखा को चेकआउट करना है! (वर्तमान में इसके शीर्ष पर पुनरावृत्ति करने के लिए)
x--x--x--x--x(*) <- current branch B
\
\
\--y--y--y <- upstream branch
A git rebase upstream
पहले HEAD
B को अपस्ट्रीम ब्रांच में बदलेगा HEAD
(इसलिए पिछले "वर्तमान" वर्किंग ब्रांच की तुलना में 'हमारा' और 'उनका' का स्विच।)
x--x--x--x--x <- former "current" branch, new "theirs"
\
\
\--y--y--y(*) <- upstream branch with B reset on it,
new "ours", to replay x's on it
, और फिर रिबास नई 'हमारी' बी शाखा पर अपने 'कमिट्स' को फिर से चलाएगा:
x--x..x..x..x <- old "theirs" commits, now "ghosts", available through reflogs
\
\
\--y--y--y--x'--x'--x'(*) <- branch B with HEAD updated ("ours")
^
|
upstream branch
के साथ एकमात्र अतिरिक्त कदम git svn rebase
यह है कि एसवीएन का प्रतिनिधित्व करने वाली जीआईटी रिमोट शाखा पर एक svn "लाने" का प्रदर्शन पहले किया जाता है।
आपके पास शुरू में है:
x--x--x--x--x(*) <- current branch B, "ours" for now.
\
\
\--y--y--y <- SVN tracking branch, "theirs for now"
, आप पहले SVN से आने वाले नए कमिट के साथ SVN ट्रैकिंग ब्रांच को अपडेट करें
x--x--x--x--x(*) <- current branch B, still "ours", not for long
\
\
\--y--y--y--y'--y' <- SVN tracking branch updated
, फिर आप करंट ब्रांच को SVN साइड पर स्विच करें (जो "हमारा" बन जाता है)
x--x--x--x--x <- for "B", now "their" during the rebase
\
\
\--y--y--y--y'--y'(*) <- SVN tracking branch updated, and branch B:
now "ours" (this is "what we now have")
, उन कामों को फिर से शुरू करने से पहले (लेकिन जो उस रिबास के दौरान "उनके" हैं)
x--x..x..x..x <- old "theirs" commits, now "ghosts", available through reflogs
\
\
\--y--y--y--y'--y'--x'--x'--x'(*) <- branch B with HEAD updated ("ours")
^
|
upstream SVN tracking branch