Git是什么?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git有什么特点?简单来说就是:高端大气上档次!
那什么是版本控制系统?
有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
这个软件用起来就应该像这个样子,能记录每次文件的改动:
版本 | 文件名 | 用户 | 说明 | 日期 |
---|---|---|---|---|
1 | service.doc | 张三 | 删除了软件服务条款5 | 7/12 10:38 |
2 | service.doc | 张三 | 增加了License人数限制 | 7/12 18:09 |
3 | service.doc | 李四 | 财务部门调整了合同金额 | 7/13 9:51 |
4 | service.doc | 张三 | 延长了免费升级周期 | 7/14 15:17 |
这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。
-
git相关概念
- 工作目录: 持有实际文件
- 暂存区(Index): 缓存区域,临时保存改动
- HEAD: 指向最后一次提交的结果
-
git常用命令操作
- 创建新仓库
- 创建新文件夹,打开,然后执行>git init
- 检出仓库
- 克隆本地仓库: git clone /path/to/repository
- 克隆远程仓库: git clone username@host:/path/to/repository
- 添加至暂存区
- git add
- git add *
- git add .
- 提交
- git commit -m "代码提交信息"
- 改动已经提交到了 HEAD,但还没到远端仓库
- git commit -m "代码提交信息"
- 推送
- git push origin master
- master是分支名,其他分支换名即可
- git remote add origin <server-path>
- 若本地没有克隆现有仓库,此时想将仓库连接到某个远程服务器时可如此操作
- git push origin master
- 创建新仓库
-
分支特性
- 分支是用来将特性开发绝缘开来的
- 在创建仓库的时候,master 是“默认的”分支
- 在其他分支上进行开发,完成后再将它们合并到主分支上
-
分支模式
-
分支操作
- 创建一个叫做“feature_x”的分支,并切换
- git checkout -b feature_x
- 切换回master分支
- git checkout master
- 删除分支
- git branch -d feature_x
- 将本地分支推动至远端
- git push origin
- 创建一个叫做“feature_x”的分支,并切换
-
更新&合并
- 更新本地仓库至最新
- git pull
- 合并其他分支至自己分支
- git merge
- 更新本地仓库至最新
-
冲突
- 合并时并不总是一帆风顺的,如果修改相同的数据,此时就需要进行手动解决冲突
- 修改后添加文件. >git add
- 合并之前可以diff查看
- git diff <source_branch> <target_branch>
-
标签
- 为指定提交添加标签
- git tag 1.0.0 88cb7f51e1
- 其中88cb7f51e1是标记的提交 ID 的前 10 位字符,课基于 git log来获取
- 相当于是给提交起名
- 为指定提交添加标签
-
日志
- 查看本地仓库的历史记录
- git log
- 只看某一个人的提交记录
- git log --author=jim
- 压缩每一条提交记录只占一行输出
- git log --pretty=oneline
- 通过 ASCII 艺术的树形结构来展示所有的分支,名字+标签
- git log --graph --oneline --decorate --all
- 看看哪些文件改变了
- git log --name-status
- 查看本地仓库的历史记录
-
恢复
- 操作失误时替换掉本地改动
- git checkout --
- 此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件
- 改动本地所有文件恢复至 HEAD
- git fetch origin
- git reset --hard origin/master
- master可以指定远程存在的其他分支
- 操作失误时替换掉本地改动
-
git常用配置
- 配置提交人+邮件
- git config --global user.name "abc"
- git config --global user.email "abc@123.com"
- 配置提交人+邮件