参考git详细教程:一小时学会git
1. git的分区
工作区(Working Directory)---->暂存区(Staging area)---->本地仓库(Repository)---->远程仓库(Remote Directory)
2. git设置用户名和邮箱
2.1. 全局
- 配置文件位置:
C:\Users\gobaio/.gitconfig
git config --global user.name "gobaio"
git config --global user.email "gobaio@163.com"
2.2. 局部
- 配置文件位置:
项目路径\.git\config
git config --local user.name "gobaio"
git config --local user.email "gobaio@qq.com"
3. git移除配置
git config --global --unset user.emal
4. git设置别名
- 将commit设置别名为ci
git config --global alias.ci commit
5.查看git的用户名和邮箱
git config user.name
git config user.email
6.查看git的所有的配置
git config -l
7.创建git仓库
7.1. 创建全新的git仓库
- 将当前文件夹创建为git仓库
git init
- 将当前文件夹下面的子文件夹创建为git仓库
git init project1
7.2 克隆远程仓库
git clone [url]
8.将工作区的文件添加到暂存区
8.1. 提交单个文件或文件夹
git add test.java/entity
8.2. 提交所有文件和文件夹
git add -a
git add .
9. 将暂存区的文件提交到本地仓库
9.1. 提交单个文件或文件夹
git commit test.java/entity -m “提交记录的描述”
9.2. 提交所有的文件或文件夹
git commit -am "提交记录的描述"
9.3 提交时显示所有的diff信息
git commit -v
9.4 使用一次新的commit,代替上一次提交,如果代码没有任何新变化,则用来改写上一次提交的message
git commit --amend -m [message]
9.5 重做上一次commit,并包括指定文件的新变化
**git commit --amend [file1] [file2] ...
**
9.6 commit message的编写规则
9.6.1 commit message按规则编写的好处
- 提供更多可查询的信息
- 过滤重要的内容
- 生成changelog
9.6.2 标准的commit message的组成部分
- header :
type(scope):subject
- body
- footer
9.6.3 commit message 中 header的type几种常用的类型、scope的规则,及subject的规则
-
feat
:新功能 -
fix
:修复bug -
style
:格式 -
refactor
:代码重构 -
chore
:项目构建
scope:一般填写的是模块名
subject:一般是提交的描述
9.6.4 安装commit Message插件commitizen
- 安装:
npm install -g commitizen
- 当前项目-nmp的初始化:nmp init
- 当前项目下-设置为angular格式的commit message:
commitizen init cz-conventional-changelog --save-exact
- 使用:
git cz
,然后选择type,填写scope,填写subject,其他的不填写。
9.7 生成changelog的插件
9.7.1 安装生成changelog的工具
npm install -g conventional-changelog
9.7.2 生成所有的changelog
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
9.7.3 使用changelog的注意事项
- feat(scope): 某些信息 :
subject与前面的冒号之间需要有一个空格
scope必须使用小括号包裹
9.8 撤销上一次提交
git reset --hard HEAD~1
10 查看文件状态
10.1 查看所有文件详细状态信息
git status
10.2 查看单个文件详细状态信息
git status test.java
10.3 查看所有文件的简要信息
git status -s
11.将文件从暂存区删除文件,工作区不做改变(撤销git add 操作)
11.1 只从stage中删除,保留物理文件
git rm --cached readme.txt
11.2不但从stage中删除,同时删除物理文件
git rm readme.txt
11.3 把a.txt改名为b.txt
git mv a.txt b.txt
12. 签出 -checkout
12.1.检出branch分支。更新HEAD以指向branch分支,以及用branch 指向的树更新暂存区和工作区。
git checkout branch
12.2.汇总显示工作区、暂存区与HEAD的差异。
git checkout
git checkout HEAD
12.3.用暂存区中filename文件来覆盖工作区中的filename文件。相当于取消自上次执行git add filename以来(如果执行过)的本地修改。
git checkout -- filename
12.4.维持HEAD的指向不变。用branch所指向的提交中filename替换暂存区和工作区中相 应的文件。注意会将暂存区和工作区中的filename文件直接覆盖。
git checkout branch -- filename
12.5.注意git checkout 命令后的参数为一个点(“.”)。这条命令最危险!会取消所有本地的 #修改(相对于暂存区)。相当于用暂存区的所有文件直接覆盖本地文件,不给用户任何确认的机会!
git checkout -- . 或写作 git checkout .
12.6.如果不加commit_id,那么git checkout -- file_name 表示恢复文件到本地版本库中最新的状态。
git checkout commit_id -- file_name
12.7 新建一个分支 执行指定的提交(commit)
git branch [分支名] [commit id]
13 日志
13.1 查看详细日志
git log
13.2 查看有格式的日志
git log --oneline
13.3 查看n行日志
git log -n
git log -n --oneline
13.4 查看所有日志
git reflog
13.5 日志过滤
git log --oneline | grep [message]
14 远程仓库和远程分支
14.1 克隆master分支(当不指定分支名的时候,默认就是克隆master分支)
git clone [url]
14.2 克隆指定分支
git clone -b [branch name] [url]
14.3 指定远程仓库名克隆(不使用默认的origin名字)
git clone -o [自定义分支名] [url]
14.4 删除远程分支
- 常规命令
git push [远程仓库名(一般为origin)] --delete [远程分支名]
git branch -dr [远程仓库名]/[远程分支名]
- push时
省略本地分支名
(推送一个空分支到远程的某个分支上)
git push [远程仓库名] :[远程分支名]
14.5 推送到远程仓库
git push [远程仓库名(一般为origin)] [远程仓库中的分支名]
14.6 查看远程仓库的信息
git remote -v
14.7 查看某个远程仓库的信息
git remote show [远程仓库名(一般为origin)]
14.8 将本地分支提交到远程的仓库
git remote add [远程仓库名(默认是origin,可以修改为任意哦)] [url(远程仓库地址)]
14.9 删除与本地仓库关联的远程仓库
git remote remove [远程仓库名(默认是origin)]
14.10 新建远程仓库
git remote add [分支名] [url(远程仓库的地址)]
14.11 取回远程仓库的变化,与本地分支合并
- 完整写法:
git pull [远程仓库名] [远程分支名]:[本地分支名]
- 简介写法(表示与当前分支合并):
git pull [远程仓库名] [远程分支名]
- 合并(如果其他人将远程仓库中删除了某个分支,git pull的时候会删除对应的本地分支,为了防止这个操作)
git pull rebase [远程仓库名] [远程分支名]:[本地分支名]
- 在本地删除远程仓库中已经删除的分支
git pull -p
14.12 上传本地指定分支到远程仓库
- 完整写法:
git push [远程仓库名] [本地分支名]:[远程分支名]
- 简介写法:(省略远程分支名,将本地分支推送到与之存在
追踪关系
的远程分支--通常两者同名。如果远程分支不存在,则会被新建)
git push [远程仓库名] [本地仓库的分支名(一般和本地分支名一致)]
- 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略
git push [远程仓库名]
14.13 强行推送当前分支到远程仓库,即使有冲突
git push [远程仓库名] --force
14.14 如果当前分支只有一个追踪的分支,主机名可以省略
git push
14.15 如果当前分支与多个主机存在追踪关系,则使用-u指定一个默认主机
git push -u [远程仓库名] [本地仓库的分支名]
14.16 不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机
git push --all [远程仓库名]
14.17 推送标签到远程分支(默认是不推送标签的)
git push [远程分支名] --tag
14.18 第一次push到远程仓库,当远程仓库有文件时,应该先执行如下命令pull远程仓库的内容,再进行push
git pull [远程仓库名] [远程仓库分支名] --allow-unrelated-histories
git push -u [远程仓库名] [本地仓库分支名]
14.19 新建一个分支,与指定的远程分支简历追踪关系
git branch --track [本地分支名] [远程分支名]
15 标签tag
15.1 查看所有的标签
git tag
15.2 给当前分支打标签
git tag -a [tag name] -m [message]
15.3 向远程分支推送标签
git push --tag
15.4 为之前的某次提交打标签
git tag -a [tag name] [branch hash id] -m [message]
16. 修改的文件内容的查看
16.1 查看所有的修改过的文件的内容
git diff
16.2 查看添加到暂存区的修改的文件的内容
git diff --staged
17 分支
17.1 查看本地分支
git branch
:带*号的为当前分支
17.2 查看远程分支
git branch -r
17.3 查看所有分支(本地分支+远程分支)
git branch -a
17.4 创建分支
git branch [分支名]
17.5 切换分支
git checkout [分支名]
17.6 创建并切换分支
git checkout -b [分支名]
17.7 删除分支
git branch -d [分支名]
:-D(大写):强制删除
17.8 合并分支
git merge [要合并到当前分支的分支名]
如:当前在a分支,b分支上有添加的内容,需要将b分支中添加的内容合并到a分支:git merge b
18 撤销
18.1 未添加到暂存区的撤销(没有git add 操作),撤销到最近的一次提交
- 单个文件的撤销
git checkout --[fileName]
- 所有文件的撤销
git checkout -- .
18.2 添加到暂存区的撤销(执行过git add 操作),撤销到执行过add命令之前的状态
- 对单个add过的,但没有commit过的文件进行撤销
git reset HEAD [fileName]
- 对所有的add过的,但没有commit过的文件进行撤销
git reset HEAD
18.3 已经提交的撤销操作(执行过git commit操作)
- 撤销某次commit---生成一个新的提交,当再次revert的时候,就会回到上一个版本,且再生成一个提交
git revert [某次提交的ID]
- 回滚,---回退到某次提交,该提交以后的提交都会回退,且不会产生新的提交
git reset --hard [某次提交的ID]
18.4 移除所有未被跟踪的文件(没有执行girt add操作的文件,删除物理文件)
git clean [options]
:options:-df:-d:表示包含目录,-f:表示强制删除
18.5 只从暂存区中删除,保留物理文件
git rm --cached files
18.6 不但从stage中删除,同事删除物理文件
git rm files
19. 储藏(Stashing)
当在当前分支开发到中途的时候,需要切换到其他分支,当前的分支会丢失,可以使用stash命令
19.1 储藏当前修改
- 不添加message的
git stash
:git stash是本地的,不会通过git push命令上传到远程仓库 - 添加message(推荐,用于记录版本)
git stash save [message]
:给stash添加message
19.2 查看储藏列表
git stash list
19.2 重新应用缓存的stash
19.2.1 将储藏堆栈中的第一个stash删除,并将对应的修改应用到当前的工作目录下
git stash pop
19.2.2 应用指定的储藏,但不删除s堆栈中的stash
git stash apply [stashName]
:如果不加stashName默认应用上一次的储藏
19.3 移除stash
- 删除指定名字的储藏
git stash drop [stashName]
:删除指定的stashName的储藏 - 删除所有的储藏
git stash clear
19.4 取消储藏
git stash show -p [stashName] | git apply -R
:如果没有指定名字,则会自动选择最近的一次储藏