Git

From Things and Stuff Wiki
Jump to navigation Jump to search


Reference

  • github-cli - command-line interface to GitHub's Issues API (v2)

See also; Vim#Git

Guides

Articles

Commands

Setup

git config color.ui true
git config format.pretty oneline
git clone

Repo setup

  • git config receive.denyCurrentBranch warn - allow pushing to a non-base repo
git repo-config core.sharedRepository true - allow access by multiple users

Adding and changing files

git add . - add file to staging
git add * - add all (except those in .gitignore) files to staging
git reset --hard HEAD - reset any uncommitted changes
git reset --hard origin/master - reset from remote master
git remote add origin <server>
git remote show origin
git pull origin master - get master branch from origin remote
git push otherrepo <branch> - stick branch on otherrepo remote

Branching and merging

git checkout <branch>
  switch to working on <branch>
git checkout -b <branch>
  same as "git branch <branch> | git checkout <branch>"

git checkout -- <file>
  checkout file from HEAD
git checkout - - check out previous branch
git branch
  list branches with current starred
git branch -a
  list branches (including remote)
git branch <branch>
  create branch
git branch -d <branch>
  delete branch
git merge <branch>
  merge branch, keep branch in commit log
git rebase <branch> - fast-forward merge current to <branch> (?)
git diff master <branch> - show difference between master and another branch
git branch --set-upstream master origin/master
  Branch master set up to track remote branch master from origin.

Tags

git tag - list repo tags
git tag 1.0 <sha> - tag <sha> (branch+commit hash) with 1.0
git log - list commits with message and sha
  A better git log [3]

Submodules

git submodule add git@mygithost:project goes/here --branch x.y
git submodule add --branch 7.x-1.x git://git.drupal.org/project/examples.git in/folder
git submodule update --init - bootstrap submodules listed in .gitmodules after cloning somewhere
git submodule foreach git pull origin master - update all submodules
git submodule add git@mygithost:billboard [path/optional]
git submodule init
git submodule update

Patches

git diff > change.patch - create a patch
git diff > [description]-[issue-number]-[comment-number].patch - create a Drupal patch
git apply -v <patch> - apply patch. also;
curl https://github.com/github/jobs/pull/25.patch | git am

.gitignore

  • man gitignore - Specifies intentionally untracked files to ignore

Archive to tar

git archive [4]
  default output is tar
git archive master | tar -x -C /somewhere/else
  pipe to extraction
git archive --format=tar --remote=git@server:repo.git master | tar -xf -

also, Legit.

Zsh prompt symbols

Status:
✔:	repository clean
●n:	there are n staged files
✖n:	there are n unmerged files
✚n:	there are n changed but unstaged files
…:	there are some untracked files

Branch:
↑n:	ahead of remote by n commits
↓n:	behind remote by n commits
↓m↑n:	branches diverged, other by m commits, yours by n commits
::	hash, not a branch

Services

GitHub

  • willitmerge - A command line tool to check if pull requests are mergeable.

Other

Handy

Repos

Git used for private repo, with Gitweb for easy overview.

For a public setup, a hosting system with access control like gitosis or gitolite is required, or for public read only, git-daemon would do.