0

同僚が私が彼らにやらないように言ったいくつかのことをしました:

  • オリジンレポをオンラインでフォーク
  • フォークのクローンを作成し、そのローカルリポジトリに追加されるべきではないファイルを追加しました
  • これを彼らのフォークに押し込んだ

私はそれから:

  • フォークからの変更をマージし、ファイルを見つけました

これを削除したい:

  • 私のローカルリポジトリ
  • フォーク
  • 彼らのローカルリポジトリ

gitリポジトリ(履歴)からファイルを削除から取得した、履歴から何かを削除するための解決策があります。私が知る必要があるのは、私の同僚もこれを経験する必要があり、その後のプッシュでフォークからすべての情報が削除されるのでしょうか?(同僚がこれを行うかどうかわからないので、フォークを破壊する代わりの方法が欲しいです)

SOLUTION: This is the shortest way to get rid of the files:

check .git/packed-refs - my problem was that I had there a refs/remotes/origin/master line for a remote repository, delete it, otherwise git won't remove those files
(optional) git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort -k 3 -n | tail -5 - to check for the largest files
(optional) git rev-list --objects --all | grep a0d770a97ff0fac0be1d777b32cc67fe69eb9a98 - to check what files those are
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_names' - to remove the file from all revisions
rm -rf .git/refs/original/ - to remove git's backup
git reflog expire --all --expire='0 days' - to expire all the loose objects
(optional) git fsck --full --unreachable - to check if there are any loose objects
git repack -A -d - repacking the pack
git prune - to finally remove those objects
4

1 に答える 1

1

まあ、線形の履歴がないので、プッシュしても問題はほとんど発生しません。フラグを使用--forceしてプッシュおよびプルする必要があります。

ただし、そうでない場合は、最初の既知のコミットでブランチをリセットするように同僚にgit reset --hard <initial commit sha-1>依頼してから、プルするように依頼してください。リセットはローカルブランチの変更ではないため、この方法で機能するはずです。ブランチは、多くのコミットによって、リモートの対応するブランチの背後にあるものとしてのみマークされます。そうすれば、取得とマージは、線形の履歴でずっと上がるので簡単になります。

しかしもちろん、そのような操作にはチーム間の組織化/タイミングが必要です。

于 2012-10-15T03:33:53.893 に答える