diff --git a/Git-survival-guide.md b/Git-survival-guide.md index b9bbe82..d3a58c2 100644 --- a/Git-survival-guide.md +++ b/Git-survival-guide.md @@ -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 `` * Update current repository to latest: git fetch -v * Update current repository with commit from a fork: git fetch -v `` `` * Send your new commit to the remote: git push `` `` -## Commit or how to communicate with your local repository -* staged your change: git add/rm -p `` +### Commit or how to communicate with your local repository +* staged your change with dynamic selection: git add/rm -p `` * 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 -- `` +* discard your change **forever** with dynamic selection: git checkout -p -- `` -## 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 `` * 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 `` @@ -34,11 +36,30 @@ Please note that master is actually the default branch * Delete branches: git branch -d `` * Set the base reference of the branch (for rebase): git branch --set-upstream-to=`` `` -## 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 -* ... \ No newline at end of file +* ... + +### Split commit +* copy your repository if you're not confident with this kind of operation: cp -a `` `` +* 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 `` +* commit your change: git commit + +Once you have finished to split your commit: +* finish the rebase: git rebase --continue \ No newline at end of file