Git 思维导图
作者:吴小龙同学
版本:V 0.0.1
"git add
加到暂存区,我想撤销怎么搞?"
“这个 bug 不用改了,我修改的代码可以不要了,难道要把我修改的代码再改回去?”
"我想装个逼想知道我今天写了写了多少行代码,怎么看?"
想要解答以上问题,先简单了解“工作区”、“暂存区”、“本地仓库”、“远程仓库”四个概念。
工作区:你现在修改区域;
暂存区:通过命令git add
把代码放到暂存区;
本地仓库:使用命令git commit
提交代码并不是真的提上来了,而是放在本地仓库
远程仓库:git push
才真的提交到远程仓库。

克隆仓库
# 下载一个项目和它的整个代码历史
$ git clone [url]
仓库配置
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
# 显示当前的Git配置
$ git config --list
查看工作区状态
# 显示有变更的文件
$ git status
# 状态简览
$ git status -s
查看提交记录
# 查看commit历史
$ git log
# 查看commit历史及每次commit发生文件变更的信息
$ git log --stat
# 查看某个文件的每一次diff
$ git log -p [file]
# 指定提交条目,且附带每次提交详细变化
$ git log -p -<n>
# 查看过去5次提交
$ git log -5 --pretty --oneline
# 查看当前分支的最近几次提交
$ git reflog
# 查看今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"
# 查看两个星期内的改动
$ git whatchanged --since='2 weeks ago'
对比文件变化
# 显示暂存区和工作区的差异
$ git diff
# 显示暂存区和上一个commit的差异
$ git diff --cached [file]
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示两次提交之间的差异
$ git diff [commit1-id] [commit2-id]
# 显示某次提交commit信息和修改内容
# 显示某次提交commit信息和修改内容
$ git show [commit-id]
# 显示某次提交commit信息
$ git show --name-only [commit-id]
# 显示某次提交时,某个文件的内容
$ git show [commit-id]:[filename]
添加文件到暂存区
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p
提交到本地仓库
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代本地仓库最新一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
撤销
# 撤销暂存区某个文件到工作区
$ git reset HEAD <file>
# 撤销暂存区所有修改到工作区
$ git reset HEAD/git reset [file]
# 撤销工作区,不保留修改
$ git checkout <file>
# 撤销工作区所有修改
$ git checkout .
# 同时撤销暂存区和工作区,且不保留修改
$ git reset --hard
# 撤销本地仓库最新一次提交所有修改到工作区
$ git reset HEAD^
回退
# 回退本地仓库最新一次提交到暂存区
$ git reset --soft HEAD^
# 回退本地仓库最新一次提交,不保留暂存区和工作区
$ git reset --hard HEAD^
# 回退本地仓库n次提交
$ git reset --hard HEAD~n
# 回退到某次提交,不保留暂存区和工作区
$ git reset --hard [commit-id]
# 回退到某次提交,同时重置暂存区,但工作区不变
$ git reset [commit-id]
分支
# 列出所有本地分支
$ git branch -l
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 切换到该分支
$ git checkout [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch-name]
# 新建一个分支,指向指定commit
$ git branch [branch-name] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 设置跟踪远程分支
$ git branch -u <远程分支名> <本地分支名>
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit-id]
# 删除本地分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

评论