web-dev-qa-db-ja.com

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

GitHubリポジトリでは、同僚がreleaseという名前のブランチを削除しました。しかし、git checkout releaseをローカルで実行すると、常に削除されたブランチreleaseが取得されます。同じように、別のブランチをチェックアウトした場合でも、git branch -D releaseを使用してreleaseブランチを削除し、git checkout releaseを再度実行しました。

GitHubリポジトリで修正するものはありますか、それともローカルで修正しますか?

26
Tim

リモート側でブランチを削除した後も、以前にフェッチされたこのリモートブランチがローカルで表示される場合があります。以下を参照してください。

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

「リリース」だけを削除し、「リモート/オリジン/リリース」は削除しませんでした。次のように削除します。

$ git branch -rd Origin/release

または、削除allリモート側にもう存在しないフェッチされたブランチ:

$ git remote Prune Origin 
24
rudimeier

ブランチがリモートで削除された場合、ローカルリポジトリをプルーニングする必要があります。これを行う最も簡単な方法は、

git fetch -p

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

git branch --remote

削除されたリモートブランチは表示されなくなります。

自分のシステム上でもサーバー上でも、gitリポジトリは完全です。そのため、最初にリポジトリのクローンを作成すると、完全なコピーが取得され、ローカルgitはすべてのリモートブランチとローカルブランチについて「認識」しています。この情報は自動的には同期されないため、同僚がサーバーのreleaseブランチを削除しても、ローカルgitリポジトリはリモートreleaseブランチの概念を失いませんでした。 git fetchと同期すると、リモートブランチのすべてのローカル情報が更新され、サーバー(厳密に言えば、リモートリポジトリ)の状態と一致しますが、リモートブランチのローカル情報は削除されません。 git fetch -p(またはgit fetch --Prune、またはgit remote Prune)でプルーニングすると、削除されたリモートブランチのローカル情報が削除されます。

15
Stephen Kitt

Tim:Gitは分散型VCSであるため、リモートからローカルにリポジトリを複製すると、すべて(履歴)が複製されます。そのため、レポを複製すると、リリースというブランチがありました。同僚がリリースブランチをリモートで削除したため、プルーンを実行するまでgit fetch -pまたは明示的にそのブランチを削除します。ローカルはそのブランチを持ちます。

3
ManiVI

おそらく少し正接しますが、このサイトの観点は、ブランチを削除する一般的なトピックを理解するのに役立ちます:

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

(残念ながら、「Nice、digestible」はスクリプト自体のフォーマットには適用されません。)

1
B Layer