【问题标题】:Right way to switch Git Subtree branch?切换 Git Subtree 分支的正确方法?
【发布时间】:2018-12-25 17:25:42
【问题描述】:

假设我已经添加了一个新的远程“foo”,并拉出了一个子树,被压扁,带有分支 master。

$ git remote add -f foo some-repo.git
$ git subtree add --prefix=foo --squash foo master

从我读过的文章(herehere 等)来看,这似乎是切换分支的常用方法。在这种情况下,分支“bar”:

$ git rm -r foo
rm 'foo/file'.
...
$ git commit -m "Delete foo on branch 'master' to switch to branch 'bar'."
1350 files changed, 144703 deletions(-)
delete mode 100644 foo/file
...
$ git subtree add --prefix=foo --squash foo bar
git fetch foo master
From some-repo.git
 * branch            master     -> FETCH_HEAD
Added dir 'foo'

但这感觉很脏。为什么不直接使用已经有分支参数(没有 rm/commit/add)的“git subtree pull”?

$ git subtree pull --prefix=foo --squash foo bar
From some-repo.git
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 foo/file                                                        |  2 ++
 ... smaller changeset output ...

 3 files changed, 41 insertions(+)
 ...

当我在本地测试两者时,我发现子树目录 (./foo) 之间没有区别。为什么每个人都推荐添加更复杂的变更集和提交(删除和重新添加)的方式?我错过了什么,也许是一些边缘情况?

【问题讨论】:

    标签: git git-subtree subtree


    【解决方案1】:

    git subtree pull 于 2009 年 4 月由 Avery Pennarun apenwarr 在 Git 1.7.11 中引入 commit 13648af5

    添加“git subtree merge”和“git subtree pull”。

    这些是 'git merge -s subtree' 和 'git pull -s subtree' 的简单快捷方式,但将它们全部集中在一个命令中是有意义的。

    你可以在它的associated test看到

    -git merge -s subtree subproj-merge-split3
    +git subtree pull --prefix=subdir ../subproj subproj-merge-split3
    

    这与 rm/subtree add 不同,后者仍然更适合切换分支。

    【讨论】:

    • 这并没有真正回答我的问题(为什么用一种方法而不是另一种方法来切换分支),但由于我没有得到其他答案,所以你得到了赏金。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多