2017-09-05 48 views
1

それを引くのは、私はこのようなサブツリーを作成したとしましょう:Gitのサブツリー:別のディレクトリに移動サブツリーと

git subtree --add --prefix=subdir <path_to_remote> <remote_branch> --squash 

それから私は、サブディレクトリの名前を変更/移動したかったので、私はこれを実行します。 gitのMVサブディレクトリDIR2を/ SUBDIR今、私は新しい接頭辞にそのサブツリーを引くしようとすると、

git subtree --pull --prefix=dir2/subdir <path_to_remote> <remote_branch> --squash 

Gitは言う:

Can't squash-merge: 'dir2/subdir' was never added. 

どうすれば適切に行うことができますか?

答えて

1

あなたaddサブツリーとき、それは最初のコミットに名前を格納するため、git subtreeコマンドは、あなたのサブツリーを知っている:most-を見つけることgit-subtree-dirを含むコミット--squashオプション付き

Add 'subdir/' from commit 'c7fbc973614eced220dcef1663d43dad90676e00' 

git-subtree-dir: subdir 
git-subtree-mainline: c166dc69165f6678d3c409df344c4ed9577a2e11 
git-subtree-split: c7fbc973614eced220dcef1663d43dad90676e00 

git subtree pullが見えますリモートリポジトリからの最近のコミット、したがってすべてのコミットを適用して潰すポイント。多くの場合、git subtree split --rejoin操作が成功する

$ git subtree split --rejoin --prefix=dir2/subdir HEAD 
Merge made by the 'ours' strategy. 
25070c483647f8136655d0e0c6c3d62f469177aa 

結果のようなルックスをコミットします。これは、コミット

Split 'dir2/subdir/' into commit '25070c483647f8136655d0e0c6c3d62f469177aa' 

git-subtree-dir: dir2/subdir 
git-subtree-mainline: 59cc3c770e78dbc30bdfe36a6b4e14ce83b38f6c 
git-subtree-split: 25070c483647f8136655d0e0c6c3d62f469177aa 

が発見されると、次git subtree pull --squashは、ほとんどの場合に成功します。サブツリー操作が失敗することがあり、レポの作業コピーにサブツリーのブランチを残すことに注意してください。クリーンスレートで始まる残りの一時的なブランチを削除してください。

上記の操作は成功しないことがありますが、その理由が見つかりませんでした。そのような場合は、サブツリーを追加したコミットにリベースし、コミット・メッセージを修正して手動でディレクトリー名を変更することができます。しかし、この操作は、他のすべてのあなたの全体の歴史を破損します。

+0

ありがとう、それは私のために働いた! gitのサブツリーがコミットメッセージのテキストを探していると言ったので、名前を変更するために必要なテキストを追加しようとしましたが、私の作業コピーのサブツリーのブランチで終わりました。 – Amomum

関連する問題