20

常见问题

回答

什么是工作区, 暂存区, 版本库

首先我们会使用 git init, 创建一个仓库. 这个仓库会存放我们以后提交的每一个版本的库即(版本库)

工作区

git init下的文件夹的所有目录及文件,但不包括.git目录下的文件

暂存区(stage or index)

git add, 添加的文件或文件夹, 暂存区属于版本库存储的一块区域. 注意:暂存区的文件只属于该分之下的暂存,如果没有执行commit操作, 则不允许切换分支.

版本库
版本库包含暂存区及分支, 当使用git commit 将暂存区的文件提交到仓库里, 暂存区的文件就会清空,生成一个 commit id 进入版本库中.

git 基本描述

分支和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 mastermaster 分支下创建 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


wayneli
1.4k 声望828 粉丝

2017-2018年目标