文章简介
本文记录学习git学习中的要点
目录
Git很牛,如雷灌耳,前阵子被开源社区“抛弃”的被微软收购的全世界最大的同性交友平台GitHub,阿里的Gitee,都是Git工具
什么是Git?
Git是一个__开源__的__分布式__版本控制系统,用于敏捷高效地处理任何项目。
是Linux Toralds
为了帮助管理Linux内核而开发的一个开源代码的版本控制软件
,同样作用的工具还有CVS
, Subversion
等。Git的特别在于它采用了分布式
版本库,不用服务器端软件支持。
我对分布式的印象类似P2P,“团结一切能够团结的力量”,将复杂的大任务分散到多个终端上, 以某种方法统筹结果, 管理进度。中二一点,像是“蜂群意志/虫群意志”。Mark一下,后面再认真了解
Git可以理解为高级云盘,因为有比云盘更严谨的机制设计,不同于网盘的点包括
版本控制
:就像是Windows的时间戳,为当前的代码设定一个开发版本,每次提交更改也有时间戳,可以很方便地退回到某个节点,来撤销更改。
分支管理
:分支是一个代码开发中会很自然地产生的需求,多人进行同步开发的时候,都希望能够在原始代码上修改自己的模块,最后再整合到一起,Git可以做到
除此之外, 当然有多人协作
, 远程备份
这种云服务都有的优点。
Git工作流与命令详解
开始之前
用户设置
没有进行用户设置, 不允许进行git操作,需要使用下面的命令来定义当前操作者的的信息
git config --global user.name
git config --global user.email
常用config还有
color.status
color.branch
color.interactive
color.diff
这些是color属性, 一般设置为auto,自动设置
merge.tool=vimdiff
这是diff工具, 有kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, 和 opendiff可用
core.editor=vim
这是文本编辑器,可以选择emacs,vim等
初始当前文件夹为Git文件夹
只有在Git文件夹-一个有.git文件夹包含了git相关配置的文件夹目录才是一个Git文件夹, 才可以进行除了clone
以外的操作。
通过init指令可以完成这个任务
git init
上传路线
总览
- 各指令作用如图,每次commit都会生成一个独一无二的ID, 用于标记本次commit
引申-Git中的文件状态status与三区
文件状态
文件状态 | 默认颜色 | 描述 |
---|---|---|
Untracked/ Unstaged 未记录 |
红色 | 对于git来说没有登记过信息,突然冒出来的文件 |
Unmodified 未修改 |
无 | 被仓库登记过,在本地工作区没有修改内容的文件 |
Modified 已修改 |
DOS中红色,idea中是蓝色 | 被仓库登记过,在本地工作区有过改动的文件 |
Staged | 绿色 | 已经被git登记过的文件 |
三区划分
分区 | 描述 |
---|---|
工作区WorkDirectory | 本地目录 |
暂存区Stage/Index | 被Git登记,需要稍后上传到仓库的文件 |
Git仓库Repositiory | 唯一远程仓库内的文件 |
add时文件的忽略-.gitignore
用任意方式在当前文件夹创建一个.gitignore
的文件, 来设定提交忽略策略,idea常用如
.git
logs
rebel.xml
target/
!.mvn/wrapper/maven-wrapper.jar
log.path_IS_UNDEFINED
.DS_Store
offline_user.md
*.class
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
文件名被该文件条目匹配的文件不会被status识别到需要add的文件树中
有时候需要进行刷提交
git -rm -r --cached .
git add .
git commit -m "清除缓存“
git push
```‵
#### reset命令
```bash
git reset [--soft|--mixed|--hard] [commitID]
reset参数用来重置暂存区内文件的状态,三个参数可选
参数 | 更改引用 | 更改暂存区 | 更改工作区 |
---|---|---|---|
hard | 1 | 1 | 1 |
soft | 1 | 0 | 0 |
mixed | 1 | 1 | 0 |
push
git push 仓库别名 分支名称
分支branch
命令 | 描述 |
---|---|
branch <branch-name> | 新建分支 |
brancj | 查看当前分支 |
checkout <branch-name> | 切换到某分支 |
delete <branch-name> D <branch-name>强制删除 |
删除分支 |
merge | 将别的分支合并到__当前分支__ |
log
log用来查看commit记录,按q退出,没什么好说的,当前状态会有(HEAD -> 分支名)标识
HEAD 与tag
HEAD的本质是一个指向commit对象的指针,用于追踪当前版本
tag用来为上传的文件打标签,方便版本控制
下载
总览
remote远程仓库设置
指令 | 描述 |
---|---|
remote -v | 详细查看当前远程仓库配置,最前面的字符串是连接别名,默认有origin |
remote add 别名 url | 添加一个仓库 |
remote rm 别名 | 删除一个仓库连接 |
remote rename A B | 重命名连接 |
clone和pull的区别
clone | pull | |
---|---|---|
需要init | 0 | 1 |
执行多次 | 0 | 1 |