======GIT CheatSheet======
=====See diff between local commits and remote master=====
git diff master origin/master
=====Pull from origin and overwrite local changes=====
git reset --hard; git pull -Xtheirs
Useful if you have local changes that you do no longer need.
=====Mark file as 'unchanged'=====
This will ignore the file on all commits using the -a argument.
git update-index --assume-unchanged [file]
To include the file in commites again use:
git update-index --no-assume-unchanged [file]
This is particularly handy when making local changes to a config file that must not enter the central repository.
=====List current status (including changes) in repo=====
git status
====List files in repo====
git ls-files
====List deleted files in repo====
git ls-files -d
=====Undelete file=====
git checkout filename
====Undelete all deleted files====
git ls-files -d | xargs git checkout --
=====Mark conflict as resolved=====
''filename'' will have merge conflicts marked in the same way used in CVS.
git add filename
marks the conflict as resolved.
=====Turn off pager=====
git --no-pager [command]
Run alias git='git --no-pager'
to disable it on all commands in the current shell.
Alternatively set ''core.pager = '' in .gitconfig (it is set to the empty string.) to disable it entirely for that user.
=====Tags=====
====Create====
# create tag locally:
git tag -a v1.4 -m 'version 1.4'
# push tag to server:
git push –-tags
====List====
All:
git tag
Or filtered:
git tag -l v1.*
====Show====
git show v1.4
====Delete====
# delete tag locally:
git tag -d v1.0
# push tag deletion to origin:
git push origin :refs/tags/v1.0
=====Branches=====
====List branches====
git branch
====Create branch====
Create and switch to:
git checkout -b [branchname]
Just create:
git branch [branchname]
Push to server:
git push -u origin [branchname]
====Switch to branch====
git checkout [branchname]
====Delete branch====
git branch -d branchname
git push origin --delete branchname
====Fecth branches from server====
git fetch --all
=====CVS 2 GIT=====
git cvsimport -k -i -d server:/path/to/CVSHOME -C git_reponame cvs_reponame
The resulting git_reponame directory now contains the .git folder which can be moved to a server location for shared access.
Run ''git update-server-info'' in the new server folder in order to make it shareable.
=====Branching/Merging=====
From: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
=====Creating a new repository=====
As root:
mkdir /home/git/repos/[reponame].git
cd /home/git/repos/[reponame].git
git --bare init
git update-server-info
chown -R apache:apache /home/git/repos/[repomame].git
Now clone the project on a client, add some files and commit them.
When pushing them for the first time use the following command:
git push origin master
NOTE: If this is done by the usual 'git push' command, a 'No refs in common and none specified; doing nothing.' error will be issued.
=====Set up repository mirror=====
From: https://help.github.com/articles/duplicating-a-repository/
# Create a bare clone of the repository.
git clone --bare https://github.com/exampleuser/old-repository.git
# Mirror-push to the new repository.
cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
=====Move single directory to its own repository=====
http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository/17864475#17864475
=====Replace email address in commits and tags======
https://help.github.com/articles/changing-author-info/
NOTE: The way the push command is performed is important in order to overwrite bot commits and tags.