假设我已经添加了一个新的远程“ foo”,并拉了一个与分支主控一起压缩的子树。
$ git remote add -f foo some-repo.git
$ git subtree add --prefix=foo --squash foo master
从我读过的文章(here和here等)看来,这似乎是切换分支的常用方法。在这种情况下,分支“ 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)之间没有差异。为什么每个人都推荐一种添加更复杂的变更集和提交(删除和重新添加)的方式?我想念的是什么,也许是一些边缘情况?
答案 0 :(得分:0)
git subtree pull
是commit 13648af5于2009年4月在Avery Pennarun apenwarr
中为Git 1.7.11引入的。
添加'
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不同,后者仍然更适合切换分支。