GitHubリポジトリでは、同僚がrelease
という名前のブランチを削除しました。しかし、git checkout release
をローカルで実行すると、常に削除されたブランチrelease
が取得されます。同じように、別のブランチをチェックアウトした場合でも、git branch -D release
を使用してrelease
ブランチを削除し、git checkout release
を再度実行しました。
GitHubリポジトリで修正するものはありますか、それともローカルで修正しますか?
リモート側でブランチを削除した後も、以前にフェッチされたこのリモートブランチがローカルで表示される場合があります。以下を参照してください。
$ git branch -a
[...]
release
remotes/Origin/release
[...]
「リリース」だけを削除し、「リモート/オリジン/リリース」は削除しませんでした。次のように削除します。
$ git branch -rd Origin/release
または、削除allリモート側にもう存在しないフェッチされたブランチ:
$ git remote Prune Origin
ブランチがリモートで削除された場合、ローカルリポジトリをプルーニングする必要があります。これを行う最も簡単な方法は、
git fetch -p
これにより、リモートリポジトリに加えられたすべての変更でローカルリポジトリが更新されますが、ローカルブランチは更新されません。これを実行した後、
git branch --remote
削除されたリモートブランチは表示されなくなります。
自分のシステム上でもサーバー上でも、gitリポジトリは完全です。そのため、最初にリポジトリのクローンを作成すると、完全なコピーが取得され、ローカルgitはすべてのリモートブランチとローカルブランチについて「認識」しています。この情報は自動的には同期されないため、同僚がサーバーのrelease
ブランチを削除しても、ローカルgitリポジトリはリモートrelease
ブランチの概念を失いませんでした。 git fetch
と同期すると、リモートブランチのすべてのローカル情報が更新され、サーバー(厳密に言えば、リモートリポジトリ)の状態と一致しますが、リモートブランチのローカル情報は削除されません。 git fetch -p
(またはgit fetch --Prune
、またはgit remote Prune
)でプルーニングすると、削除されたリモートブランチのローカル情報が削除されます。
Tim:Gitは分散型VCSであるため、リモートからローカルにリポジトリを複製すると、すべて(履歴)が複製されます。そのため、レポを複製すると、リリースというブランチがありました。同僚がリリースブランチをリモートで削除したため、プルーンを実行するまでgit fetch -p
または明示的にそのブランチを削除します。ローカルはそのブランチを持ちます。
おそらく少し正接しますが、このサイトの観点は、ブランチを削除する一般的なトピックを理解するのに役立ちます:
ここで既に説明されているものと一部重複していますが、主な機能はハウスキーピングです。つまり、コラボレーション環境では不要になったリモートおよびローカルのブランチの削除です。特に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」はスクリプト自体のフォーマットには適用されません。)