質問: Visual Studio Community2019及びバージョン管理初心者です。 ある活動でバージョン管理が必要になったため、環境を構築し始めています。 pullについてわからないことがあるため、ご教示ください。 そしてpullについて私が誤解しているようでしたら、それもご指摘お願いします。 リモートリポジトリの特定のcommitのみ、ローカルリポジトリに反映させることができますか? 例えば、共同開発者が1つのリモートリポジトリの中にあるAとBという2つのファイルにそれぞれcommitをして変更を加えたとします。そして、私は自分のローカルリポジトリのAファイルのみ、リモートリポジトリと同期させたい(共同開発者のcommitを自分のローカルリポジトリのAに反映させたい)とします。その時どのような操作を行えば実現できますか。 自分のローカルリポジトリのBファイルには共同開発者のcommitを反映させたくありません。 そしてこの操作をVisual Studio Community上で行いたいです。 現在、リモートリポジトリにはAzure DevOpsを、ローカルリポジトリにはGit、そしてVisual Studio Community 2019を用いて環境構築をしています。リモートリポジトリは共同開発者と共有しています。 ご存じの方がいらっしゃいましたら、教えてください。 どうかよろしくお願いいたします。
回答: 表題の > > リモートリポジトリから特定のコミットだけをローカルに反映したい > > > と、文中の > > Aファイルのみ、リモートリポジトリと同期させたい > > > のどちらを実際にやりたいのかにもよりますが、まず前者は`cherry-pick`で可能です。 ``` git fetch ``` でremote-trackng branchが最新化されますので、そこから取り込みたいcommitのハッシュ値を確認し、 ``` git cherry-pick <取り込みたいcommitのハッシュ値> ``` で取り込めます。 後者の場合は、 ``` git fetch ``` を行いremote-tracking branchを最新化した後、 ``` git checkout -- ``` で可能です。 最近のバージョン(2.23以降)だと`restore`コマンドでも同じことができます: ``` git restore --source --staged --worktree -- ``` また、 > > 自分のローカルにあるBはそのままにしたいです。 > > > ということであれば、Aファイルだけ最新状態を取り込む、のではなく、リモートブランチの変更を全て取り込んだ上でBファイルだけ古い状態(=リモートの変更を取り込む前のローカルブランチの最新状態)に戻す、という考え方もあるかと思います。