怎么告诉'git''忘记'所有先前的提交?

时间:2011-03-10 21:50:09

标签: git

我需要根据我的另一个项目的一小部分开始一个新项目,我的回购是在github。

我在一个新的项目文件夹中做了一个git clone ...很好。

我删除了我不需要的所有东西,摆脱了旧的迁移等......好吧。

现在它在本地运行正常,但“git log”显示所有旧提交。

我想告诉git“忘记所有先前的提交,这是一个新项目,所以在此之前忘记一切,从现在开始作为第一次提交”

我读到了关于git rebase但是不清楚这是否是正确的命令,如果是,那么如何将它用于这个非常简单的目的。

4 个答案:

答案 0 :(得分:12)

删除.git文件夹,运行git initgit add

答案 1 :(得分:9)

这里接受的答案真的让我感到害怕 - 删除你的.git目录是一件非常棘手的事情,而且这里没有必要。

此脚本使用更安全的方法 - 它会创建一个名为old-master的分支,以便在开始压缩提交之前记录您的位置,然后使用git reset --soft $ROOT_COMMITgit 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"

答案 2 :(得分:0)

您是否尝试过reposurgeon

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

答案 3 :(得分:0)

为什么不将该目录复制到一个全新的git存储库并将其提交到那里?