一直在学习 git,特此记录下常用的命令。
设置
全局配置文件位置:~/.gitconfig
或 ~/.config/git/config
文件
项目配置文件位置:.git/config
1 2 3 4 5 6 7
| git config --global user.name "xxx" git config --global user.email "xxx@y163.com" git config --global core.editor vim
git config --list git config -e git config --global ...
|
git 概念
三个区域:工作目录 (未修改的文件、已修改的文件)、暂存区 stage (Index)、仓库 history (HEAD)。
项目操作
sequenceDiagram
participant work as workspace
participant modified as modified
participant stage as stage(Index)
participant history as history(HEAD)
work->>modified: 编辑
modified->>work: git checkout -- file
modified->>stage: git add
stage->>modified: git reset -- file
stage->>history: git commit
history->>stage: git reset HEAD^
创建
1 2 3
| git clone <server> git init git remote add origin <server>
|
状态
1 2
| git status git status -s
|
添加和复原
1 2 3 4 5 6 7 8
| git add <file> git add *
git reset -- <file> git reset --hard HEAD
git checkout -- <file> git checkout HEAD <file>
|
代码比较
1 2
| git diff git diff --cached
|
提交
1 2 3 4 5
| git commit git commit -m "message" git commit -am "message" git commit --amend git reset HEAD^
|
日志
1 2 3 4 5 6 7
| git log git log --oneline git log --graph git log --author=<user> git log -p git log -5 git log --stat
|
分支
1 2 3 4 5 6
| git branch <new branch> git checkout <branch/commit> git checkout -b <new branch> git branch -d <branch> git branch -D <branch> git branch -a
|
分支合并
1 2 3 4 5
| git merge <branch> git merge --no-ff <branch> git merge --squash <branch> git rebase -i git cherry-pick <commitId>
|
贮藏
1 2 3 4 5 6
| git stash git stash -u git stash list git stash pop git stash apply git stash drop
|
标签
1 2 3
| git tag <tag> git tag <tag> <commitId> git tag -d <tag>
|
版本写法
1 2 3 4 5 6
| git show HEAD git show HEAD~1 git show HEAD^ git show HEAD~2 git show HEAD^^ git show HEAD@{1}
|
区间写法
1 2 3 4 5 6 7 8 9 10 11
| git log master dev git log master..dev git log ^master dev git log dev --not master
git log master...dev git log ^master dev git log master ^dev
git log origin/master..HEAD git log origin/master..
|
代码搜索与调试
1 2 3 4 5 6 7 8 9
| git grep <word> git grep -n <word> git grep -c <word> git log -S <word> --oneline
git blame <file> git bisect start git bisect bad git bisect good v1.0
|
同步
1 2 3 4 5 6 7
| git fetch git pull git push git push --tags git remote update origin --prune git push origin :<branch> git push origin :refs/tags/<tag>
|
其他
1 2
| git bundle create repo.bundle HEAD master git reflog
|
git alias
自己网上找的,因为查看日志最麻烦,所以仅仅收集了日志部分。现在也很少使用了。主要在用系统 alias。
1 2 3 4
| alias.l=log --graph --all --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset' alias.ll=log --stat --abbrev-commit alias.lg=log --color --graph --pretty=format:'%C(bold white)%h%Creset -%C(bold green)%d%Creset %s %C(bold green)(%cr)%Creset %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative alias.llg=log --color --graph --pretty=format:'%C(bold white)%H %d%Creset%n%s%n%+b%C(bold blue)%an <%ae>%Creset %C(bold green)%cr (%ci)' --abbrev-commit
|
alias(git-plugin)
从 oh-my-zsh 中拿来的,大部分都用不到…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| g=git ga='git add' gaa='git add --all' gap='git apply' gapa='git add --patch' gau='git add --update' gav='git add --verbose' gb='git branch' gbD='git branch -D' gba='git branch -a' gbd='git branch -d' gbda='git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d' gbl='git blame -b -w' gbnm='git branch --no-merged' gbr='git branch --remote' gbs='git bisect' gbsb='git bisect bad' gbsg='git bisect good' gbsr='git bisect reset' gbss='git bisect start' gc='git commit -v' 'gc!'='git commit -v --amend' gca='git commit -v -a' 'gca!'='git commit -v -a --amend' gcam='git commit -a -m' 'gcan!'='git commit -v -a --no-edit --amend' 'gcans!'='git commit -v -a -s --no-edit --amend' gcb='git checkout -b' gcd='git checkout develop' gcf='git config --list' gcl='git clone --recurse-submodules' gclean='git clean -fd' gcm='git checkout master' gcmsg='git commit -m' 'gcn!'='git commit -v --no-edit --amend' gco='git checkout' gcount='git shortlog -sn' gcp='git cherry-pick' gcpa='git cherry-pick --abort' gcpc='git cherry-pick --continue' gcs='git commit -S' gcsm='git commit -s -m' gd='git diff' gdca='git diff --cached' gdct='git describe --tags `git rev-list --tags --max-count=1`' gdcw='git diff --cached --word-diff' gds='git diff --staged' gdt='git diff-tree --no-commit-id --name-only -r' gdw='git diff --word-diff' gf='git fetch' gfa='git fetch --all --prune' gfo='git fetch origin' gg='git gui citool' gga='git gui citool --amend' ggpull='git pull origin "$(git_current_branch)"' ggpush='git push origin "$(git_current_branch)"' ggsup='git branch --set-upstream-to=origin/$(git_current_branch)' ghh='git help' gignore='git update-index --assume-unchanged' gignored='git ls-files -v | grep "^[[:lower:]]"' git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk' gk='\gitk --all --branches' gke='\gitk --all $(git log -g --pretty=%h)' gl='git pull' glg='git log --stat' glgg='git log --graph' glgga='git log --graph --decorate --all' glgm='git log --graph --max-count=10' glgp='git log --stat -p' glo='git log --oneline --decorate' glod='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'\' glods='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'\'' --date=short' glog='git log --oneline --decorate --graph' gloga='git log --oneline --decorate --graph --all' glol='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\' glola='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --all' glols='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --stat' glp=_git_log_prettily glum='git pull upstream master' gm='git merge' gma='git merge --abort' gmom='git merge origin/master' gmt='git mergetool --no-prompt' gmtvim='git mergetool --no-prompt --tool=vimdiff' gmum='git merge upstream/master' gp='git push' gpd='git push --dry-run' gpf='git push --force-with-lease' 'gpf!'='git push --force' gpoat='git push origin --all && git push origin --tags' gpristine='git reset --hard && git clean -dfx' gpsup='git push --set-upstream origin $(git_current_branch)' gpu='git push upstream' gpv='git push -v' gr='git remote' gra='git remote add' grb='git rebase' grba='git rebase --abort' grbc='git rebase --continue' grbd='git rebase develop' grbi='git rebase -i' grbm='git rebase master' grbs='git rebase --skip' grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}' grh='git reset' grhh='git reset --hard' grm='git rm' grmc='git rm --cached' grmv='git remote rename' grrm='git remote remove' grset='git remote set-url' grt='cd $(git rev-parse --show-toplevel || echo ".")' gru='git reset --' grup='git remote update' grv='git remote -v' gsb='git status -sb' gsd='git svn dcommit' gsh='git show' gsi='git submodule init' gsps='git show --pretty=short --show-signature' gsr='git svn rebase' gss='git status -s' gst='git status' gsta='git stash save' gstaa='git stash apply' gstall='git stash --all' gstc='git stash clear' gstd='git stash drop' gstl='git stash list' gstp='git stash pop' gsts='git stash show --text' gsu='git submodule update' gts='git tag -s' gtv='git tag | sort -V' gunignore='git update-index --no-assume-unchanged' gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1' gup='git pull --rebase' gupa='git pull --rebase --autostash' gupav='git pull --rebase --autostash -v' gupv='git pull --rebase -v' gwch='git whatchanged -p --abbrev-commit --pretty=medium' gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify -m "--wip-- [skip ci]"'
|
参考文档