टी एल; डॉ;
संक्षेप में ( बेनुबर्ड टिप्पणियों के रूप में ), जब:
git checkout A
git rebase B # rebase A on top of B
local
है B
(rebase पर ),
remote
है A
तथा:
git checkout A
git merge B # merge B into A
local
है A
(मर्ज में ),
remote
है B
एक रिबास स्विच ours
(रिबास शुरू होने से पहले वर्तमान शाखा) और theirs
(वह शाखा जिसके ऊपर आप रिबास करना चाहते हैं)।
कुत्सकेम बताते हैं कि, GUI मेरिजेट संदर्भ में :
- स्थानीय संदर्भ आंशिक रूप से छूट वाले कमिट्स : "
ours
" (अपस्ट्रीम शाखा)
- दूरस्थ आने वाले परिवर्तनों को संदर्भित करता है : "
theirs
" - रिबास से पहले वर्तमान शाखा।
इस उत्तर के अंतिम भाग में चित्र देखें।
उलटा होने पर उलटा
भ्रम की स्थिति उलट ours
और theirs
एक रिबेस के दौरान हो सकती है ।
(प्रासंगिक अर्क)
git rebase
आदमी पृष्ठ :
ध्यान दें कि रिबेज मर्ज शाखा के शीर्ष पर कार्यरत शाखा से प्रत्येक कमेटी को रिपीट करके काम करता है <upstream>
।
इस वजह से, जब एक मर्ज संघर्ष होता है:
- पक्ष को '
ours
' के रूप में रिपोर्ट किया गया है, जो अब तक शुरू की गई श्रृंखला है <upstream>
,
- और '
theirs
' कार्यशील शाखा है। दूसरे शब्दों में, पक्षों की अदला-बदली की जाती है।
उलटा सचित्र
एक मर्ज पर
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
नोट: "अपस्ट्रीम" धारणा डेटा का रेफ़रेंशियल सेट है (सभी रेपो या, यहाँ की तरह, एक शाखा, जो एक स्थानीय शाखा हो सकती है ) जहाँ से डेटा पढ़ा जाता है या जिसमें नया डेटा जोड़ा / बनाया जाता है।
' local
' और ' remote
' बनाम ' mine
' और ' theirs
'
Pandawood में कहते हैं टिप्पणियाँ :
मेरे लिए, यह प्रश्न अभी भी बना हुआ है, जो "स्थानीय" है और जो "दूरस्थ" है (चूंकि "हमारा" और "उनका" शब्द का उपयोग तब नहीं किया जाता है, जब git में रीबासिंग करते हैं, तो उनका जिक्र सिर्फ एक उत्तर को और अधिक भ्रमित करने वाला लगता है) ।
जीयूआई मेरिटगूल
kutschkem कहते हैं, और ठीक है:
संघर्षों को हल करते समय, git कुछ ऐसा कहेगा:
local: modified file and remote: modified file.
मुझे यकीन है कि सवाल इस बिंदु पर स्थानीय और दूरस्थ की परिभाषा का लक्ष्य है। उस समय, यह मेरे अनुभव से मुझे लगता है कि:
- स्थानीय संदर्भ आंशिक रूप से छूट वाले कमिट्स : "
ours
" (अपस्ट्रीम शाखा)
- दूरस्थ आने वाले परिवर्तनों को संदर्भित करता है : "
theirs
" - रिबास से पहले वर्तमान शाखा।
git mergetool
वास्तव में 'स्थानीय' और 'दूरस्थ' का उल्लेख करता है :
Merging:
f.txt
Normal merge conflict for 'f.txt':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (kdiff3):
उदाहरण के लिए, KDiff3 मर्ज रिज़ॉल्यूशन को इस तरह प्रदर्शित करेगा :
और मिलकर एक हो जाना होगा यह भी प्रदर्शित :
VimDiff के लिए समान , जो प्रदर्शित करता है :
Git mergetool -t gvimdiff के साथ एक मेरिजेट के रूप में Vimdiff को आमंत्रित करें। निम्न विंडो लेआउट के साथ Git के हाल के संस्करणों ने Vimdiff को आमंत्रित किया:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
LOCAL
:
एक अस्थायी फ़ाइल जिसमें वर्तमान शाखा पर फ़ाइल की सामग्री है।
BASE
:
मर्ज के लिए सामान्य आधार वाली एक अस्थायी फ़ाइल।
REMOTE
:
एक अस्थायी फ़ाइल जिसमें मर्ज की जाने वाली फ़ाइल की सामग्री है।
MERGED
:
संघर्ष मार्करों के साथ फ़ाइल।
गिट ने जितना संभव हो उतना स्वत: संघर्ष समाधान का प्रदर्शन किया है और इस फाइल की स्थिति दोनों के संयोजन के साथ LOCAL
और REMOTE
कुछ भी आसपास के संघर्ष मार्करों के साथ है जो गिट खुद को हल नहीं कर सके। इस फ़ाइल की संकल्प का परिणाम लिखना चाहिए।
mergetool