как сказать «мерзавцу» «забыть» ВСЕ предыдущие коммиты? - PullRequest
6 голосов
/ 11 марта 2011

Мне нужно начать новый проект, основанный на одной крошечной части другого моего проекта, репо которого находится на github.

Я сделал клон git в новую папку проекта ... отлично.

Я удалил все, что мне не нужно, избавился от старых миграций и т.д .... отлично.

теперь он работает нормально локально, НО 'git log' показывает ВСЕ старые коммиты.

Я хочу сказать git: «забудь ВСЕ предыдущие коммиты, это новый проект, поэтому забудь все до этого, начни с СЕЙЧАС, как первый коммит»

Я читал о git rebase, но не ясно, правильная ли это команда, и если да, то как ее использовать для этой очень простой цели.

Ответы [ 4 ]

12 голосов
/ 11 марта 2011

Удалите папку .git, запустите git init и git add

9 голосов
/ 11 марта 2011

Принятый здесь ответ действительно пугает меня - удаление вашей директории .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: /897619/kak-ssylatsya-na-nachalnyi-kommit
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 голосов
/ 21 июня 2012

Почему бы просто не скопировать этот каталог в совершенно новый git-репозиторий и зафиксировать его там?

0 голосов
/ 11 марта 2011

Вы пробовали reposurgeon?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...