Auto update working tree via post-receive hook

On the remote server (origin repository) we need to chmod +x .git/hooks/post-receive and write next code to this file:

#!/bin/sh
cd ..
env -i git reset --hard

Revert (reset) a single file

$ git checkout filename

This command is also used to checkout branches, and you could happen to have a file with the same name as a branch. All is not lost, you will simply need to type:

$ git checkout -- filename

Setting up a new remote git repository

Set up the new bare repo on the server:

$ ssh example.com
Welcome to example.com!
$ mkdir /var/git/myapp.git && cd /var/git/myapp.git
$ git --bare init
Initialized empty Git repository in /var/git/myapp.git
$ exit
Bye!

Add the remote repository to your existing local git repo and push:

$ cd ~/Sites/myapp
$ git remote add origin ssh://example.com/var/git/myapp.git
$ git push origin master

Set the local master branch to track the remote branch.