Git 在等待待处理的PR时工作

Git 在等待待处理的PR时工作,git,pull-request,Git,Pull Request,我正在做一个项目,我提交了我的第一个拉请求,在我等待的时候,我想继续做我的项目,从我在合并中做的工作开始,这个合并仍在等待中。现在我有: *master user_story_1 user\u story\u 1有一个打开的拉取请求 现在我正在尝试创建一个新分支user\u story\u 2,在那里我可以继续我在user\u story\u 1上留下的工作。我如何在Git中做到这一点而不陷入任何冲突或影响我的挂起合并?从master为您的每个故事/功能创建一个新分支 在合并每个分支之前,请将

我正在做一个项目,我提交了我的第一个拉请求,在我等待的时候,我想继续做我的项目,从我在合并中做的工作开始,这个合并仍在等待中。现在我有:

*master
user_story_1
user\u story\u 1
有一个打开的拉取请求


现在我正在尝试创建一个新分支
user\u story\u 2
,在那里我可以继续我在
user\u story\u 1
上留下的工作。我如何在Git中做到这一点而不陷入任何冲突或影响我的挂起合并?

从master为您的每个故事/功能创建一个新分支

在合并每个分支之前,请将主分支合并到该分支中,或将分支重新设置到主分支上。我更喜欢后者,但最终结果是一样的


你会遇到冲突,这是无法避免的。但是,您希望解决分支中的冲突;不是主人。通过这种方式,您可以在解决冲突后测试分支,然后再将其合并到master中。

我假设您希望在您在
user\u story\u 1
中所做工作的基础上启动新的
user\u story\u 2
分支。以下是我在此类场景中使用的工作流:

  • 用户\u故事\u 1打开拉取请求:

      * (user_story_1)
      *
     /
    * (master)
    *
    *
    
    $ git checkout -b user_story_2 user_story_1
  • 基于
    用户故事1
    创建新分支
    用户故事2

      * (user_story_1)
      *
     /
    * (master)
    *
    *
    
    $ git checkout -b user_story_2 user_story_1
  • 新分支机构的工作:

      * (user_story_2)
      *      
      * (user_story_1)
      *
     /
    * (master)
    *
    *
    
  • 拉取请求被合并:

      * (user_story_2)
      *      
    * | (master)
    |\|
    | * (user_story_1)
    | *
    |/
    *
    *
    *
    
  • 删除旧分支:

      * (user_story_2)
      *      
    * | (master)
    |\|
    | *
    | *
    |/
    *
    *
    *
    
  • 将新分支重新设置到主分支上

      * (user_story_2)
      *      
     /
    * (master)
    |\
    | *
    | *
    |/
    *
    *
    *
    

  • 我对此的首选工作流:

  • 在分支主机上,
    git checkout-b user\u story\u 1
  • 更改
    用户故事\u 1
  • 打开
    用户\u故事\u 1的PR
  • 在分支
    user\u story\u 1
    git checkout-b user\u story\u 2
  • user\u story\u 2
    进行更改
  • 一旦
    user\u story\u 1
    合并到master中,切换到
    user\u story\u 2
    并执行
    git-rebase-i master
  • 这将向您显示要包含在重基中的
    user\u story\u 2
    提交列表。删除来自
    user\u story\u 1
    的前几个提交
  • 重新基础应该干净地完成,除非主数据库用其他更改进行了更新。现在你有了
    user\u story\u 2
    在master的基础上重新设置,并且只有它的提交

  • 如果第一个分支被拒绝,会发生什么?我通常会将
    user\u story\u 2
    重设到
    master
    git-rebase——重设到master user\u story\u 1 user\u story\u 2
    ——如果两个分支不是完全独立的,可能会导致冲突。我会尝试一下第6步,使用交互式重设使事情变得更容易。尝试
    git-rebase-i master
    ,它会向您显示
    user\u story\u 2
    上的提交列表,包括
    user\u story\u 1
    的早期提交。从
    user\u story\u 1
    中删除提交的
    pick
    行,并完成重新基础。@shaneb因为
    user\u story\u 1
    已合并(可能已删除),您需要将
    user\u story\u 2
    重新基础到
    master
    。这是相同的原则:
    master
    现在包含了
    user\u story\u 1
    中的所有提交(加上合并提交),因此它实际上与在添加另一个提交后重新基于
    user\u story\u 1
    的情况相同。Git中的分支只是对提交的引用(思考指针),因此当您重新设置分支的基础时,您只需将提交重新应用于新的基础提交(基础分支引用的基础提交)。只要您从旧分支创建一个新分支,并在同步主分支后重新设置基础(请参阅接受的答案),不应该有冲突。在公认的答案中,第二个分支(假设它有变化——否则,为什么要这样做?)在第一个分支合并到master之后肯定会有冲突。它可以,但如果你是唯一一个处理它的人,它不应该有冲突