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

Push changes from git subtree to a branch for a pull request

如何创建对 git subtree 的本地更改,然后将这些更改推送到子树存储库中的一个分支,这样我就可以创建一个拉取请求,将该分支的更改合并到子树的 master?

假设我有两个存储库,projectprotocols,它们都在我的控制之下。

第 1 步:将 protocols 作为 subtree 添加到 project 存储库

$ 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'

第 2 步:在 project 存储库中对 protocols 子树

中的文件进行一些更改
$ cd protocols
$ echo "foo" > some_file
$ git commit -a -m "added foo"

第 3 步:在 protocols 存储库中创建一个分支,并将我的本地更改从 project/protocols 子树推送到该分支

??

我不确定如何最好地实现这一目标...

一旦我的 subtree 更改已成功推送到远程 protocols 存储库中的一个分支,我就可以创建一个拉取请求以将这些更改合并回 protocols master.

问题:

create a branch in the protocols repo and push my local changes from project/protocols subtree to that branch

您可以通过一个命令 subtree push 来实现,指定一个新的远程分支:

$ git subtree push --prefix=protocols protocols feature

这将在远程存储库 protocols

中创建一个新分支 feature

您现在可以创建拉取请求以将 feature 分支合并回协议的 master 分支。

分支合并回来后,您可以使用 pull--squash

更新您的子树
$ git subtree pull --prefix=protocols protocols master --squash

这将创建另一个提交,将 protocols 存储库中的所有更改压缩为一个,然后创建一个合并提交以合并到您的 project 存储库

请注意,此方法有一个小问题,那就是现在您的 project 存储库中将有两个提交,其中包含对 protocols 存储库的更改。

  • project 存储库的 protocols 子树中进行的原始提交
  • 由后续子树拉取创建的提交(通常连同其他协议更改,假设使用 --squash