PCSX2 Documentation/Git Survival Guide: Difference between revisions

From PCSX2 Wiki
Jump to navigation Jump to search
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 lot of guides/docs on the 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==
Line 56: Line 56:
* Unstage: <code>git reset HEAD --</code>
* Unstage: <code>git reset HEAD --</code>


At this stage of operation, you get all your change in local file but nothings is ready to be committed.  
At this stage of operation, you have all your changes in the local file but nothing is ready to be committed.  


Repeate the 2 next commands for each new commits that you want to create
''Repeat the 2 next commands for each new commit that you want to create''
* 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>


Once you have finished to split your commit:
''Once you have finished to split your commit:''
* finish the rebase: <code>git rebase --continue</code>
* finish the rebase: <code>git rebase --continue</code>

Revision as of 19:58, 9 January 2015

There are a lot of guides/docs on the 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 have all your changes in the local file but nothing is ready to be committed.

Repeat the 2 next commands for each new commit 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