add a split commit example

Gregory Hainaut 2014-07-20 12:10:18 -07:00
parent 5aa147af38
commit 954ca419c9
1 changed files with 30 additions and 9 deletions

@ -1,32 +1,34 @@
There is a lots of guide/docs on internet but there are too big and confusing. You will find here a mini guide to use git with a minimal number of command and parameters. You won't find any details or explication of git internal mechanism here.
## Remote Transfer or how to communicate with the world
# Git guide
### Remote Transfer or how to communicate with the world
* Get a fresh repository: git clone `<remote path>`
* Update current repository to latest: git fetch -v
* Update current repository with commit from a fork: git fetch -v `<remote path>` `<branch>`
* Send your new commit to the remote: git push `<remote>` `<branch>`
## Commit or how to communicate with your local repository
* staged your change: git add/rm -p `<file>`
### Commit or how to communicate with your local repository
* staged your change with dynamic selection: git add/rm -p `<file>`
* commit your change: git commit
* uncommit previous commit: git reset --soft HEAD~1
* unstage your change: git reset HEAD --
* discard your change **forever**: git checkout -p -- `<file>`
* discard your change **forever** with dynamic selection: git checkout -p -- `<file>`
## Stash or how to save your precious work
### Stash or how to save your precious work
Stash is very useful. For example, your will use it before/after (push/pop) merge/rebase action
* Push pending update on the stack: git stash
* Get back your update: git stash pop
* view content of your stash: git stash show -p `stash@\{0\}`
## Rebase or how to screw the history
### Rebase or how to screw the history
**Never** rebase commits that were pushed remotely. Rebase can be used to improve your current patch set, or to fast-forward-merge after a fetch.
* The rebase command: git rebase -i
* Cancel it : git rebase --abort
* Resolve conflict: git mergetool `<file>`
* Continue rebase: git rebase --continue
## Branch or how to separate your work by feature
### Branch or how to separate your work by feature
Please note that master is actually the default branch
* List branches: git branch -v
* Switch to another branch: git checkout `<branch>`
@ -34,11 +36,30 @@ Please note that master is actually the default branch
* Delete branches: git branch -d `<branch>`
* Set the base reference of the branch (for rebase): git branch --set-upstream-to=`<remote>` `<branch_name>`
## Branch use case
# Git use case example
### Branch management
Let's say you want to rebase your current branch topic-v1 to topic-v2 with new addition. Note topic-v1 could also be master too.
* Go to current branch: git checkout topic-v1
* Create a new one: git branch topic-v2
* Go into the new branch: git checkout topic-v2
* Set the reference: git branch --set-upstream-to=origin/master topic-v2
* Rebase: git rebase -i
* ...
* ...
### Split commit
* copy your repository if you're not confident with this kind of operation: cp -a `<repository>` `<repository backup>`
* do a rebase: git rebase -i
* Use edit on the commit that you want to split
... rebase on-going...
* Uncommit: git reset --soft HEAD~1
* Unstage: git reset HEAD --
At this stage of operation, you get all your change in local file but nothings is ready to be commited.
Repeate the 2 next commands for each new commits that you want to create
* staged your change with dynamic selection: git add/rm -p `<file>`
* commit your change: git commit
Once you have finished to split your commit:
* finish the rebase: git rebase --continue