共享(pull request)ONLY SOME提交上游存储库

时间:2015-09-16 04:53:10

标签: git pull-request

我们面临的情况是我们为公司(GA)定制Web应用程序,并需要通过拉取请求将一些更改发送到git上游仓库。上游webapp是“AUS”。更改将在特定文件中,并在工作完成之前了解。所有工作(即使是AUS)都要在GA中捕获。

如果没有重复提交(来自cherry-pickrebase)我们如何解决这个问题并保持清洁和易于理解?

我为此制定了一个“食谱”并希望分享它。

1 个答案:

答案 0 :(得分:2)

我描述了配方,并显示了SourceTree看到的存储库状态的屏幕截图(因为它一次显示所有分支)。请注意,分支是“au”,“ga”和“master”,而不是配方中使用的GPT-99_description_AU,GPT-99_description_GA和GPT-99_description。

(你可能会问为什么在每个代码块之前还有一个额外的行和一段时间 - 这是我今天能够格式化它的唯一方法!)

  1. 创建3个分支。它们应该反映正在处理的问题,并为AuScope和GA提供另一个问题。我们还需要一个合并到
  2. $ git checkout master # or whatever base branch we will be using
    $ git branch GPT-99_description
    $ git branch GPT-99_description_AU
    $ git branch GPT-99_description_GA
    
    1. 在GA分支上执行所有工作
    2. $ git checkout GPT-99_description_GA
      
      1. 根据需要执行编辑,添加文件和删除文件
      2. 确定将要发送给AUS的文件,因为它们必须单独提交(否则我们将如何向JUS发送这些承诺?)
      3. 提交AUS文件。使用标识为AUS文件提交的内容启动提交消息
      4. $ git add <files>
        $ git commit -m "GPT-99 - AUS files - ..." 
        

        也许不使用消息使用标记。稍后要看的东西。

        1. 提交GA文件。无需识别信息。
        2. $ git add <files>
          $ git commit -m "GPT-99 - ..."
          

          SourceTree view after add, delete, edit

          1. 切换到AuScope分支
          2. Switch to the AuScope branch
            
            1. Cherry挑选AuScope提交(查看日志)
            2. $ git cherry-pick SHA#1
              $ git cherry-pick SHA#2
              ...
              

              After cherry-picking

              1. 现在发生的事情是提交已经被复制并且将存在于GA和AUS分支上。提交是分开的(它们具有不同的SHA)但它们的实质是相同的 - 如果两个都被重放将会发生冲突,因为它们都试图添加/删除/编辑相同的东西。我们可以使用https://git-scm.com/book/en/v2/Git-Branching-Rebasing#Rebase-When-You-Rebase中描述的git技巧,其中复制的提交将具有一个patch-id,用于将提交标识为相同。这允许我们rebase和git将解决不同的提交只是一个
              2. $ git rebase --onto GPT-99_description GPT-99_description_AU GPT-99_description_GA
                

                enter image description here

                1. 现在合并重复提交。然而,GA分支没有AUS变化。为了实现这一目标,我们合并:
                2. $ git checkout GPT-99_description_GA
                  $ git merge GPT-99_description_AU
                  
                  1. 存储库现在处于GA分支上所有更改的状态,并且要作为拉取请求发送给AuScope的更改位于AU分支上。
                  2. After merge - separate branch to do a pull request on