GitHubで削除されたブランチをチェックアウトできるのはなぜですか?

GitHubで削除されたブランチをチェックアウトできるのはなぜですか?

GitHubリポジトリから同僚がブランチを削除しましたrelease。ただしgit checkout release、ローカルで実行すると、常に削除されたブランチが表示されますrelease。同様に、他のブランチをチェックアウトするときも、そのreleaseブランチを削除してgit branch -D releaseもう一度実行してみてくださいgit checkout release

GitHubリポジトリに変更する必要がありますか?それともローカルで修正する必要がありますか?

答え1

リモート側からブランチを削除しても、以前にローカルにインポートされたリモートブランチは引き続き表示されることがあります。以下を参照してください。

$ git branch -a
[...]
release
remotes/origin/release
[...]

「リリース」のみ削除しましたが、「リモート/オリジナル/リリース」は削除しませんでした。次のように削除してください。

$ git branch -rd origin/release

または削除みんなリモート側にもう存在しない分岐を取得します。

$ git remote prune origin 

答え2

リモートでブランチを削除する場合は、ローカルストレージをクリーンアップする必要があります。最も簡単な方法は、次を使用することです。

git fetch -p

これにより、リモートストアに対するすべての変更でローカルストアが更新されますが、ローカルブランチは更新されません。これを実行した後、

git branch --remote

削除されたリモートポイントは表示されなくなります。

独自のシステムでもサーバーでも、gitリポジトリが完成します。したがって、最初にリポジトリを複製すると、完全なコピーが得られ、ローカルのgitはローカルブランチだけでなく、すべてのリモートブランチも「知る」ようになります。この情報は自動的に同期されないため、同僚がreleaseサーバーのブランチを削除しても、ローカルのgitリポジトリはreleaseリモートブランチの概念を失うことはありません。同期は、git fetchリモートポイントのすべてのローカル情報を更新し、サーバー(厳密にはリモートストアなど)の状態と一致しますが、リモートポイントのローカル情報は削除しません。git fetch -p(またはgit fetch --prune、または)を使用してクリーンアップすると、git remote prune削除されたリモートブランチのローカル情報が削除されます。

答え3

Tim:Gitは分散VCSなので、リモートからローカルにリポジトリを複製すると、すべて(記録)が複製されます。したがって、リポジトリを複製すると、releaseというブランチが生成されます。同僚がリモートでリリースブランチを削除したので、明示的にクリーンアップまたはgit fetch -p削除するまでローカルでブランチを持ちます。

答え4

トピックから少し外れている可能性がありますが、このサイトの視点は、四半期の削除に関する一般的なトピックを理解するのに役立ちます。

http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/

ここですでに議論した内容と一部重複する部分がありますが、管理に重点を置いています。つまり、共同作業環境で不要になったリモートおよびローカルブランチを削除することです。特に、このgit branch --mergedコマンドはメインライン(または関心のあるすべてのブランチ)にマージされ、削除しても安全なブランチを識別します。共同作業する場合、このようなよりクールなミニスクリプトのいくつかは、内容を素晴らしく消化しやすい形式で表示し、日付と作成者を含みます。

for branch in `comm -12  <(git branch --merged|awk '{print($1)}') <(git branch -r --merged|awk '{print($1)}'|awk -F \/ '{print($2)}')`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1` \\t$branch; done | sort -r

(残念ながら、「よく理解しやすい」というスクリプト自体の形式には適用されません。)

関連情報