Git
Reference
- github-cli - command-line interface to GitHub's Issues API (v2)
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
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 [1]
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
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
Archive to tar
git archive [2] 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
Guides
- Git wiki
- Pro Git [3]
- Arch Linux Wiki: Git
- Git cookbook
- git - the simple guide
- http://www-cs-students.stanford.edu/~blynn/gitmagic/
- http://gitimmersion.com/
- http://try.github.com/ - interactive introduction
Articles
- Understanding Git Conceptually
- pushing and pulling
- Understanding the Git Workflow
- A successful Git branching model [4]
- A Rebase Workflow for Git
GitHub
- willitmerge - A command line tool to check if pull requests are mergeable.
Handy
- https://github.com/ndbroadbent/scm_breeze - to check
Submodules
git submodule add git@mygithost:billboard [path/optional] git submodule init git submodule update
- Drupal Deployment with Git Submodules
- Use Git submodules to avoid storing Drupal core and contrib modules in your site's repository
- Git Submodules: Adding, Using, Removing, Updating
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.