2011-03-10 15 views
6

Necesito comenzar un nuevo proyecto basado en una pequeña parte de otro proyecto mío cuyo repositorio está en github.¿Cómo decirle a 'git' que 'olvide' TODAS las confirmaciones anteriores?

Hice un clon Git en una nueva carpeta de proyecto ... bien.

Eliminé todo lo que no necesitaba, me deshice de las migraciones anteriores, etc. ... bien.

ahora funciona bien localmente, PERO 'git log' muestra TODOS los commits antiguos.

Quiero decirle a Git "olvidar todas las confirmaciones anteriores, este es un nuevo proyecto, por lo olvidemos todo antes de ahora, empezar desde ahora mismo el primer commit"

leí acerca de git rebase pero no es clara si ese es el comando correcto, y si es así, cómo usarlo para este simple propósito.

Respuesta

12

eliminar la carpeta .git, ejecute git init y git add

+2

+1, pero si tiene algún elemento específico del repositorio como controles remotos, tendrá que volver a agregarlos. – vcsjones

+0

@vcsjones buen punto – orip

+0

perfecto, y simple, gracias! – jpwynn

0

¿Ha intentado reposurgeon?

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

+1

Entonces ... ¿eso te permite hacer lo que 'git rebase' y' git filter-branch' ya pueden hacer? (Y además, es excesivo para lo que OP quiere). Sin embargo, es una idea interesante. – Cascabel

9

La respuesta aceptada aquí realmente me asusta - borrar el directorio de .git es una cosa drástica de hacer, y no es necesario en este caso.

Este script utiliza un enfoque más seguro - que crea una rama llamada old-master para grabar donde estaba antes de comenzar a aplastar las confirmaciones, a continuación, utiliza git reset --soft $ROOT_COMMIT y git commit --amend para aplastar toda la rama reduce a una confirmación. También puede descargar la secuencia de comandos desde este 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

¿Por qué no simplemente copiar ese directorio a un nuevo repositorio de git y confirmarlo allí?

Cuestiones relacionadas