195

ここで尋ねたのと同じ質問がありました:サブディレクトリに既存のリポジトリを含めるためのルート ディレクトリの新しい git リポジトリ

ここでこの回答に従いました:サブディレクトリに既存のリポジトリを含めるためのルートディレクトリの新しいgitリポジトリ

現在、gitk --allは 2 つの履歴を示しています。1 つは現在の で最高潮に達し、masterもう 1 つは という名前original/refs/heads/masterです。

この 2 番目の履歴が何であるか、レポから削除する方法がわかりません。リポジトリに 2 つの履歴は必要ありません。

どうすればそれを取り除くことができますか?

自分自身を再現するには:

mkdir -p project-root/path/to/module
cd project-root/path/to/module
mkdir dir1 dir2 dir3 
for dir in * ; do touch $dir/source-file-$dir.py ; done
git init
git add .
git commit -m 'Initial commit'

ここで、元のポスターの問題があります。上記のリンクの回答を使用して、git リポジトリのルートを project-root に移動しましょう。

git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD
rm -rf path
cd ../../../ # Now PWD is project-root
mv path/to/module/.git .
git reset --hard

さて、私の現在の問題を見てください:

gitk --all &
git show-ref

refs/original/heads/master関連するすべての履歴を削除するにはどうすればよいですか?

4

3 に答える 3

350

refs/original/*フィルターブランチを台無しにした場合のバックアップとしてあります。私を信じてください、それは本当に良い考えです。

結果を調べて、必要なものが揃っていることに確信が持てたら、バックアップされた参照を削除できます。

git update-ref -d refs/original/refs/heads/master

または、これを多くの参照に対して行い、すべてを消去したい場合:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

(これは filter-branch のマンページから直接取得したものです。)

これはあなたには当てはまりませんが、これを見つける可能性のある他の人には:かなりのディスク容量を占有しているコンテンツを削除するフィルター ブランチを実行する場合は、reflogを実行git reflog expire --expire=now --allして期限切れにし、現在使用されていないオブジェクトを削除することもできます。 git gc --prune=now. (警告: 完全に元に戻すことはできません。実行する前によく確認してください。)

于 2011-10-04T22:44:55.057 に答える