gitリポジトリのすべてのブランチを完全に逆にするスクリプト「git-reverse.sh」を作成しました。
の組み合わせを使用してgit log --pretty="%T"
、ツリーハッシュを抽出git commit-tree
し、元のツリーオブジェクト(ファイル)に対して新しいコミットオブジェクトを作成しますが、親のエッジは逆になります。
いくつかのリポジトリでスタックしているようです。どうしてか分かりません。
あなたはここでそれを見つけることができます:
https://github.com/gsylvie/git-reverse.sh
使用例
git clone --mirror [git-clone-url]
cd [repo.git]
./git-reverse.sh
git log --all --date-order --graph --decorate
出力例
$ ./git-reverse.sh
be0923ece8f73281e5e54906c29debb852894b92 - Reversed 1 of 360 (0%)
061bca59b29e75becbde66d2e510fc2b4059ccb2 - Reversed 2 of 360 (0%)
6a19039e05e3a0186187d0a6943634e8499b5a65 - Reversed 3 of 360 (0%)
7afe25e8caf93eb7107471a1bd078d4adc3f6999 - Reversed 4 of 360 (1%)
8b556f6fe97c5357c2328467a5ba01b77931ff82 - Reversed 5 of 360 (1%)
71fd0883975154f48059ca929db8ccb659c5049a - Reversed 6 of 360 (1%)
[etc...]
Switched to branch 'master'
Your branch and 'origin/master' have diverged,
and have 199 and 159 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
*********************************************
| Git repo successfully reversed!!! :-) (-: |
*********************************************
To push the reversed repo:
rm .git/packed-refs
rm -rf .git/refs/remotes
git push --mirror [new-git-clone-url]
WARNING:
========
Pushing a reversed git repo is a profoundly destructive and confusing operation.
You have a full 'git clone --mirror' backup stored somewhere safe, right?