PCSX2 Documentation/Git Survival Guide: Difference between revisions

From PCSX2 Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
There are a lots of guides/docs on internet but they are too big and confusing. You will find here a mini guide to use git with a minimal number of commands and parameters. You won't find any details or explications of git's internal mechanisms here.
There are a lots of guides/docs on internet but they are too big and confusing. You will find here a mini guide to use git with a minimal number of commands and parameters. You won't find any details or explications of git's internal mechanisms here.


=Git Guide=
==Git Guide==


==Remote Transfer or how to communicate with the world==
===Remote Transfer or how to communicate with the world===
* Get a fresh repository: <code>git clone <remote path></code>
* Get a fresh repository: <code>git clone <remote path></code>
* Update current repository to latest: <code>git fetch -v</code>
* Update current repository to latest: <code>git fetch -v</code>
Line 9: Line 9:
* Send your new commit to the remote: <code>git push <remote> <branch></code>
* Send your new commit to the remote: <code>git push <remote> <branch></code>


==Commit or how to communicate with your local repository==
===Commit or how to communicate with your local repository===
* staged your change with dynamic selection: <code>git add/rm -p <file></code>
* staged your change with dynamic selection: <code>git add/rm -p <file></code>
* commit your change: <code>git commit</code>
* commit your change: <code>git commit</code>
Line 16: Line 16:
* discard your change **forever** with dynamic selection: <code>git checkout -p -- <file></code>
* discard your change **forever** with dynamic selection: <code>git checkout -p -- <file></code>


==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  
Stash is very useful. For example, your will use it before/after (push/pop) merge/rebase action  
* Push pending update on the stack: <code>git stash</code>
* Push pending update on the stack: <code>git stash</code>
Line 22: Line 22:
* view content of your stash: <code>git stash show -p stash@\{0\}</code>
* view content of your stash: <code>git stash show -p stash@\{0\}</code>


==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.
'''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: <code>git rebase -i</code>
* The rebase command: <code>git rebase -i</code>
Line 29: Line 29:
* Continue rebase: <code>git rebase --continue</code>
* Continue rebase: <code>git rebase --continue</code>


==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
Please note that master is actually the default branch
* List branches: <code>git branch -v</code>
* List branches: <code>git branch -v</code>
Line 37: Line 37:
* Set the base reference of the branch (for rebase): git branch --set-upstream-to=<code><remote><branch_name></code>
* Set the base reference of the branch (for rebase): git branch --set-upstream-to=<code><remote><branch_name></code>


=Git use case example=
==Git use case example==


==Branch management==
===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.
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
* Go to current branch: git checkout topic-v1
Line 48: Line 48:
* ...
* ...


==Split commit==
===Split commit===
* copy your repository if you're not confident with this kind of operation: cp -a `<repository>` `<repository backup>`
* copy your repository if you're not confident with this kind of operation: cp -a `<repository>` `<repository backup>`
* do a rebase: git rebase -i
* do a rebase: git rebase -i

Revision as of 23:11, 8 January 2015

There are a lots of guides/docs on internet but they are too big and confusing. You will find here a mini guide to use git with a minimal number of commands and parameters. You won't find any details or explications of git's internal mechanisms here.

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 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** with dynamic selection: git checkout -p -- <file>

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

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

Please note that master is actually the default branch

  • List branches: git branch -v
  • Switch to another branch: git checkout <branch>
  • Creates: git branch <branch>
  • Delete branches: git branch -d <branch>
  • Set the base reference of the branch (for rebase): git branch --set-upstream-to=<remote><branch_name>

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