2016-07-02 6 views
1

上流のレポは、以降に更新されました私のフォークプルーンの原点枝

* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/beta 
    remotes/origin/dashboardNewContent 
    remotes/origin/externalUrl 
    remotes/origin/gh-pages 
    remotes/origin/master 
    remotes/origin/next 
    remotes/origin/rc 
    remotes/origin/rc-0.3.0 
    remotes/origin/release-candidate 
    remotes/origin/streama-node 
    remotes/origin/translation 
    remotes/origin/v1.0.0 
    remotes/origin/videoConverter 
    remotes/upstream/gh-pages 
    remotes/upstream/master 
    remotes/upstream/next 
    remotes/upstream/translation 
    remotes/upstream/v1.0.1 
    remotes/upstream/videoConverter 

に支店あり私はそれをフォークした。アップストリームに存在しなくなったフォークからブランチを削除する方法を見つけることができません。 This GitHub tutorialはコミット履歴の同期方法を示します。

この問題の解決方法はありますか?

答えて

4

トリックはupstream URLで(自分のフォークを参照)、ローカルリポジトリ内originを交換することである。

git remote rename origin ori 
git remote add origin $(git remote get-url upstream) 

そして、単一のコマンドgit fetch --pruneは、ローカルで廃止されたすべてのリモート追跡ブランチを削除します(remotes/origin/xxxこれは一時的に「origin」によって参照さ、upstreamではありません)

remotes/origin/xxxが存在する場合は最後に、あなたは、各remotes/ori/xxx枝のために、確認することができます。そうでない場合:git push --delete ori xxx。スクリプトがgit-cleanup(または任意のgit-xxx名)に入れ、git cleanup(またはgit xxx)で呼び出すことができます(bashで)

for f in $(git for-each-ref refs/remotes/ori --format '%(refname:short)' | 
     sed 's,ori/,,') do; 
    git rev-parse -q --verify refs/remotes/origin/$f >/dev/null || 
     git push --delete ori ${f} 
done 

:よう

何か。そうすれば、それはWindows上でさえ、独自のbashで実行されます。

は終了するには: `で.git`見つける

git remote remove origin 
git remote rename ori origin 
+0

ニース、しかし、将来の変化(Gitリポジトリの参照名コードは、バックエンドをプラグ可能に変換するされています)の場合、スクリプトは信頼性を高めるために、交換してください' git for-each-ref'を実行する必要があります。残念なことに 'sed'などを使用してリモートの名前を編集する必要があります。 – torek

+0

私は同意します。答えを編集できますか? – VonC

+0

完了しましたが、私はテストに適したレポを持っていませんので、個々の部品を個別にテストしました。また、私はWndowsを使用しません。 '>/dev/null'はそこで動作しますか? (誰かがWIndows bashが/ dev/nullをシミュレートすることを願っています:-)) – torek