19574


githubでソースを管理しております。  
また、ブランチは以下で運用しております。  
\- master  
\- develop  
\- feature/・・・

その上で、例えば、feature/Aのブランチで作成されたファイルの一部、またはすべてのファイルをfeature/Bのブランチへコピーしたい（ディレクトリごとの場合も含めて）

※現状はfeature/Bのブランチにいる状態で。

このような場合、どのようにすればいいのでしょうか？

これまでは、ブランチ間での差分を見比べて、変更があった箇所のみコピーして貼り付けるといった作業をしておりました。

イメージとしましては

$ cp feature/A feature/B ./*  
みたいなことがしたいです。(コマンド一発で、ブランチ間の差分をすべてコピーしたいです)

よろしくお願いします。


CC BY-SA 3.0
2015-12-02T11:04:56.813
19559
2016-10-15T13:10:21.557
2016-10-15T13:10:21.557
754
13175
question
git
ブランチ間のファイルをcpしたい。


[`git-checkout`のman](https://git-scm.com/docs/git-checkout/2.6.2)が言うところの  
`git checkout [-p|--patch] [<tree-ish>] [--] [<paths>…​]`  
が所望のコマンドではないでしょうか。  
`feature/B` をチェックアウトした状態で、上記コマンドの`<tree-
ish>`の部分に`feature/A`を指定してあげればindexに差分が入った状態になります。

> The argument can be used to specify a specific tree-ish (i.e. commit, tag or
> tree) to update the index for the given paths before updating the working
> tree.

ということで具体的には以下のようになると思います。

[code]

    $ git checkout feature/B
    $ git checkout feature/A '*'
    
[/code]


CC BY-SA 3.0
2015-12-02T14:44:00.150
19569
2015-12-03T02:45:23.140
2015-12-03T02:45:23.140
2808
4010
19559
answer


feature
ブランチ同士のマージが、ワークフロー上行儀がよくなくてやりたくない、でもマージした結果と同じものがほしい、という場合でしたら、次が実行できます。

[code]

    # (feature/B ブランチ上で)
    git merge --squash feature/A
    # => worktree と index がマージした状態になるが、コミットはされない
    
[/code]


CC BY-SA 3.0
2015-12-02T15:10:32.247
19571
2015-12-02T15:10:32.247
754
19559
answer


履歴が残るマージをしたくない理由はいろいろあるのでしょうから、パッチを作って適用すればいいかな？

[code]

    git diff feature/B..feature/A > ab.patch
    patch -p1 < ab.patch
    
[/code]

EDIT: diffの方向をコメントに従って修正しました。


CC BY-SA 3.0
2015-12-02T17:44:23.613
19574
2015-12-03T02:23:46.373
2015-12-03T02:23:46.373
7837
7837
19559
answer