私はあなたが使うコマンドに少し混乱しています。 HEAD
通常、gitが現在作業ディレクトリにあるコミットを追跡するために使用するラベルです。このgit fetch
コマンドは、リモートまたはリモートのコミット構成が何をフェッチするかを認識していることを前提としています。を使用すると、リポジトリ内のリモートgit fetch HEAD
が示されます。HEAD
コマンドがエラーなしで機能したことは不思議です。
例: git fetch HEAD
リポジトリで現在作業していると、次のエラーが発生します
fatal: 'HEAD' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
このコマンドgit remote
はすべてのリモートを一覧表示しgit remote --verbose
、リモートのアドレスを含めます。これを使用して、リモートが定義されているかどうか、HEAD
およびどのリモートが友達リポジトリにアドレス指定されているかを確認できますか?
しかし、私の質問はさておき、あなたの混乱を解消するのに役立ちます。このgit fetch ...
コマンドは、リモート参照のみを更新します。ローカル参照は更新しません。
これを明確にするには、リポジトリの.gitフォルダーの内部を確認します(デフォルトでは非表示になっているため、再表示する必要がある場合があります)。次のようなフォルダ構造があります
working directory
|=>.git
| |=>objects <= contains data for each commit
| |=>refs
| |=>heads
| |-master <= file containing current commit of local master branch
| |=>remotes
| |=>origin
| |-master <= file containing current commit of remote origin's master branch
|-FETCH_HEAD <= file updated by `git fetch`, contains info of what was fetched
マスターブランチをチェックアウトするgit checkout master
とします。--gitは、「。git / refs / heads/master」ファイルのコミット値と一致する「objects」フォルダーのコミットデータと一致するように作業ディレクトリを変更します。
その場合git fetch origin master
、「。git / refs / remotes / origin / master」ファイルは、リモートオリジンのマスターブランチのコミットに更新されます。そのコミットに必要なすべてのコミットデータがダウンロードされ、「オブジェクト」に配置されます。フォルダ。
ここで重要な点はgit fetch
、チェックアウトされたローカルブランチを反映して作業ディレクトリを更新せず、ローカルブランチをgit fetch
更新しないことです。
の変更でローカルブランチを更新するには、またはのいずれgit merge ...
かを使用する必要があります。 オプションと構成に応じて、とのいずれかまたはを実行します(デフォルト)。git rebase ...
master
origin/master
git pull ...
git fetch ...
git merge ...
git rebase ...
git merge ...
そのすべての説明の後、友達のリポジトリから何が(もしあれば)フェッチされたかを確認できるようにしたいと思います。このgit branch -avv
コマンドは、すべてのローカルブランチとリモートブランチをコミット番号とともに一覧表示し、ローカルブランチの場合は、追跡しているリモートブランチを一覧表示します。
ブランチが互いにどのように関連しているかを確認するには、ツールを使用してリポジトリツリーをグラフ化すると便利です。選択できるものはいくつかありますが、git log
コマンドで十分だと思います。などgit log --all --graph --oneline --decorate
。公正な警告です。これは非常に長く、大規模なリポジトリでは複雑になる可能性があります。--simplify-by-decoration
引数を追加することで、より短い出力を得ることができます。
要約すると、自宅で修正できるかどうかは、リポジトリ内の情報によって異なります。上記のコマンド。git remote --verbose
、git branch -avv
およびgit log ...
リポジトリの現在の状態を理解できるようにする必要があります。git merge
そこから、またはを使用してローカルブランチのデータを取得するためにさらに何かを行う必要があるかどうかを判断できますgit rebase
。
いつものように、問題が発生した場合は、学んだことを投稿してください。