Updates to git flow documentation.
This commit is contained in:
parent
c96b31b77a
commit
3de6edd604
1 changed files with 6 additions and 5 deletions
|
@ -187,12 +187,15 @@ If you have an issue that spans across multiple repositories, the best thing is
|
|||
![Vim screen showing the rebase view](rebase.png)
|
||||
|
||||
With git you can use an interactive rebase (`rebase -i`) to squash multiple commits into one and reorder them.
|
||||
In GitLab EE and .com you can also [rebase before merge](http://doc.gitlab.com/ee/workflow/rebase_before_merge.html) from the web interface.
|
||||
This functionality is useful if you made a couple of commits for small changes during development and want to replace them with a single commit or if you want to make the order more logical.
|
||||
However you should never rebase commits you have pushed to a remote server.
|
||||
Somebody can have referred to the commits or cherry-picked them.
|
||||
When you rebase you change the identifier (SHA-1) of the commit and this is confusing.
|
||||
If you do that the same change will be known under multiple identifiers and this can cause much confusion.
|
||||
If people already reviewed your code it will be hard for them to review only the improvements you made since then if you have rebased everything into one commit.
|
||||
Another reasons not to rebase is that you lose authorship information, maybe someone created a merge request, another person pushed a commit on there to improve it and a third one merged it.
|
||||
In this case rebasing all the commits into one prevent the other authors from being properly attributed and sharing part of the [git blame](https://git-scm.com/docs/git-blame).
|
||||
|
||||
People are encouraged to commit often and to frequently push to the remote repository so other people are aware what everyone is working on.
|
||||
This will lead to many commits per change which makes the history harder to understand.
|
||||
|
@ -221,13 +224,11 @@ You can reuse recorded resolutions (rerere) sometimes, but without rebasing you
|
|||
There has to be a better way to avoid many merge commits.
|
||||
|
||||
The way to prevent creating many merge commits is to not frequently merge master into the feature branch.
|
||||
We'll discuss the three reasons to merge in master: leveraging code, solving merge conflicts and long running branches.
|
||||
We'll discuss the three reasons to merge in master: leveraging code, merge conflicts, and long running branches.
|
||||
If you need to leverage some code that was introduced in master after you created the feature branch you can sometimes solve this by just cherry-picking a commit.
|
||||
If your feature branch has a merge conflict, creating a merge commit is a normal way of solving this.
|
||||
You should aim to prevent merge conflicts where they are likely to occur.
|
||||
One example is the CHANGELOG file where each significant change in the codebase is documented under a version header.
|
||||
Instead of everyone adding their change at the bottom of the list for the current version it is better to randomly insert it in the current list for that version.
|
||||
This it is likely that multiple feature branches that add to the CHANGELOG can be merged before a conflict occurs.
|
||||
You can prevent some merge conflicts by using [gitattributes](http://git-scm.com/docs/gitattributes) for files that can be in a random order.
|
||||
For example in GitLab our changelog file is specified in .gitattributes as `CHANGELOG merge=union` so that there are fewer merge conflicts in it.
|
||||
The last reason for creating merge commits is having long lived branches that you want to keep up to date with the latest state of the project.
|
||||
Martin Fowler, in [his article about feature branches](http://martinfowler.com/bliki/FeatureBranch.html) talks about this Continuous Integration (CI).
|
||||
At GitLab we are guilty of confusing CI with branch testing. Quoting Martin Fowler: "I've heard people say they are doing CI because they are running builds, perhaps using a CI server, on every branch with every commit.
|
||||
|
|
Loading…
Reference in a new issue