常见问题
- 什么是工作区,暂存区,版本库
- 分支和HEAD的关系
- 如何撤销工作区变更的内容
- 如何从暂存区撤销回工作区
- 如何从版本库回退
- GIT使用分支的常见指令
- GIT checkout 的各种用法
- GIT fetch 的用法
- GIT push 的用法
- GIT diff 的用法
- GIT log 的用法
- GIT config的用法
- GIT show的用法
回答
什么是工作区, 暂存区, 版本库
首先我们会使用 git init
, 创建一个仓库. 这个仓库会存放我们以后提交的每一个版本的库即(版本库)
工作区
git init
下的文件夹的所有目录及文件,但不包括.git
目录下的文件
暂存区(stage or index)
git add
, 添加的文件或文件夹, 暂存区属于版本库存储的一块区域. 注意:暂存区的文件只属于该分之下的暂存,如果没有执行commit
操作, 则不允许切换分支.
版本库
版本库包含暂存区及分支, 当使用git commit
将暂存区的文件提交到仓库里, 暂存区的文件就会清空,生成一个 commit id
进入版本库中.
分支和HEAD的关系
一个git
仓库一般会建有多个分支, 以便并行开发. HEAD
表示当前分支的指向.
使用git checkout -b dev
当前的 HEAD
指向 dev
分支
如何撤销工作区变更的内容
git checkout -- filename
(前提, filename 已在仓库中)
如何从暂存区撤销回工作区
git reset HEAD -- filename
如何从版本库回退
git reset commit_id
, 修改的内容都处于工作区状态git reset --soft commit_id
, 修改的内容都处于暂存区状态git reset --hard commit_id
, 版本库完全替换工作区
GIT使用分支的常见指令
git branch dev master
从 master
分支下创建 dev
分支git branch -m dev DEV
修改 dev
分支名称为 DEV
分支git diff master dev
比较两个分支的文件内容变化
GIT checkout 的各种用法
git checkout branch_name
切换分支git checkout branch_name --force
强制切换分支, 修改的工作区不会被清除git checkout -b local_branch
从当前分支开启新分支git checkout -b local_branch origin/remote_branch
从远程分支remote_branch
拉取到本地local_branch
, 然后切换到local_branch
, 并且建立映射关系git checkout branch_name -- filename
从别的分支拉取文件到本的分支指定文件
GIT fetch 的用法
git fetch --all
获取所有远程所有分支到本地仓库git fetch branch_name
获取远程单独分支到本地仓库git fetch branch_name:local_name
获取远程分支到本地仓库, 并且创建一个对应的本地local_name
分支, 不建立映射关系
GIT push 的用法
git push origin master
将本地的master
推到远程master
分支git push origin :dev
删除远程分支dev
git push origin dev:master
将本地的dev
推到远程master
分支
GIT diff 的用法
git diff
当前工作区
与 暂存区
的变化比较git diff HEAD
当前 工作区+暂存区
与 最后一次提交
的变化比较git diff branch_a branch_b
比较两个分支的 HEAD
GIT log 的用法
git log
默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面git log -p
展开显示每次提交的内容差异git log -[number]
展示最近 number
次的提交信息git log --stat
展示每次提交的内容变化文件的增加删除的行数git log --shortstat
只显示 --stat 中最后的行数修改添加移除统计git log --name-only
只显示修改的文件git log --name-status
显示修改文件的状态 [A|M|D]
格式化参数git log --pretty=[short|full|fuller|oneline]
修改log输出的样式git log --abbrev-commit
只显示部分commit_id
git log --relative-date
现实距离当前的时间格式, 如 1 minutes ago
git log --graph
显示 ASCII 图形表示的分支合并历史
GIT config的用法
git config --global user.name xxx
设置git用户的名称git config --global user.mail xxx
设置git用户的的邮箱git config --global core.autocrlf true|input|false
true
表示检查是转换为当前系统的回车换行lf
or crlf
, false
表示不检查, input
表示输入时转换lf
, 输出不检查
GIT show的用法
git show [commit_id|HEAD] --name-only
查看某一次commit 修改的文件列表
技巧篇
git config 的简单使用及设置
git config --global
设置全局 git
用户配置 ~/.gitconfig
git config --local
设置本地 git
配置, .git/config
git config --global user.name
输入用户名git config --global user.email
输入邮箱
git remote 的使用及配置
git remote add origin url
添加远程 origin 仓库地址git remote rename origin old-origin
修改远程分支名称git remote remove origin
删除远程origin仓库的地址git remote get-url origin
获取远程origin仓库的地址
git 杂七杂八使用
git rev-parse HEAD
查看当前分支的版本库的 commit id
git rev-parse HEAD --short
查看当前分支的版本库的短commit id
git rev-parse branch_name
查看某一个分支的commit id
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。