如何创建git subtree
的本地更改,然后将这些更改推送到子树的repo中的分支,以便我可以创建一个pull请求,将来自该分支的更改合并到子树的{{1 }}?
假设我有两个回购,master
和project
,这两个都在我的控制之下。
第1步:在protocols
回购中添加protocols
subtree
project
第2步:对$ git remote add protocols git@bitbucket.org:corp/protocols.git
$ git remote
origin
protocols
$ git subtree add --prefix=protocols protocols master --squash
...
From bitbucket.org:corp/protocols
* branch master -> FETCH_HEAD
* [new branch] master -> protocols/master
Added dir 'protocols'
子树中project
子树中的文件进行一些更改
protocols
第3步:在$ cd protocols
$ echo "foo" > some_file
$ git commit -a -m "added foo"
回购中创建分支,并将我的本地更改从protocols
子树推送到该分支
...
我不确定如何最好地实现这一目标......
将project/protocols
更改成功推送到远程subtree
repo中的分支后,我可以创建一个pull-request,将这些更改合并回protocols
{{ 1}}。
问题:
我有protocols
的本地副本。我应该更改到该存储库,创建分支,然后更改回master
并将protocols
更改推送到我的本地project
存储库吗?
我可以在我的本地 subtree
repo中将protocols
更改直接推送到新分支(尚未创建)
我可以将subtree
更改直接推送到远程 protocols
回购中的新分支(尚未创建)
这是推荐的工作流程吗?
答案 0 :(得分:6)
在协议仓库中创建分支,并将我的本地更改从项目/协议子树推送到该分支
您可以使用单个命令subtree push
来实现,指定新的远程分支:
$ git subtree push --prefix=protocols protocols feature
这将在远程存储库feature
protocols
您现在可以创建一个拉取请求,将feature
分支合并回master
协议分支。
分支合并后,您可以使用pull
--squash
$ git subtree pull --prefix=protocols protocols master --squash
这将创建另一个提交,将protocols
repo中的所有更改压缩为一个,然后合并提交以合并到您的project
repo
请注意,此方法有一个小小的怪癖,现在您的project
回购中会有两次提交,其中包含对protocols
回购的更改。
project
repo' protocols
子树--squash
)