git subtree pull について質問です。yahooリポジトリとtakaboyリポジトリがあったとして、例えば、以下のコマンドを、ローカルリポジトリyahoo、takaboy201208ブランチで実行した場合、ローカルリポジトリyahooの「takaboy」フォルダに、リモートリポジトリtakaboy、takaboy_20251208ブランチの内容が反映されると思いますが、削除ファイルも反映されるのでしょうか?git subtree pull --prefix=takaboy takaboy_origin takaboy_20251208ローカルリポジトリyahooにyagoo/takaboy/taka.txtが存在している状態で、takaboyリポジトリにて、taka.txtを削除し、commit→pushした後に、上記コマンドでローカルリポジトリyahooにより込んだ場合、yagoo/takaboy/taka.txtは削除されないのでしょうか?一応試してみたのですが、消えない様で、これが、gitの仕様なのか、何かコマンドオプションなどをつけ忘れているのかが、分かりません。目的としては、git subtree pullコマンドで取り込んだ先でも、taka.txtを削除させたいです。事情があり、ローカルリポジトリyahooの直接編集は禁止されています。

yahoo

1件の回答

回答を書く

1220913

2026-01-23 19:15

+ フォロー

git subtree pull コマンドは、指定した subtree ルートのフォルダにリモートの変更をマージする動作ですが、削除されたファイルがローカルの subtree フォルダ内から自動的に削除されるかというと、これは仕様上そうならないことが

多いです。ᜊ•ᴗ•ᜊゎꩢゎꩢ



つまり、例えば takaboy リポジトリ側で taka.txt を削除しコミット&プッシュした場合でも、ローカル yahoo リポジトリで





git subtree pull --prefix=takaboy takaboy_origin takaboy_20251208





を実行しても、takaboy フォルダ内の taka.txt は削除されずに残る場合があります。これは git subtree pull が実質的に「リモートの subtree 履歴をマージする」操作であって、ファイル単位での完全なローカル同期(特に削除の反映)を保証していないためです。



削除まで反映するには、git subtree pull 後に手動やスクリプトで「リモートとローカルの subtree フォルダのdiffで削除されたファイルを git rm で削除する」という対応を行うことが現実的です。



また、現場でよく使われる方策として、単に subtree の pull ではなく、リモートの takaboy ブランチをフェッチしたのちに下記のようにリモートブランチの内容ごとローカルの subtree にチェックアウトし、削除も含めた完全同期を行う方法があります。





git fetch takaboy_origin

git checkout takaboy_origin/takaboy_20251208 -- takaboy





ただしこの方法はローカルで takaboy フォルダの直接編集を禁止している環境では問題なくても、コミット履歴の整合性に注意が必要です。



結論として、git subtree pull だけでは削除ファイルの反映は保証されないため、削除も含めて同期させたいなら手動操作や別コマンドの併用が必要です。



参考に、似た質問では git pull や subtree pull は削除ファイルを消さず、削除部分は明示的に処理するのが普通とされています。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有