2016-12-14 3 views
0

タイトルの記載内容。"Master"ブランチだけでなく、Gitリポジトリ全体をリセットしてRemoteに一致させるには?

すべてを削除してゼロからクローンすることなく、ローカルにのみ存在するいくつかのブランチとタグの削除を含む、私のリモートリポジトリと一致するように、それぞれのローカルブランチをリセットします。私が見つけることができるのは、リポジトリ全体ではなく、特定のブランチをリセットする方法です。

TortoiseGitシェル拡張から実行できる場合はさらに優れています。しかし、私はコマンドラインでもうまくいきます。

+0

これは、http://stackoverflow.com/questions/13064613/how-to-prune-local-tracking-branches-that-do-not-exist-on-remote-anymoreの複製である可能性があります。 – Juuuuuu

+0

最初の状態はあなたがそれをしたいですか?生存しているブランチのログを保存しますか?オプションをマージしますか?もっとも残酷な答えは、単に '' git clone --reference = .git 'git config remote.origin.url' ../newclone;を再フェッチせずに複製することです。 cp -al .git/objects ../newclone/.git; rm ../newclone/ .git/objects/info/alternates'''を実行しても、reflogsやmerge/pullオプションなどは保存されません。完全に元のクローンです。 – jthill

+0

@jthill私は本当にRemoteの正確なクローンを望んでいるので、あなたのソリューションは有効であるようです。今のところ私は[PetSerAlの答え](http://stackoverflow.com/a/41147559/3258851)に行ってきましたが、あなたの提案が望ましいとわかっているのなら、私は選択した答えを変えるかもしれません! –

答えて

1

あなたは、以下のコマンドでそれを行うことができます:<Remote>はリモートリポジトリがどこにあるか

git checkout --orphan @ 
git fetch <Remote> refs/*:refs/* --refmap= --prune --force 

を使用したいです。 fetchすべてのリモートリファレンス(refs/*:refs/*)を--prune--forceのフラグで削除し、ローカル参照を強制的に更新するだけです。

+0

正しいアイデアですが、これは遠隔追跡を含むリモートをミラーリングし、OPが望んでいるものではありません。 – jthill

+0

@jthill OP ask:* ** Gitリポジトリ全体をリセットするには?ブランチとタグだけのように何か他のものをリセットしたいのであれば、refspecを必要なものに変更する必要があります。たとえば、 'refs/heads/*:refs/heads/* refs/tags/*:refs/tags/*'のようにします。 – PetSerAl

0

次の行は、上流分岐の状態に構成された上流の分岐を有していて、すべての支店をリセットします

git checkout @{0} && git for-each-ref refs/heads --format '%(refname:strip=2)' | xargs -ri sh -c 'git rev-parse {}@{u} >/dev/null 2>&1 && git branch -f {} $(git rev-parse {}@{u})' 

あなたがリセットすることはできませんので、あなたは、原因最初のコマンドに切り離さHEADで終わるだろう現在チェックアウトされているブランチであるので、これを実行した後に作業ディレクトリに入れたいブランチをチェックアウトします。

関連する問題