2013-02-19 25 views
15

मैं गितब से एक रेपो लाने की कोशिश कर रहा हूं, अतीत में एक टैग वापस कर रहा हूं, इसे सभी इतिहास को हटाने के साथ इसे दूसरे रिमोट पर धक्का दे रहा हूं। मैं सभी प्रतिबद्ध लॉग हटाने के अलावा नीचे सबकुछ कर सकता हूं। मुझे क्या याद आ रहा हैसभी गिट कमिट इतिहास हटाएं

git clone https://github.com/user/user-repo.git 
cd user-repo 
git reset --hard tags/v2.0 
git remote add stash ssh://[email protected]:7999/myproject/user-repo.git 
git push --force stash master 

उत्तर

33

मैंने सोचा कि आप जो चाहते हैं वह एक नया जैसा रेपो है, इसलिए .git/ निर्देशिका को हटाने और इसे फिर से संपादित करना अधिक आसान होगा।

git clone https://github.com/user/user-repo.git 
cd user-repo 
git reset --hard tags/v2.0 

rm -rf .git/ 
git init 
git add . 
git commit -m 'first commit' 

git remote add stash ssh://[email protected]:7999/myproject/user-repo.git 
git push --force stash master 
+0

धन्यवाद, यही वह है जो मैंने आपकी पोस्ट पढ़ने से पहले समाप्त कर दिया था। मैंने वही काम किया :) – noway

+0

इससे मुझे बहुत मदद मिली है! धन्यवाद – breezy

+0

यह वही है जो मैं चाहता हूं। – Shaowu

3

आप git merge --squash उपयोग करने वाले सभी एक में करता है छुटकारा पाने के लिए कर सकते हैं और फिर इसे धक्का।

1

क्या आप मूल रूप से सभी प्रतिबद्धताओं को एक प्रतिबद्धता में लाने के बारे में बात कर रहे हैं या आप सभी प्रतिबद्धताओं को बनाए रखना चाहते हैं लेकिन वास्तविक प्रतिबद्ध संदेश को कम करना चाहते हैं?

एक में प्रतिबद्ध स्क्वैश के (और अंतिम प्रतिबद्ध संदेश छोटा करना, अगर आप चाहते हैं), तो आपको एक इंटरैक्टिव रिबेस उपयोग कर सकते हैं:

git rebase -i <whatever> 

काटना वास्तविक संदेश के लिए प्रतिबद्ध है, लेकिन करता के सभी बनाए रखने के लिए, --msg-filter विकल्प git filter-branch पर विकल्प का उपयोग करें।