git从master中的子树文件夹合并到分支根目录

时间:2016-03-17 04:27:36

标签: git merge git-subtree

其实我的问题是:
有没有办法从中的文件夹合并到分支中的root?

我想要的是:

  1. 分支读取树到分支中的文件夹
  2. 分支
  3. 下进行一些更改(在子树文件夹中添加文件)
  4. 将theese的更改(添加的文件)从 master 中的子树文件夹合并到 branch root
  5. 我试过这个教程:https://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging
    但结果出人意料:

    我做了:

        $ git init
        $ touch fileInMaster
        $ git add -A
        $ git commit --all -m 'initial commit'
        $ git checkout master
        $ git remote add rack_remote https://github.com/schacon/rack.git
        $ git fetch rack_remote
        $ git checkout -b rack_branch rack_remote/master
        $ git checkout master
        $ git read-tree --prefix=rack/ -u rack_branch
        $ git add -A
        $ git commit --all -m 'After read-tree to rack folder'
        $ echo 0 > rack/fileInRack
        $ git add -A
        $ git commit --all -m 'Add fileInRack file to rack folder'
        $ git merge --squash -s subtree --no-commit rack_branch
    

    我期待的是:

    • rack 文件夹中分支中的新文件'fileInRack'
    • rack_branch
    • 根目录中的新文件“fileInRack”

    但是在子树合并git后请注意我:

      

    删除rack / fileInRack
      壁球提交 - 不更新HEAD
      自动合并进展顺利;在按要求提交之前停止

    但我需要添加,而不是删除。

    那么,我做错了什么? 是否有其他方法可以将中的文件夹合并到分支中的根目录?

1 个答案:

答案 0 :(得分:0)

而不是

git merge --squash -s subtree --no-commit rack_branch

你可以做到

git checkout rack_branch
git merge --squash -s recursive -Xsubtree --allow-unrelated-histories master
git commit -m "commit fileInRack to rack_branch"

编辑:我偶然发现这篇文章的原因是我遇到了类似的问题,而我上面的解决方案无效(see here)。请注意有关--no-ff选项的修改。总是使用这个选项可能是一个好主意吗?