私が単独で作業していると仮定し、リモートをコードバックアップソリューションとして使用します。ローカルブランチを削除する可能性があります。ローカルに存在しないリモートブランチを削除する
リモコンの特定のブランチをgit push origin --delete mybranch
で削除できますが、ローカルに存在しないブランチを手動で確認することなく、ローカルに存在しないリモートブランチをすべて削除する方法がありますか?
私が単独で作業していると仮定し、リモートをコードバックアップソリューションとして使用します。ローカルブランチを削除する可能性があります。ローカルに存在しないリモートブランチを削除する
リモコンの特定のブランチをgit push origin --delete mybranch
で削除できますが、ローカルに存在しないブランチを手動で確認することなく、ローカルに存在しないリモートブランチをすべて削除する方法がありますか?
オフラインで作業するときに、ブランチをマージし、古い(マージされた)ブランチを削除することがあります。
あなたはpush --delete
, as in this answerをフォローアップすることができますようそれは、オンラインそうするのがベストです:
git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin
しかし、あなたは(オフライン)ローカルブランチを削除するので、オンライン、あなたはfetch --prune
し、必要GitHubからのリモートブランチ、ローカルカウンターパートが存在するかどうかをチェックし、それ以外の場合はpush --delete
をチェックします。
使用git for-each-ref
with the refname:lstrip=3
formatこれらのリモートブランチの短い名前をリストアップするために:
git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin
あなたは、あなたは簡単に2を組み合わせることができますgit show-ref --quiet
と local branch does existsif git show-ref --quiet refs/heads/develop; then
echo develop branch exists
fi
かどうかを確認することができます。
git fetch --prune
for branch in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin); do
if ! git show-ref --quiet refs/heads/${branch}; then
echo "delete remote branch '${branch}'"
git push origin --delete ${branch}
fi
done
これを行うスクリプトを作成してください。 'git for-each-ref'(Gitのリモートトラッキングブランチを更新するには' git fetch --prune'で始まります)を使います。 – torek
@torekは正しいですが、これはおそらく最善の方法ですが、これは一般的なプラクティスの正反対なので、コードを保持したくないユースケースは何ですか? – LightBender
@ LightBender私は通常ローカルコミットを行い、次にすべてのブランチをリモートにプッシュします。オフラインで作業しているときに、ブランチをマージし、古い(マージされた)ブランチを削除することがあります。ただし、古い(マージされた)ブランチは引き続きリモートに存在します。私はこの種のワークフローのためにローカルとリモートを同期させる方法を探しています。 – Flux