将更改从git子树推送到分支以获取拉取请求

时间:2016-10-12 16:35:13

标签: git git-subtree

如何创建git subtree的本地更改,然后将这些更改推送到子树的repo中的分支,以便我可以创建一个pull请求,将来自该分支的更改合并到子树的{{1 }}?

假设我有两个回购,masterproject,这两个都在我的控制之下。

第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回购中的新分支(尚未创建)

  • 这是推荐的工作流程吗?

1 个答案:

答案 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