2012-03-22 18 views
5

हटाएं मैं दूसरी प्रतिबद्धता को रेपो में हटाने की कोशिश कर रहा हूं। इस बिंदु पर मैं सिर्फ .git dir दूर उड़ा सकता है और यह फिर से करते हैं, लेकिन मैं ऐसा करने के तरीके उत्सुक हूँ ... मैं हटा देने के बाद से पहले करता है, लेकिन जाहिरा तौर पर कभी नहीं 2 एक :)गिट: दूसरी प्रतिबद्धता

> git log 

commit c39019e4b08497406c53ceb532f99801793205ca 
Author: Me 
Date: Thu Mar 22 14:02:41 2012 -0700 

    Initializing registry directories 

commit 535dce28f1c68e8af9d22bc653aca426fb7825d8 
Author: Me 
Date: Tue Jan 31 21:04:13 2012 -0800 

    First Commit 

> git rebase -i HEAD~2 
fatal: Needed a single revision 
invalid upstream HEAD~2 

> git rebase -i HEAD~1 

और इस बिंदु पर मैं अपने संपादक में मिलता है:

pick c39019e Initializing registry directories 

# Rebase 535dce2..c39019e onto 535dce2 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
# 

अब मेरी समस्या यह है कि मैं सिर्फ दूर उड़ा नहीं कर सकता यह 2 के लिए प्रतिबद्ध के बाद से "अगर आप सब कुछ निकालने के लिए, रिबेस निरस्त किया जाएगा"

उत्तर

5

में है शीर्षतम प्रतिबद्धता को हटाने के लिए, git reset --hard HEAD~ का उपयोग करें। रीबेज की आवश्यकता नहीं है क्योंकि आप अन्य कामों के बीच कुछ भी नहीं हटा रहे हैं।

0

यह पिछले प्रतिबद्ध है, तो आप कर सकते हैं:

git reset --hard HEAD~ 

और अगर ऐसा नहीं है पिछले प्रतिबद्ध है, तो आप एक और रिबेस सूची में कम से कम के लिए प्रतिबद्ध हैं और आप निकाल सकते हैं 2 प्रतिबद्ध पड़ता था ।

1

आप अपनी प्रतिबद्धता क्यों नहीं लौटते?

git revert 535dce28f1c68e8af9d22bc653aca426fb7825d8 या git revert HEAD~1

+0

क्योंकि वह व्यर्थ रूप से एक और प्रतिबद्धता जोड़ता है –

+0

इससे कोई फर्क पड़ता है? परिवर्तन को हटाने का आपका लक्ष्य पूरा हो गया है। – bluesman

+0

क्योंकि मैंने अभी तक धक्का नहीं दिया था और वास्तव में "प्रतिबद्ध" को धक्का देने में कोई बिंदु नहीं देखा, "पिछली प्रतिबद्धता पूर्ववत करें"। आपका जवाब _wrong_ नहीं है, मैं बस दूसरों को बेहतर पसंद करता हूं: पी –

2

यह पहले से ही उत्तर है (ऊपर) लेकिन ध्यान दें कि नए Git में, वहाँ एक noop आदेश आप फ़ाइल में डाल सकते हैं। वैसे यह कुछ भी नहीं है कि git reset बस के रूप में आसानी से काम नहीं करता करता

$ git rebase -i HEAD^ 
[in editor, change pick line to noop, and write and quit] 
".git/rebase-merge/git-rebase-todo" 15L, 492C written 
Successfully rebased and updated refs/heads/master. 
$ 

... लेकिन अगर आप पहले से इंटरैक्टिव रिबेस शुरू कर दिया है, और आप केवल एहसास है कि तुम क्या चाहते थे: तो आप noop साथ pick लाइन की जगह ले सकता तथ्य के बाद, noop चाल आसान है।

0

आप निम्न कर सकते हैं:

git rebase -i --root 

यह जड़ अपने रिबेस में प्रतिबद्ध शामिल होंगे। फिर आप fixup, squash चुन सकते हैं, या यदि आप चाहें तो पूरी तरह से दूसरी प्रतिबद्धता को हटा दें।

संबंधित मुद्दे