web-dev-qa-db-ja.com

最初にコミットしてすべての履歴を削除するようにGitリポジトリをロールバックする方法

私は最近gitの使い方を学んでいるので、多くのヒットアンドミスをしなければなりませんでした。したがって、リモートおよびローカルのリポジトリを削除して、新しく作成する必要がありました。リポジトリの最初のコミットにロールバックし、その後すべての履歴を削除する方法はありますか?基本的に白紙の状態で実験します。

22

私はあなたが求めていることを正確に行う方法を知りません(最初のコミットにロールバックすることはできますが、all履歴を削除することはできません)履歴には、少なくともその最初のコミットが含まれます。)

私があなただったら、リモートリポジトリとローカルリポジトリの.gitディレクトリを削除し、git initからやり直します。

私があなたが求めているものに到達できる最も近いのは、最初のコミット以外のすべてをロールバックすることです。これを行うには、最初のコミットのSHA1を最初に見つけます。次に例を示します。

% git rev-list --max-parents=0 --abbrev-commit HEAD
aa8119f

...そしてどちらかを実行します

% git reset aa8119f

...または

% git reset --hard aa8119f

...最初のコミット以降に行われたすべての変更を保存するか破棄するかによって異なります。 (上記は、ブランチが1つしかないことを前提としています。そうでない場合は、git branch -d <BRANCHNAME>を使用して、他のブランチも削除する必要があります。)

最後に、実行します

% git Push -f

(他の人と共有されているレポにプッシュしているときはいつでも、git Push -fがノーノーであることを理解していることを願っています。)

残念ながら、すでに説明したように、この方法では履歴がall削除されません。

これが頻繁に実行したい場合は、git initの直後に次のように実行することをお勧めします

% git commit --allow-empty --allow-empty-message -m ''
% git tag -a -m '' ROOT

これにより、履歴のルートに空のコミットが配置され、ROOTという名前のタグが付けられます。次に、次のようなことができます

% git reset ROOT

または

% git reset --hard ROOT

最初の空のコミットに戻ります。

git resetの機能を正しく理解するには、 this をお勧めします。

34
kjo

最初のコミットをチェックアウトしたら、.gitディレクトリを削除してください。など:

git checkout <first-commit-sha>
rm -rf .git
git init
git add -A
git commit -m 'Initial Commit'
9
GoZoner

最初のコミットにリセットできます:

" 「git log」で最初のコミットを表示する方法は? "は、最初のコミットを見つける方法を説明しています。

git log --pretty=format:%H | tail -1

(複数のルートブランチがない場合にのみ機能します)

git reset --hard yourFirstCommitSHA1

リセット後、reallyに白紙の状態を取得するには、単にgit init新しいリポジトリと、リセットしたばかりの最初のコミットの内容をコピーします(そしてその新しいリポジトリに追加してコミットします)

8
VonC

クリーンリセットを行うには、ログと構成の変更とすべてを排除する必要があります。これを行うには、マスタールートのみを新しいリポジトリにフェッチします。

git tag master-root $(git rev-list --topo-order master|sed '$!d')
git init ../reset-my-repo
cd ../reset-my-repo
git fetch $OLDPWD master-root
git checkout -B master FETCH_HEAD

(つまり VonCが言ったことはかなり多い

(追加された--topo-order不正なタイムスタンプから保護するため)

3
jthill

マスターするチェックアウト:

$ git checkout master

ログを表示:

$ git log

最初のコミットにリセット:

$ git reset --hard <you first commit number>

次に、変更をリモートにプッシュします。

$ git Push --force Origin
0
Alexey Slusar

以下を使用して、現在のブランチのすべての履歴を確実に削除できます。

git reset --hard <commit_id>

どこ commit_idは、いくつかの歴史的なコミットのsha1です。

ただし、学習していて実験したい場合は、ほとんど必要ありません。

代わりに、次のように、単に実験用の新しいブランチを作成できます。

git branch experiment <commit_id>
git checkout experiment
...

これはほとんどの目的と目的で最初のバリアントと同じですが、必要に応じて元に戻すことができます。

ブランチの名前を変更して、実験に次のような元のブランチ名を付けることもできます。

git branch -m master backup
git branch master
git checkout master

backupブランチをnukeする場合は、次のようにします。

git branch -D backup
0
mvp