切换Git Subtree分支的正确方法是什么?

7
假设我已经添加了一个名为“foo”的新远程仓库,并使用主分支拉取了一个子树,进行了合并压缩操作。
$ git remote add -f foo some-repo.git
$ git subtree add --prefix=foo --squash foo master

根据我所阅读的文章(这里这里等),这似乎是切换分支的常见方法。在这种情况下,要切换到 "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'

但这种方式不太干净。为什么不直接使用已经有分支参数的 "git subtree pull" 呢?(无需 rm/commit/add)?
$ 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) 之间没有任何区别。为什么每个人都推荐添加更复杂的变更集和提交的方法(删除并重新添加)?也许我错过了一些边缘情况?
1个回答

0

git subtree pull是由Avery Pennarun apenwarr在2009年4月为Git 1.7.11引入的,详见提交记录13648af5

添加 'git subtree merge' 和 'git subtree pull'。

这些都是 'git merge -s subtree' 和 'git pull -s subtree' 的简单快捷方式,但将其合并为一个命令更加合理。

您可以在其相关测试中查看。

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

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


这并没有真正回答我的问题(为什么在切换分支时选择一种方法而不是另一种方法),但由于我没有得到其他答案,你将获得赏金。 - jmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接