Git, in my opinion, is undoubtedly the best version control system, mostly, but not only, for its distributed nature, and the way branching and merging are handled.
However having used subversion for many years I find git learning curve a real pain, some of the commands are slightly arcane, therefore not easy to remember.
In this post I will try to keep a git memo of commands that I occasionally need and regularly forget:
create new repo with first commit and push
assuming new repo is called hayate
- add hayate to gitosis config file (gitosis.conf)
more on gitosis in this excellent tutorial: http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way
[group hayate]
writable = hayate
members = andrea@myhost
then git add --all, git commit -a -m 'added hayate repo', git push
- go in the hayate directory i.e.
cd /var/www/hayate and type git init
git remote add origin git@hostname.com:hayate.git
- add and/or update files and directories
git add --all
git commit -a -m 'First hayate commit'
- then for the first push:
git push origin master:refs/heads/master which creates the master branch
tagging
git tag v1.0 -m 'my first tag'
git push --tags commits the tag
git tag -l list all tags
clone into current directory
git clone git@hostname.com:hayate.git . <- note the dot (hayate directory will not be created)
change working branch
git branch -l lists local branches
git checkout <branch-name> switches working branch to “branch-name”
remove an added file or directory (before it is committed)
git reset <file-or-directory-name>
add submodule (an external repository) within local source tree
git submodule add <repo-url> <local-path>
i.e. git submodule add git@hostname.com:hayate.git hayate
checkout a submodule
git submodule update --init
create a new remote branch tracking it locally
git branch --track <branch_name>
git push origin <branch_name>
git checkout <branch_name> to switch to the new branch
-
add this to .git/config
[branch "branch_name"]
remote = origin
merge = refs/heads/branch_name
start tracking a remote branch
git checkout --track -b <local name> origin/<remote name>
to suppress the following warning
warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated. This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring ‘push.default’ to:
warning: ‘nothing’ : Do not push anything
warning: ‘matching’ : Push all matching branches (default)
warning: ‘tracking’ : Push the current branch to whatever it is tracking
warning: ‘current’ : Push the current branch
git config [--global] push.default current (–global is optional)