配置
【git config】
git config --global user.name "zyb"
git config --global user.email "[email protected]"
git config --global core.editor C:/soft/EmEditor/EmEditor.exe
git config --global alias.co checkout
git help
获取帮助,也可以写成 git
git help config
基本操作
【初始化】
git init
初始化仓库
git init ~/git-server --bare
将当前的仓库初始化为一个裸仓库,裸仓库的意思是没有工作目录。中央服务器并不需要工作目录,它是一个被动的接收作用,如果有工作目录的话,反而会造成错乱。
【增加】
git add
跟踪新文件,或者把已跟踪的文件放到暂存区
git add .
批量跟踪所有工作目录下未被跟踪的文件
【删除】
git rm --cached
仅从暂存区删除
git rm
从暂存区和工作目录删除
git rm \*~
递归删除当前目录及其子目录中所有 ~ 结尾的文件
git rm $(git ls-files --deleted)
删除所有被跟踪,但在工作目录被删除的文件
【提交】
git commit
把文件提交到仓库,这种方式会启动文本编辑器以便输入本次提交的说明
git commit -m 'wrote a file'
-m参数后跟提交说明的方式,在一行命令中提交更新
git commit -am 'wrote a file'
把所有已经跟踪过的文件暂存起来一并提交
【查看】
git status
检查当前文件状态
git diff
查看工作目录与暂存区的差异
git diff --cached
查看暂存区与某次提交的差异,默认为HEAD
git diff id1 id2
查看两次提交之间的差异
git log
查看提交历史,git log有许多选项,下表列出了一些常用的选项及其释义
选项 说明
-p 按补丁格式显示每个更新之间的差异
--word-diff 按 word diff 格式显示差异
--stat 显示每次更新的文件修改统计信息
--shortstat 只显示 --stat 中最后的行数修改添加移除统计
--name-only 仅在提交信息后显示已修改的文件清单
--name-status 显示新增、修改、删除的文件清单
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)
--graph 显示 ASCII 图形表示的分支合并历史
--pretty 使用其他格式显示历史提交信息可用的选项包括oneline,short,full,fuller 和format(后跟指定格式)
--oneline `--pretty=oneline --abbrev-commit` 的简化用法
【撤销】
git commit --amend
修改最后一次提交,可以添加漏掉的文件,或者重写提交信息
git reset HEAD
取消暂存
git checkout --
恢复文件内容
git checkout HEAD --
取消暂存,并恢复文件内容
分支操作
【查看】
git branch
列出所示分支,当前分支前面会标一个*号
git branch -v
查看各分支最后一个提交对象的信息
git branch -a
查看各分支情况,包括远程分支
git branch --merged
查看哪些分支被并入当前分支
git branch --no-merged
查看哪些分支没有被并入当前分支
git cat-file -t
查看Git对象的类型,主要的git对象包括tree、commit、parent和blob等
git cat-file -p
查看Git对象的内容
【新建】
git branch
新建分支
【删除】
git branch -d
删除分支
git branch -D
强制删除分支,用于删除没有合并过的分支
【切换】
git checkout
用于分支切换,将HEAD移动到目标分支,并将工作目录中的文件换成目标分支所指向的快照内容
git checkout -b
创建新分支并将HEAD移动到该目标分支
git checkout -
将HEAD移动到上一分支
【合并】
git merge
将目标分支合并到当前分支
git merge --no-ff -m "commit描述"
合并分支,强制禁用Fast forward快进模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
git log --graph
查看分支合并情况
【保存现场】
git stash
保存目录的工作目录和暂存区状态,并返回到干净的工作空间
git stash save
"push to stash area" 保存目录的工作目录和暂存区状态,返回到干净的工作空间,并保存"push to stash area"信息
git stash list
查看stash栈中保存的记录列表
git stash apply stash@{0}
将stash栈中保存的stash@{0}内容重新恢复到工作目录中
git stash drop stash@{0}
删除stash栈中保存的stash@{0}内容
git stash pop
相当于apply和drop的合体,它将stash栈中最顶端的记录取出到工作目录中,这也意味着包含删除stash栈中对应内容的操作
版本切换
【回退】
git reset --mixed
(默认)将当前分支回退到历史某个版本,提交的内容会复制到暂存区
git reset --hard
将当前分支回退到历史某个版本,提交的内容会复制到暂存区和工作目录
git reset --soft
将当前分支回退到历史某个版本,工作目录和暂存区不会在任何变化
【查看】
git reflog
按照之前经过的所有的commit路径按序来排列,用来记录每一次命令
远程操作
【查看】
git remote
查看当前配置有哪些远程仓库
git remote -v
(v为--verbose的简写,中文意思是冗长的),显示远程仓库对应的克隆地址
git remote show origin
查看远程仓库origin详细信息
【关联】
git remote add [shortname] [url]
添加一个新的远程仓库,可指定一个名字,以便引用,一般为origin
git remote rename pb paul
将远程库的名称从pb改为paul
git remote rm [shortname]
取消对该远程库的关联
【获取】
git clone
Git会自动将此远程仓库命名为origin,并下载其中所有的数据,建立一个指向它的master分支的指针,在本地命名为origin/master
git fetch origin
同步远程服务器origin上master分支的数据到本地的master分支
git fetch origin
获取远程服务器origin上
git merge origin/master
使用fetch命令,只是将origin的数据下载到了本地,但本地的工作目录只有使用merge合并,才能更新为最新的内容
git pull origin
相当于fetch和merge命令的合体
【跟踪远程分支】
git checkout -b serverfix origin/serverfix
把远程分支serverfix的内容合并到当前分支serverfix。这会切换到新建的serverfix本地分支,其内容同远程分支origin/serverfix一致,这样就可以在里面继续开发了
git checkout --track origin/serverfix
用--track选项简化 git checkout -b serverfix origin/serverfix命令
git checkout -b a1 origin/a2
把远程分支a2的内容合并到当前分支a1
【推送】
git push origin
取出在本地的
git push origin serverfix:somebranch
取出在本地的serverfix分支,推送到远程仓库的somebranch分支
【删除】
git push origin :serverfix
在服务器上删除serverfix分支
标签管理
【新建】
git tag
新建一个轻量级标签,默认为HEAD
git tag
为指定的commit ID新建一个轻量级标签
git tag -a
新建一个带有标签信息的附注标签
【签名】
git tag -s
<标签信息> 新建一个GPG签名标签 git tag -v
【查看】
git tag 查看所有标签 git show
查看标签详细信息
【删除】
git tag -d
删除本地标签 git push origin :refs/tags/
【推送】
git push origin
推送标签到远端仓库 git push origin --tags 一次性推送全部尚未推送到远程的本地标签