本速查表基于 git 2.24 书写, 为必填参数, [param] 为选填参数, 使用前建议先看一遍 Pro Git , 请使用ctrl+f进行搜索。
配置
git config --list [–system|–global|–local]
显示当前配置
git config [–system|–global|–local]
设置参数
git config -e [–system|–global|–local]
编辑配置
git config --global alias. “”
创建别名
git
使用别名
git config --global --unset
移除单个变量
git config --global --unset-all
移除所有变量
- 设置例子
1 2 3 4 5 6 7
| git config --global user.name "cheatsheet" git config --global user.email "cheatsheet@cheatsheet.wang"
git config --global core.editor vim
git config --global color.ui auto
|
1 2 3 4
| git config --global alias.co checkout
git co master
|
1 2 3 4 5 6
| <repo>/.git/config
~/.gitconfig
/etc/gitconfig
|
初始化
-
ssh-keygen -t rsa -C “”
生成ssh-key
-
git init [dir]
从本地初始化
-
git init --bare [dir]
创建本地裸库
-
git clone [dir]
从远程仓库初始化
-
git clone [–branch tag-name/branch-name] [dir]
下载并绑定指定分支
-
git clone --bare [dir]
克隆远程仓库裸库
-
git clone --mirror [dir]
创建镜像仓库
-
git remote set-url
修改远程仓库地址
-
本地仓库初始化
1 2 3 4 5 6 7 8
| mkdir example cd example git init git remote add origin git@gitlab.com:trensy/cheatsheet.git
git pull origin master
git push -u origin master
|
1 2 3
| mkdir example.git cd example.git git init --bare .
|
1 2 3
| git clone --bare git@gitlab.com:trensy/cheatsheet.git git remote add origin git@gitlab.com:trensy/cheatsheet_new.git git push --mirror origin
|
1 2 3 4
| git clone --mirror git@gitlab.com:trensy/cheatsheet.git git remote update git remote add origin git@gitlab.com:trensy/cheatsheet_new.git git push --mirror origin
|
1
| git remote set-url origin git@gitlab.com:trensy/cheatsheet.git
|
分支(branch)
git branch -a
查看本地分支和远程分支
git branch
查看本地所有分支
git branch -r
查看远程所有分支
git branch -vv
展示本地分支关联远程仓库的情况
git checkout -b
新建分支并切换至新分支
git checkout -b
从现有的commit创建一个新分支并切换至新分支
git branch [-f]
新建一个分支,但不切换
git branch [branch-name] [commit-id]
新建一个分支,指向指定commit
git branch
在tag的基础上新建一个分支
git branch <-m|-M>
重命名分支
1 2 3 4
| git branch -m old-branch-name new-branch-name
git branch -M old-branch-name new-branch-name
|
git branch <-d|-D>
删除本地分支
1 2 3 4
| git branch -d branch-name
git branch -D branch-name
|
git branch <-d|-D> -r
删除远程分支
git checkout
切换分支
1 2 3
| git branch -d -r branch-name
git push origin :branch-name
|
1
| git push origin --delete branch-name
|
1 2 3 4 5
| git checkout -b test git push -u origin test ...
git push
|
标签(tag)
git tag
查看标签
git tag
创建命名标签
git tag -a -m
添加一个注解标签
git tag -a -m
给过去提交记录创建标签
git push origin
推送标签到远程仓库
git push origin --tags
推送全部标签
git pull origin --tags
远程拉取标签
git tag -d
删除本地标签
git push origin :refs/tags/
删除远程标签
查看
git status
查看变更
git status -s
查看变更简单模式
git status --ignored
展示忽略的文件
git log
查看日志
git log --oneline
单行查看日志
git log --stat
显示详细commit历史
git reflog
显示当前分支的最近几次提交
git log <-number> [–pretty] [–oneline]
显示过去几次提交
git log --follow [file]
显示文件版本历史
git blame [file]
显示指定文件是什么人在什么时间修改过
git show [–name-only]
显示commit内容变化
git show [commit-id]:[file]
显示某次提交时,某个文件的内容
git log --grep
过滤&搜索
git log --author
指定作者查询
git log --after=‘’ --until=‘’
通过日期查找
1
| git log --oneline --after="2019-02-20" --until='2020-02-20'
|
- git grep [branch-name|tag-name] 搜索
1 2
| git grep "Hello" git grep "Hello" v2.5
|
git diff
显示暂存区和工作区的差异
git log -p [file]
显示指定文件相关的每一次diff
git diff --cached [file]
显示暂存区和上一个commit的差异
git diff [first-branch] [second-branch]
显示两次提交之间的差异
git diff HEAD
显示工作区与当前分支最新commit之间的差异
git shortlog -sn
显示所有提交过的用户,按提交次数排序
git diff --shortstat “@{0 day ago}”
显示今天你写了多少行代码
git log --graph --decorate --oneline
绘制分支图
本地库文件操作
-
git add …
添加指定文件到暂存区
-
git add
添加指定目录到暂存区,包括子目录
-
git add .
提交所有修改的和新建的数据暂存区
-
git add -u
提交所有被删除和修改的文件到暂存区
-
git add -A
提交所有被删除、被替换、被修改和新增的文件到暂存区
-
git rm …
同时从工作区和暂存区删除文件
-
git rm --cached …
从暂存区删除文件,但是工作区文件还存在
-
git rm -r
删除文件夹
-
git mv
重命名文件,并添加新文件到暂存区
-
git stash
创建新的临时存储
-
git stash save “”
创建新的临时存储并命名
-
git stash -u/–include-untracked
创建新的临时存储(包含未追踪的更改)
-
git stash list
列出所有的临时存储
-
git stash show
浏览临时存储内容
-
git stash show -p
浏览临时存储差异
-
git stash pop
恢复上一个临时存储 (删除临时存储)
-
git stash apply
恢复上一个临时存储 (保留临时存储)
-
git stash apply stash@{n}
将特定的存储恢复到当前分支 (n = stash列表序号)
-
git stash <pop|apply> stash@{n}
应用特定的临时存储 (n = stash列表序号)
-
git stash drop stash@{n}
删除特定的临时存储 (n = stash列表序号)
-
git stash clear
删除所有的临时存储
-
git commit -m
提交暂存区到本地仓库
-
git commit … -m
提交暂存区的指定文件到本地仓库
-
git commit -am
不需要执行git add命令提交暂存区的指定文件到本地仓库,只是对修改和删除文件有效,新文件还是要 git add
-
git commit --amend [-m] [new-message]
修改提交记录
-
git commit -v
显示要添加到本地仓库所有diff信息
-
将未提交的更改从当前分支移动到其他分支
1 2 3
| git stash git checkout branch2 git stash pop
|
撤销&回滚
git checkout .
恢复所有暂存区文件到工作区(用来撤销工作区所有改动)
git checkout
恢复暂存区文件到工作区(用来撤销工作区文件改动)
git checkout
恢复某个commit的文件到暂存区和工作区
git reset [–mixed | soft | hard | merge | keep ]
1 2 3 4 5
| --mixed (默认模式) 仅重设暂存区,并把 HEAD 指向commit,但是不重设工作区,本地文件修改不受影响。(回退到某个版本,只保留源码,回退commit和index信息) --soft 工作区中的内容不作任何改变,HEAD 指向 commit自从 commit 以来的所有改变都会回退到“暂存区”中。(回退到某个版本,只回退了commit的信息。如果还要提交,直接 commit 即可。) --hard 重设暂存区和工作区 ,从commit以来在工作区中的任何改变都被丢弃,并把 HEAD指向commit。(彻底回退到某个版本,本地的源码也会变为上一个版本的内容。) --keep 保留工作区和HEAD之间差异部分,如果回退的内容与保留的修改存在冲突(有相同文件)则命令会失败。(不常用) --merge 保留暂存区和工作区之间的差异,如果回退的内容与保留的修改存在冲突(有相同文件)则命令会失败。(不常用)
|
git reset
重置HEAD,暂存区与上一次commit保持一致;但工作区不变
git reset --soft
重置HEAD与上一次commit保持一致;暂存区和工作区不变
git reset --hard
重置HEAD,暂存区,工作区与上一次commit保持一致
git reset
重置暂存区的指定文件;但工作区不变
git update-ref -d HEAD
也就是把所有的改动都重新放回工作区,并清空所有的 commit,这样就可以重新提交第一个 commit 了
git diff --name-only --diff-filter=U
展示工作区的冲突文件列表
git reset
重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变,指定commit之后的commit将抹除
git reset --soft
重置当前分支的HEAD为指定commit与指定commit一致,暂存区和工作区不变,指定commit之后的commit将抹除
git reset --hard
重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致,指定commit之后的commit将抹除
git revert -n
新建一个commit,用来撤销指定commit, 保留该目标commit后面的commit
git clean [-f|d|x] -n
显示将要被删除的文件
git clean
删除工作区未跟踪文件
git clean -d
删除工作区未跟踪文件夹
git clean -f [path]
强制删除
git clean -X -f
删除被.gitignore设置忽略的文件
- 恢复到最近一次commit
1 2
| git reset --hard git clean -df
|
1
| git fetch --all && git reset --hard origin/master
|
1 2 3
| git log git reset --hard 551c2aa git push -f origin master
|
1
| git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d
|
合并&冲突
-
git merge [branch-name]
合并一个分支到当前分支,会把被合并分支和你当前分支的commit合并在一起,形成一个新的 commit 提交
-
git rebase [branch-name]
合并一个分支到当前分支,把你当前分支的commit放到被合并分支的最后面
-
git rebase -i HEAD~[num]
将最近num个commit合并成一个(这样推送到远程仓库后只有一个commit,避免污染远端的commit)
-
git pull --rebase
相当于 git fetch + git rebase
-
git checkout [–]
从不同分支拉取当个文件
-
git checkout --theirs [file-name]
表示检出另外分支, 即保存另外分支的改动,丢弃当前分支的改动。冲突时直接使用他人的代码
-
git checkout --ours [file-name]
检出当前分支,即保存当前分支的改动,丢弃另外分支的改动。冲突时直接使用自己的代码
-
git cherry-pick …
将指定的一些commit合并到当前分支
-
git cherry-pick
将所选分支的最近一次提交,转移到当前分支
-
一次合并操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| git checkout dev git rebase master
git add .
git rebase --continue
git rebase --abort
|
git merge与git rebase
使用建议
1 2
| 公共分支使用merge,个人分支使用rebase 本地和远端对应同一条分支,优先使用rebase,而不是merge
|
同步
git fetch
更新远程代码到本地仓库,不会自动合并,后续可以对比本地分支与线上分支的差别
git merge /
把远程下载下来的代码合并到本地仓库
git pull :
拉取远程分支更新到本地仓库,并自动merge
1 2 3 4 5 6
|
git fetch origin master
git diff HEAD FETCH_HEAD git merge origin/master
|
git pull --tags
拉取远程标签
git remote -v
显示所有远程仓库
git remote show
显示某个远程仓库的信息
git remote add
增加一个新的远程仓库,并命名
git push
将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push :refs/for/
删除指定的远程分支1
git push --delete
删除指定的远程分支2
git push
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push
如果当前分支只有一个远程分支,那么主机名都可以省略
git push -u
如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push
git push --all
不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机
git push --force
强制推送到远程主机
git push --tags
推送标签
subtree
git subtree add --prefix= master [–squash]
在父仓库中新增子仓库
git subtree pull --prefix= master [–squash]
拉取更新子仓库
git subtree push --prefix= master
推送子仓库
- 给子仓库添加远程仓库,方便复用子仓库git仓库地址
1 2
| git remote add -f <sub-remote-git> <sub-git-url> git subtree add --prefix=<sub-repository-path> <sub-remote-git> master
|
子模块(submodule)
git submodule add
添加子模块
git submodule foreach git pull [remote-host-name] [remote-branch-name]
更新
git clone --recursive clone
主库和子模块
git submodule init
初始化本地配置文件
git submodule update
检出父仓库列出的commit
- 更新整个仓库
1 2 3
| git pull git submodule init && git submodule update // or git submodule update --init --recursive git submodule foreach git pull origin master // 更新代码时使用
|
1 2 3 4
| git rm --cached sub-repo rm -rf sub-repo 删除 .gitmodules 文件 [submodule "sub-repo"] 相关内容 删除 .git/config 文件 [submodule "sub-repo"] 相关内容
|
大文件管理(lfs)
git lfs track “”
跟踪需要处理哪些文件
git lfs ls-files
可以显示当前被lfs追踪的文件列表
git lfs track
查看现有的文件追踪模式
git lfs untrack “*xx.a”
取消git fls对xx.a的追踪管理
git lfs version
查看当前所用git lfs版本
git lfs pull
从远程仓库拉取大文件
- 安装
1 2
| #详细见 https://github.com/git-lfs/git-lfs#downloading
|
其他
1 2
| #详情见官网下载页 https://git-scm.com/downloads
|
git archive --format=zip > <file_name>
打包
1
| git archive --format=zip master > nb.zip
|
1 2
| git help -a git help add
|
1 2 3 4 5 6
| https://fhefh2015.github.io/Fast-GitHub/ https://ghproxy.com/
vi ~/.gitconfig [url "https://ghproxy.com/https://github.com/"] insteadOf = https://github.com/
|
阅读原文