2011-03-10 4 views
6

मुझे अपनी एक अन्य परियोजना के एक छोटे से हिस्से के आधार पर एक नई परियोजना शुरू करने की आवश्यकता है जिसका रेपो जिथब में है।सभी पूर्व प्रतिबद्धताओं को 'भूल' करने के लिए 'गिट' कैसे कहें?

मैंने एक नए प्रोजेक्ट फ़ोल्डर में एक गिट क्लोन किया ... ठीक है।

मैंने जो कुछ भी नहीं किया, उसे हटा दिया, पुरानी माइग्रेशन इत्यादि से छुटकारा पा लिया .... ठीक है।

अब यह स्थानीय स्तर पर ठीक से चलता है, लेकिन 'गिट लॉग' सभी पुराने कामों को दिखाता है।

मैं Git बताना चाहता हूँ "सभी पूर्व प्रतिबद्ध भूल जाते हैं, यह एक नई परियोजना है, तो सब कुछ भूल जाते हैं अब से पहले, अभी से शुरू कर के रूप में पहली प्रतिबद्ध"

मैं Git रिबेस के बारे में पढ़ा है, लेकिन यह स्पष्ट नहीं है अगर यह सही आदेश है, और यदि हां, तो इस सरल उद्देश्य के लिए इसका उपयोग कैसे करें।

उत्तर

12

.git फ़ोल्डर, git init और git add

+2

+1, लेकिन यदि आपके पास रिमोट जैसी कोई रेपो विशिष्ट चीजें हैं, तो आपको उन्हें वापस जोड़ना होगा। – vcsjones

+0

@vcsjones अच्छी बात – orip

+0

सही, और सरल, धन्यवाद! – jpwynn

0

आप reposurgeon की कोशिश की है चलाने हटाना चाहते हैं?

http://www.catb.org/~esr/reposurgeon/

+1

से पहले 'गिट क्लीन-डीएफएक्स' करूँगा तो ... ... जो आपको 'गिट रिबेस' और 'गिट फ़िल्टर-शाखा' पहले से ही कर सकता है? (और इसके अलावा, यह ओपी चाहता है के लिए overkill है।) दिलचस्प विचार, यद्यपि। – Cascabel

9

स्वीकार किए जाते हैं जवाब यहाँ वास्तव में मुझे डर लगता है - अपने .git निर्देशिका को हटाने के लिए एक कठोर बात है, और यह यहाँ आवश्यक नहीं है।

यह स्क्रिप्ट एक सुरक्षित दृष्टिकोण का उपयोग करता है - यह एक शाखा रिकॉर्ड करने के लिए जहां प्रतिबद्ध छुटकारा पाने के लिए शुरू करने से पहले थे old-master कहा जाता है बनाता है, फिर उपयोग करता git reset --soft $ROOT_COMMIT और git commit --amend नीचे एक प्रतिबद्ध करने के लिए पूरे शाखा छुटकारा पाने के लिए। आप इस GitHub gist से स्क्रिप्ट भी डाउनलोड कर सकते हैं।

#!/bin/bash 

# A script that squashes your entire current branch down to a single commit, 
# if this repository has a single root commit. This will change the object 
# name of the root commit. 

if [ -n "$(git status --porcelain)" ] 
then 
    echo "git status wasn't clean - refusing to run..." 
    exit 1 
fi 

# From: http://stackoverflow.com/questions/1006775/ 
root_commits() { 
    git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" 
} 

NUMBER_OF_ROOT_COMMITS=$(root_commits|wc -l) 

if (("$NUMBER_OF_ROOT_COMMITS" > 1)) 
then 
    echo "This script won't work when you have multiple root commits" 
    exit 1 
fi 

ROOT_COMMIT=$(root_commits) 

if [ -z "$ROOT_COMMIT" ] 
then 
    echo "No root commit was found!" 
    exit 1 
fi 

set -e 
set -x 

# Create a branch based on the current HEAD for safety: 
git branch old-master 

# Reset the branch to the root commit, leaving the previous 
# state of the tree staged: 
git reset --soft $ROOT_COMMIT 

# Now amend the root commit with the state of the index: 
git commit --amend -m "The branch restarted" 
0

क्यों न केवल उस निर्देशिका को एक ब्रांड-नए गिट भंडार में कॉपी करें और इसे वहां प्रतिबद्ध करें?

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

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