###### tags: `git`
# Git cheat sheet ;)
*Author: **Jérémy Habit***
*Created at: **26/02/2021***
*Last updated : **26/02/2021***
## How to rebase
#### Step 1 : get the last version of the main branch
1) **`git checkout my-main-branch`**
2) **`git pull`**
#### Step 2 : get the last version of the sub branch
3) **`git checkout my-sub-branch`**
4) **`git pull`**
#### Step 3 : rebase the sub branch from the main one
5) **`git rebase my-main-branch`**
6) check & resolve potentials conflicts then ==> **`git rebase --continue`**
7) **`git push -f`**
## Commit naming rule
1) Based on [conventional commits : check it, it's easy to understand ;)](https://www.conventionalcommits.org/en/v1.0.0/#summary) : **`feat(login) :`**
2) Write the release's number the feature is destinated for : **`@2.35 /`**
3) Write the sprint's number the feature has been developped : **`SP-58 /`**
4) If it exists, write the jira's ticket's number of the feature : : **`MP_5467 /`**
5) Write a description : **`login screen done`**
> Exemples :
* **`feat(login) : @2.35 / SP-58 / MP_5467 / login screen done`**
* **`fix(postOffer) : @2.34 / SP-57 / MP_5434 / weight & capacity max value`**
* **`ci(gha) : @2.35 / SP-58 / MP_5467 / git hub actions updated to github flow`**
* **`docs(git) : @2.35 / SP-58 / docs for git commands and rules`**
## How to merge several commits into ONE only
In order to keep a clean and 'easy to use' historical of commits, it's better to merge several commits into one commit BEFORE to merge it on **`main`**(quality) or on **`feature-branch`**.
> For the exemple :
* the current feature branch : **`my-feature-branch`**
* the parent branch : **`main`**
* number of commits: 3
#### Step 1 : identify the last commit of the main branch
1) **`git log`**
> you should see something like that. The 3 commits are inside the blue frame.

2) Copy the sha1 of the last commit of the **`main`** branch: **`4f55ad331e124b32c72f14b29911cd56d2ed05b6`** (inside the pink frame)
3) **`git rebase -i 4f55ad331e124b32c72f14b29911cd56d2ed05b6`**
> You should see something like the following screen.

4) Press the **`i`** key to active the insert mode. Now, you have to make a choice for each commit by writting commandes like pick, reword, fixup etc before each commit : it's easy
* **pick** or **reword** the first one.
* **fixup** all others.
> Like follwing :

5) Then leave the insert mode by pressing **`esc`** key.
6) Type **`:wq`** and press **`enter`**
7) if you chose to reword a commit, then you will see a new screen to rename it. If you chose to reword 3 commits, then you will see three new screens, one after other. (Use insert mode and :wq to save as above)
8) check & resolve potentials conflicts then ==> **`git rebase --continue`**
9) **`git push -f`**
10) check the github repository, it should be done :+1:
## Multiple lines
pour visual block : control + v
pour insert multiple line ensuite : maj +I, insérer des caractéères puis echap.
pour delete multiple lines ensuite : juste appuyer sur "d"