【问题标题】:Gitlab - How to organize branches in a forked project?Gitlab - 如何在分叉项目中组织分支?
【发布时间】:2019-07-26 02:20:30
【问题描述】:

我已经从 GitHub 分叉了一个项目。我在master 分支中进行自己的开发(通过为已开发的功能/修复创建分支并将它们合并回master)。

现在我在我的 fork 中创建了一个分支 bugfix-123,以修复原始项目中的问题 123。我想创建一个新的拉取请求,以便将我的修复合并到原始项目中。但我注意到,拉取请求不仅包含错误修复本身,还包含自创建分支以来我在 master 分支中的所有提交。

如何创建仅包含单个提交的拉取请求?我必须为此创建另一个分叉吗?为了能够在原始项目中创建拉取请求并执行我自己的分叉版本开发,我应该做些什么不同的事情?

【问题讨论】:

  • 为什么您的拉取请求不只包含错误修复本身?您是否在新分支 (bugfix-123) 上完成了 git merge master 以合并到 master 中?
  • @R.García 听起来 OP 在创建 bugfix-123 分支之前还有其他几个功能和/或错误修复,它们已合并到 master 中。
  • @Code-Apprentice 感谢您的链接,但其中的解决方案并不让我满意。
  • @xarx 为了进一步帮助您,请edit 您的问题包含您尝试过的确切命令。然后描述结果以及它与您想要的结果有何不同。

标签: git github gitlab


【解决方案1】:

正如Send a pull request on GitHub for only latest commit 中已经提到的,有必要为拉取请求创建一个单独的错误修复分支。 编辑:虽然我认为我的答案与链接中接受的答案不同,但我可能读错了 - 我也是这样做的:

git fetch upstream              #synchronize local repo from upstream

git checkout upstream/master    #the upstream repository master has already a local branch, upstream/master, it's not necessary to create another copy
git checkout -b PR-bugfix-123     #create a branch dedicated for the pull request, and make it your current branch
git cherry-pick <commit hash>   #merge changes from a specific commit; cherry-pick also allows picking a range of commits

git push origin PR-bugfix-123   #publish the branch to the fork in order to create the pull request

符号:

我决定采用以下约定:

  • 开发分支是master,还是不用重命名
  • 开发 bugfix 分支仍然是 bugfix-123
  • 拉取请求分支以“PR”为前缀:PR-bugfix-123

【讨论】:

  • 我很高兴看到你想通了。该答案似乎与您链接的问题的公认答案相同。请注意,我使用git rebase 的回答基本上会以更少的命令提供相同的结果。唯一的区别是它将移动现有的bugfix-123 分支以指向樱桃选择的提交,而不是创建一个新的分支。
  • 是的,但这种差异对我来说很重要 :-) 是的,你是对的,我可能误读了链接中接受的答案。
【解决方案2】:

首先,您应该将原始项目添加为远程:

git remote add upstream <URL to original project>

现在从原始中获取分支:

git fetch upstream

您现在将拥有一个名为 upstream/master 的分支,它反映了原始存储库中的 master 分支。您可以通过在此分支之上重新定位来移动您的错误修复分支:

git checkout -b PR-bugfix-123 bugfix-123
git rebase --onto upstream/master master

【讨论】:

  • 我已经这样做了,但这并不能解决我的问题。我不明白 git rebase 有什么帮助。
  • @xarx git rebase 将修改您的分支,使其仅包含您希望包含在 PR 中的更改。
  • 在我看来git rebase 会从我的开发分支中删除错误修复提交并将它们插入到 PR 错误修复分支中。这会破坏我的开发分支。
  • @xarx Rebase 不会删除任何提交。相反,它复制提交序列中的更改以创建新的提交序列。然后它将移动您的错误修复分支。这不会影响任何其他分支,包括开发分支。有关示例,请参阅 git-scm.com/book/en/v2/Git-Branching-Rebasing。 (请注意原始提交如何仍在历史记录中,如灰色提交所示。)
  • @xarx 也许这里的混乱是由于我未说明的假设。例如,我假设您希望将所有提交包含在您的 bugfix-123 分支中,但它们不在您的本地 master 中,作为 PR 的一部分。
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 2011-06-24
  • 2011-05-01
  • 2022-11-27
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多