लघु जवाब (पहले से ही टिप्पणी में @Alex द्वारा दिए गए): git reset --hard HEAD^
, लेकिन वहाँ केवल यदि किसी मर्ज के लिए प्रतिबद्ध (अन्यथा आप सिर्फ एक बैकअप ले रहे हैं अपने तेजी से आगे से प्रतिबद्ध)। स्पष्टीकरण के साथ
लांग संस्करण:
git pull
वास्तव में सिर्फ git fetch
git merge
द्वारा पीछा किया है (जब तक आप --rebase
साथ ओवरराइड, जैसा कि आप ध्यान दें)। ,
$ git pull
Updating 171ce6f..523bacb
Fast-forward
mp.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 mp.py
इस मामले में कोई मर्ज नहीं था प्रतिबद्ध सिर्फ एक तेजी से आगे है, तो, कोई समस्या नहीं-वहाँ rebase में कोई परिवर्तन नहीं कर रहे हैं: तो तुम सिर्फ देखने के लिए कि आप एक वास्तविक मर्ज करने या मिल नहीं की जरूरत है! यदि आप git log
करते हैं तो आपको कमी-विलय-प्रतिबद्धता दिखाई देगी, खासकर यदि आप नीचे ग्राफ-y करते हैं।
चलो एक विलय को मजबूर करते हैं।
$ git reset --hard HEAD^
HEAD is now at 171ce6f ignore *.log files
[अब मैं remotes/origin/master
के पीछे एक हूँ]
$ echo '# pointless comment' >> selfref.py
$ git add selfref.py
$ git commit -m 'added to force merge'
[master 260e129] added to force merge
1 files changed, 1 insertions(+), 0 deletions(-)
$ git pull
Merge made by recursive.
mp.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 mp.py
हम देख सकते हैं कि यह हुआ, ऊपर पाठ के साथ याद आ रही है, भले ही,:
$ git log --graph --decorate --abbrev-commit --pretty=oneline
* c261bad (HEAD, master) Merge branch 'master' of [ssh url]
|\
| * 523bacb (origin/master, origin/HEAD) add multiprocessing example
* | 260e129 added to force merge
|/
* 171ce6f ignore *.log files
हम करना चाहते हैं स्थानीय शाखा का नाम master
प्राप्त करने के लिए (इस मामले में) 260e129 को इंगित करें।
$ git rev-parse HEAD^
260e1297900b903404c32f3706b0e3139c043ce0
(वर्तमान में, दो माता पिता की दूसरे माता पिता, प्रतिबद्ध HEAD^2
है मर्ज करें।) तो:
$ git reset --hard HEAD^
HEAD is now at 260e129 added to force merge
और अब हम remotes/origin/master
पर rebase कर सकते हैं (मैं सौभाग्य से उस नाम को वास्तव में आसान है 'कि नाम हैं) वास्तव में शॉर्ट नेम, origin
, का उपयोग करेंगे:
$ git rebase origin
First, rewinding head to replay your work on top of it...
Applying: added to force merge
अब ग्राफ-y एक पंक्ति का लॉग शो:
$ git log --graph --decorate --abbrev-commit --pretty=oneline
* 4a0b2e2 (HEAD, master) added to force merge
* 523bacb (origin/master, origin/HEAD) add multiprocessing example
* 171ce6f ignore *.log files
यह सब से, यदि आप git pull
चलाते हैं तो यह पता लगाने में सक्षम होना चाहिए और यह शिकायत करता है कि विलय विफल हो जाता है। :-)
मैं लगता है कि 'Git वापस खींच से पहले --hard' पुनर्स्थापित करने के लिए है और पुल फिर से रास्ता रास्ता है। – Alex
धन्यवाद। क्या आप इसे टिप्पणी के बजाय उत्तर के रूप में पोस्ट कर सकते हैं? –