本文已参与[新人创作礼]活动,一起开启掘金创作之路。
首先我们先了解一下git的通用操作流程
一.基本概念
1.版本库
当我们使用git管理文件时,如git init会自动生成一个.git文件,这个文件被称为版本库。
.git会为我们自动创建一个master分支,并将HEAD指针指向master分支
2.工作区 本地存放项目文件的地方
3.暂存区 ( Index/Stage )
就是暂时存放文件的地方,通常使用add命令将工作区的文件添加到暂存区里
4.本地仓库 (Repository)
我们使用commit命令可以将暂存区的文件添加到本地仓库
通常情况下HEAD指针指向的就是master分支
5.远程仓库(Remote)
当我们将代码托管到Github或者Git时,该远程git服务器就是一个远程仓库,通常使用clone命令拷贝到本地仓库中,开发后使用push托送到远程仓库
二.Git文件状态
git status ===通常我们需要查看一个文件的状态
1.当出现Changes not staged for commit
表示工作区已有该内容,但是缓存区还没有,我们需要进行git add操作
2.当出现Change to be committed
表示文件已在缓存区,我们需要进行git commit 操作
3.当出现nothing to commit,working tree clean
表示我们已完成相应操作,可以将代码托送到远程仓库
三.git配置命令
1.查询配置信息
(1) 列出当前配置:git config --list
(2) 列出Repository(仓库)配置: git config --local --list
(3) 列出全局配置: git config --global --list
(4) 列出系统配置: git conifg --system --list
2.第一次使用git,配置用户信息
(1) 配置用户名: git config --global user.name " your name "
(2) 配置用户邮箱: git config --global user.email "youremail@github.com"
3.其他配置
(1) 配置解决冲突时使用哪种差异分析工具,比如使用vimdiff:git config --global merge.tool vimdiff
(2) 配置git命令输出为彩色:git config --global color.ui auto
(3) 配置git使用的文本编辑器: git config --global core.editor vi
四.查看信息
1.git diff --cached ===比较暂存区与上一版本的差异
2.git diff 文件名 --cached ===指定文件在暂存区和本地仓库的不同
3.查看提交历史:git log;参数-p展开每次提交的内容差异,用-2显示最近的两次更新,如git log -p -2
4.git log ===查看详细提交日志
5.git reflog ===查看简洁版的日志
6.git remote -v ===查看远程仓库信息
五.操作
git init ===新建仓库
git clone + 远程地址 ===从远程克隆项目
git add . ====推到暂存区
git commit -m '' ====本地仓库
git remote add origin(默认是远程仓库别名url) ===链接本地仓库与远端仓库
git remote rm origin ===删除远程仓库
从远程分支checkout出来的本地分支,称之为跟踪分支。
在跟踪分支上向远程分支上推送内容:git push,向远程仓库中绑定的远程分支推送数据
向远程仓库中绑定的远程分支拉取数据:git pull
git pull <远程主机名> <远程分支名>:<本地分支名> ===拉取远程分支到本地分支
git reset --hard head~2 (版本序号) ===版本回退
git reset --hard 1ffe92e(版本号) ===版本回退
git由于加载过多出现大量#~乱码 ===shift+z+z
git reset HEAD ===暂存区文件撤销 (不覆盖工作区)
git merge 分支名 ===当前分支与指定分支合并
git push origin -d 分支名 ===删除远程分支
git reset --(soft | mixed | hard ) < HEAD ~(num) > ===版本回退
hard ===回退全部,包括HEAD,index,working tree
mixed ===回退部分,包括HEAD,index
soft ===只回退HEAD
六.分支管理
1.branch
git branch ===查看本地分支
git branch -r ===查看远程分支
git branch -a ===查看本地和远程分支
git branch -d 分支名 ===删除分支
git branch -m 原分支名 新分支名 ===重命名分支
git branch --merged ===查看哪些分支已经合并到当前分支
git branch --no-merged ===查看哪些分支没有合并到当前分支
git branch -v ===查看各个分支最后一个提交对象的信息
2.checkout
git checkout 分支名 ===本地切换分支
git checkout -b 分支名 ===创建并切换分支
git checkout -b 本地分支名 origin/远程分支名 ===拉取远程分支并创建本地分支
git checkout -- ===撤销工作区修改
3.fetch
git fetch 远程分支名 分支名:远程分支名 ===拉取远程分支并创建本地分支
git fetch 远程主机名 ===将某个远程主机的更新,全部取回本地
git fetch 远程主机名 分支名 ===取回特定分支,可以指定分支名
git fetch && git merge git pull <远程主机名> <远程分支名>:<本地分支名> ===从远程仓库拉取代码并合并到本地
七.差异比较
git diff HEAD ===比较工作区与本地最近一次commit内容
八.分支命名
master分支
-
主分支,用于部署生产环境的分支,确保稳定性。
-
master分支一般由develop以及hotfix分支合并,任何情况下都不能直接修改代码。
develop 分支
-
develop为开发分支,通常情况下,保存最新完成以及bug修复后的代码。 -
开发新功能时,
feature分支都是基于`develop分支下创建的。
feature分支
-
开发新功能,基本上以
develop为基础创建feature分支。 -
分支命名:
feature/开头的为特性分支, 命名规则:feature/user_module、 feature/cart_module。
release分支
release 为预上线分支,发布提测阶段,会release分支代码为基准提测
hotfix分支
1.分支命名:hotfix/ 开头的为修复分支,它的命名规则与feature分支类似。
2.线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。
九.忽略文件.gitignore
这个文件的作用,会去忽略一些不需要纳入Git管理这种,我们也不希望出现在未跟踪文件列表。
# 此行为注释 会被Git忽略
# 忽略 node_modules/ 目录下所有的文件
node_modules
# 忽略所有.vscode结尾的文件
.vscode
# 忽略所有.md结尾的文件
*.md
# 但README.md 除外
!README.md
# 会忽略 doc/something.txt 但不会忽略doc/images/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为txt文件
doc/**/*.txt
注:此文章参考多篇文章整理所得,如有错误请及时提醒,谢谢