【问题标题】:Merging git branch into another branch with outstanding pull requests将 git 分支合并到另一个具有未完成拉取请求的分支中
【发布时间】:2017-12-02 03:23:14
【问题描述】:

首先,如果这是重复的,我深表歉意,我看了看,找不到任何匹配的东西。

我和我的团队最近在使用 Git(使用 SourceTree GUI)时遇到了一些问题,我希望有人能提供帮助。我们有一个系统,我们从主分支中获取修补程序分支,并在请求得到修复后将它们合并到发布候选 (RC) 分支中。

假设 Bob 和 John 都有修补程序,因此他们各自从 master 获取一个分支并单独工作。 Bob 完成工作后,他拉出 RC 分支并合并他的更改。这通常没问题。

我们遇到的问题是,有时 John 会将他的工作合并到 RC 分支中,而不会解决由 Bob 的提交引起的未完成的拉取请求。 SourceTree 然后会弹出一条消息说 John 需要拉 RC 分支,但这可能会导致合并冲突,并可能导致(并且已经导致)Bob 所做的工作被完全擦除,但是它不能再次合并为它已经在分支历史记录中。

我知道显而易见的答案是确保您在合并之前执行拉取请求,但是如果 John 在没有解决拉取请求的情况下进行合并,有没有办法可以保证不会丢失任何工作?

我已经研究过似乎可行的变基,但我对过度使用它持谨慎态度,因为 RC 分支是公开的并且由团队中的每个人编辑。

【问题讨论】:

    标签: git version-control merge atlassian-sourcetree


    【解决方案1】:

    由于所有开发人员都使用 RC 分支,因此您最好不要重新设置此分支。 除了 pull request,还有其他选项可以参考:

    1.John直接合并到RC分支,如果以后需要使用Bob的版本,可以通过cherry-pick重置或重新应用Bob的版本。

    # In John’s local repo
    git checkout RC
    git pull origin RC
    git diff  RC..hotfix  #to find the files difference between the branches
    git merge hotfix
    # modify and solve conflict files
    git add .
    git commit
    

    如果以后需要保留 Bob 的版本,可以使用git reset --hard HEAD~ 将 John 的 hotfix 重新合并到 RC 中,解决与对方版本的冲突。或者你可以使用git cherry-pick <commit id Bob merged into RC>重新申请Bpb的版本。

    2.如果您有 QA 团队在有更改要合并到 RC 时测试 RC 分支,则 John 和 Bob 都可以将本地修补程序(hotfix_Bobhotfix_John)分支推送到远程。然后 QA 团队测试并将修补程序分支合并到 RC

    【讨论】:

    • 感谢您的回复。我不确定这些是否会起作用。 1) 我们的 RC 分支是一个月内所有修补程序和新功能的高潮,所以它必须有所有工作,所以这与我们目前所做的基本相同。 2)我们确实有一个 QA 团队来测试我们的修复,但他们在 RC 分支上执行此操作,因为他们没有合并分支本身的技术技能(我们是一家相当小的公司)
    • 第一个选项可以使用演示 git repo 进行测试和练习。
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2013-11-09
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2013-12-05
    相关资源
    最近更新 更多