Working while waiting for pending PR

GitPull Request

Git Problem Overview


I'm working on a project and I submitted my first pull request and while I'm waiting I want to continue on working on my project building up from what I worked on the merge that's still pending on. Right now I have :

*master
user_story_1

user_story_1 has an open pull request.

Now I'm trying to create a new branch user_story_2 where I can continue the work I left of at user_story_1. How can I do this in Git without getting into any conflict or affecting my pending merge?

Git Solutions


Solution 1 - Git

I'm assuming you want to start the new user_story_2 branch on top of the work you've done in user_story_1. Here's the workflow I use in this sort of scenario:

  1. Open Pull Request for user_story_1:

       * (user_story_1)
       *
      /
     * (master)
     *
     *
    
  2. Create new branch user_story_2 based on user_story_1:

    $ git checkout -b user_story_2 user_story_1

       * (user_story_1, user_story_2)
       *
      /
     * (master)
     *
     *
    
  3. Work on the new branch:

       * (user_story_2)
       *      
       * (user_story_1)
       *
      /
     * (master)
     *
     *
    
  4. Pull Request gets merged:

       * (user_story_2)
       *      
     * | (master)
     |\|
     | * (user_story_1)
     | *
     |/
     *
     *
     *
    
  5. Delete old branch:

       * (user_story_2)
       *      
     * | (master)
     |\|
     | *
     | *
     |/
     *
     *
     *
    
  6. Rebase new branch onto master:

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

Solution 2 - Git

My preferred workflow for this:

  1. On branch master, git checkout -b user_story_1.
  2. Make changes to user_story_1.
  3. Open PR for user_story_1.
  4. On branch user_story_1, git checkout -b user_story_2.
  5. Make changes to user_story_2.
  6. Once user_story_1 gets merged into master, switch to user_story_2 and do git rebase -i master.
  7. This should show you a list of commits on user_story_2 that you want to include in the rebase. Delete the top few commits that came from user_story_1.
  8. The rebase should complete cleanly unless master was updated with other changes. Now you have user_story_2 rebased on master and only having its commits.

Solution 3 - Git

Create a new branch from master for each of your stories/features.

Before merging each branch back, either merge master into that branch or rebase your branch onto master. The latter has my preference, but in the end the outcome is the same.

You are going to get conflicts, there is no way around that. However, you want to solve conflicts in your branch; not in master. This way, you can test your branch after resolving the conflicts before merging it into master.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMiguel Angel QuintanaView Question on Stackoverflow
Solution 1 - GitalexterceteView Answer on Stackoverflow
Solution 2 - GitAthyuttam EletiView Answer on Stackoverflow
Solution 3 - GitStephan BijzitterView Answer on Stackoverflow