Git工作流
Flow
for ( =>local-code => submit to local-repository => submit to server-repository => from remote-repository update code => )
Detail
localfolder -> git Stage -> git local -> git remote
本地工作文件夹 -> 索引区 -> 本地库 -> 远程库(服务器端)
基础配置
git init
初始化git config -l
查看配置信息git config --global user.name "XXX"
git config --global user.email "xxx@zz.com"
git config --help
查看帮助信息git help config
git help commit
git help ...
提交本地仓库
创建本地仓库
mkdir mygit
建立本地工作文件夹cd mygit
进入文件夹
git init
git init
初始化git库
更新仓库内容
nano 文件名
编辑本地文件,比如nano test.htm
git status
git status
查看本地文件夹状态当前状态为 红色 提示文件未添加到索引区
git add FN
git add 文件名
添加文件到索引区,比如git add test.htm
提交成功再次查看状态为绿色,成功添加到索引区
git commit -m “RI”
git commit -m "备注信息"
将索引区内容提交至本地仓库
git log
git log
查看提交日志
查看提交日志
首先修改下原有文件内容
nano test.htm
查看状态
添加到索引区
提交到本地库
查看日志
在以后日志必定会越来越多,就可以用以下方法查看
git log -[number]
git log -1
后面的数字代表最近的几条记录
git log –oneline
git log --oneline
将日志信息缩短为一行显示 ; ID号也缩短为前7位了
git log -p
git log -p
查看更改的详细信息
git log -p -[number]
git log -p -1
和数字组合用法,查看最近一次更改的详细信息
git log -p -[number]
git log -p -1 --online
加上oneline,对比上图可见头部信息缩短了
git log –stat
git log --stat
对每次的提交的内容进行统计的信息
git log –help
git log --help
查看其他命令用法
工作状态回退
未添加到索引区
修改文件内容
查看状态
git checkout – [FN]
git checkout -- 文件名
突然不想要已修改的部分内容了,状态回退一下查看源文件,刚才修改内容已经被回退
已添加到索引区
修改内容然后添加到索引区
git reset HEAD [FN]
git reset HEAD 文件名
将添加内容从索引区回退接着继续按照 未添加到索引区 的步骤即可回退到文件未修改状态
git add .
Git 不同版本的用法区别
比较修改内容
git diff
git diff
比较工作文件夹
git diff –cached
git diff --cached
比较索引区
文件操作
执行多个操作(修改内容,添加文件)
查看状态并添加到索引区
git mv OldFN NewFN
git mv 旧文件名 新文件名
修改文件名修改前缀认为添加新文件,修改后缀认为重命名
同时修改认为添加新文件
git rm –cached FN
git rm --cached 文件名
从索引区删除查看下日志
忽略管理
设置Git忽略的文件,这些文件不参与Git库的提交和管理。(动态文件,比如Node.js的 node_modules 文件夹)
新建两个文件;ingnore.tmp为需要被忽略的文件, .gitignore为配置文件
查看状态
目前状态为两个文件都将被Git管理
在 .gitignore 中添加
*.tmp
忽略这类文件:即使是在同级目录文件夹内的.tmp 都会被忽略查看状态
.tmp 已被忽略 ;
更新最后的提交记录
在上次提交过一次记录,后来发现内容有误,需要修改下内容但是又不想再提交一条修改记录,而是添加到上次提交的记录中去。
在.gitignore 中再添加一条信息
查看状态
添加到索引区
git commit –amend
git commit --amend
提交到最后的一条记录中去
版本回退/切换
git reset –hard HEAD
git reset --hard HEAD
回退到最新提交版本git reset --hard HEAD~
回退到最新提交的上一次版本git reset --hard HEAD~n
回退到倒数第N版本git reset --hard 版本ID号
回退到指定版本号
先提交几次记录
回退到上个版本
回退到最新版本,指的是此刻版本头HEAD指向的版本
根据版本ID号回到指定版本 ; 通过头指针指向我们需要的版本,其他在头部之上的版本只是未显示而已,但仍在库中。
git reflog -[number]
git reflog -4
要是忘记的版本号,可执行该命令查询之前版本切换的操作信息,从而确定需要切换的版本号
分支使用⭐
以上的操作都是在主分支上执行的,但是在实际应用中不应该多次在主分支操作。
在项目中每个人都有自己的要执行的任务,每个人执行的任务都不同,那么就需要在主分支上建立自己的分支,在自己的分支上不断的完善后再向主分支进行合并。
git branch BN
git branch 分支名
建立新分支
git checkout BN
git checkout 分支名
切换分支
Detailed Process
查看下当前已有分支情况
建立分支,切换分支
建立的分支拥有的内容 与 在建立分支的那个时刻的主分支(被分支的分支)的内容一致
添加文件,提交记录
查看当前分支日志
切换到主分支,查看日志
在分支修改后没有提交的情况下,是不允许切换分支的
分支文件存储位置
通过git在本地创建仓库,切换分支时另外一个分支的内容在哪里?
项目文件都保存在.git目录下,始终存在,包括历史的各种版本,只不过不能从文件名字搜索到,因为Git是Content Addresing的。每次切换到一个分支,或者是check out一个历史版本,Git就从数据库(就是.git目录)中把这个版本的文件和目录都找出来,Copy一份放这当前的项目目录下。
合并分支
git merge BN
git merge 分支名
先得切换到主分支,再进行合并
git branch BN
git branch -d 分支名
删除分支
分支冲突
git checkout -b BN
git checkout -b 分支名
建立分支并切换到该分支修改文件内容,提交
切换分支,继续修改同样文件的内容,提交
在主分支上合并开发分支
有冲突,需要手动修改
打开有冲突的文件
这是VSCode的功能(当前所处分支|被合并分支|两者都要|比较)
修改完毕后,回到主分支,查看状态并提交
使用Tag标签
简单了解版本号
版本号: 1.1.4 (NNN.abc.xxx)
有些为四位数 1.1.4.2356 最后的数字为编译次数等其他信息
- NNN:大版本号
- abc:每次做出的小更新时,发布的版本号
- xxx:每次bug修正时发布的版本号
git tag VersionNumber
git tag 版本号
把当前代码状态作为一个版本发布修复bug,再次发布新版本
新功能追加,再次发布新版本
查看版本
使用别名
在Git中可以将经常使用的命令以别名缩写的方式简化使用,根据个人习惯或者开发组规范吧。
git config --global alias.别名 原命令名
例如:
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm commit
git config --global alias.st status
...
GitHub
创建Github仓库
克隆仓库到本地
进入仓库查看状态
向仓库添加内容后,查看状态,提交到本地仓库
查看当前状态,所处分支
查看要推送的URL,然后推送到远端
进入GitHub查看,推送成功!
常用命令
git branch -a
查看全部分支情况git branch 分支名1 remotes/origin/分支名2
以远程分支名2为依据建立本地分支名1 (这两个是同一个东西来的)git remote -v
查看获取和推送的URLgit push origin 分支名
推送到指定分支git pull
拉取远端内容
Remark
文章中用到的简写:
- RI ==Remark Information
- FN == FileName
- BN == branchName