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
thengit add --all,git commit -a -m 'added hayate repo',git push - go in the hayate directory i.e.
cd /var/www/hayateand typegit init git remote add origin git@hostname.com:hayate.git- add and/or update files and directories
git add --allgit commit -a -m 'First hayate commit'- then for the first push:
git push origin master:refs/heads/masterwhich creates the master branch
tagging
git tag v1.0 -m 'my first tag'git push --tagscommits the taggit tag -llist 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 -llists local branchesgit 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)