What is the difference between GitHub Flow and GitLab Flow?
<p>Recently I've found the three concepts of a workflow in GIT: GitFlow, GitHub Flow and GitLab Flow. I've read <a href="https://docs.gitlab.com/ee/topics/gitlab_flow.html" rel="noreferrer">the nice articles</a> about it but I don't understand GitLab Flow very well. Maybe because I'm not a native speaker :)</p>

<p>Briefly.</p>

<p><strong>GitFlow</strong></p>

<p><a href="https://i.stack.imgur.com/8XsAv.png" rel="noreferrer"><img src="https://i.stack.imgur.com/8XsAvt.png" alt="gitflow"></a></p>

<p>We've a master branch as a production branch. Also we have a develop branch where every developer merges his features. Sometimes we create a release branch to deploy our features in production. If we have a bug in the release branch, fix it and pull changes into the develop branch. If we have a critical bug in production, create new hotfix-branch, fix the bug and merge branch with production (master) and develop branches.</p>

<p>This approach works well if we seldom publish results of our work. (Maybe once every 2 weeks).</p>

<p><strong>GitHub Flow</strong></p>

<p><a href="https://i.stack.imgur.com/cz09M.png" rel="noreferrer"><img src="https://i.stack.imgur.com/cz09Mt.png" alt="github flow"></a></p>

<p>We have a master branch as a production branch. And we (as developers) can  create branches for adding new features or fixing bugs and merge them with production (master) branch. It sounds very simple. This approach fits for extreme programming where the production branch is deployed several times in a day.</p>

<p><strong>GitLab Flow</strong></p>

<p><a href="https://i.stack.imgur.com/4cHGC.png" rel="noreferrer"><img src="https://i.stack.imgur.com/4cHGCt.png" alt="gitlab flow production"></a></p>

<p><a href="https://i.stack.imgur.com/TzvH0.png" rel="noreferrer"><img src="https://i.stack.imgur.com/TzvH0t.png" alt="gitlab flow environment"></a></p>

<p><a href="https://i.stack.imgur.com/fSsBJ.png" rel="noreferrer"><img src="https://i.stack.imgur.com/fSsBJt.png" alt="gitlab flow release"></a></p>

<p>I've seen new terms like a pre-production, a production, a release (stable) branch and a staging environment, a pre-production environment, a production environment. What relationships do they have between them?</p>

<p>I understand it this way: If we need to add a new feature we deploy a pre-production branch from the master branch. When we have finished the feature, we deploy a production branch from the pre-production branch. A pre-production branch is the intermediate stage. And then the master branch pulls all changes from the production branch.</p>

<p>The approach is good if we want to see each separate feature; we just checkout in the branch what we need to look at.</p>

<p>But if we need to show our work we create a release branch with a tag as late as possible. If later we fix bugs in the master branch we need to cherry-pick them to the last release branch. At the end we have the release branch with tags that can help us to move between versions.</p>

<p>Is my understanding correct?</p>

<p>What is the difference between <code>pull</code> and <code>cherry-pick</code>?</p>