【发布时间】:2018-12-25 17:25:42
【问题描述】:
假设我已经添加了一个新的远程“foo”,并拉出了一个子树,被压扁,带有分支 master。
$ 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) 之间没有区别。为什么每个人都推荐添加更复杂的变更集和提交(删除和重新添加)的方式?我错过了什么,也许是一些边缘情况?
【问题讨论】:
标签: git git-subtree subtree