>> git memo  (182 views)

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 checkout -b <branch_name>
  • git push -u origin <branch_name>
  • git checkout <branch_name> to switch to the new branch

start tracking a remote branch

  • git checkout --track -b <local name> origin/<remote name>

delete a remote branch

  • git push origin --delete <branch_name>

delete local branch

  • git branch -D <branch_name>

revert a merge

  • git revert -m 1 merge_hash

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)