Git 简介:
- git是一个分布式管理系统 ( 分布式: 在客户端和服务端都具有版本控制能力 )
- 作用: 管理源代码
- 方便多任协同开发
- 方便版本控制 ( 可以以最快的速度恢复到指定版本 )
- 仓库:
- 在我们文件中如果有.git文件夹, 即标记着代码仓库已经建立
- .git 同级目录下的文件都会被管理起来
Git 原理图:
常用命令:
git init | 初始化一个本地仓库 |
git config user.name '用户名' | 配置用户名, 不配置默认使用全局配置.gitconfig |
git config user.email '邮箱' | 配置用户邮箱 |
git clone [跟上要克隆的仓库地址] | 克隆远程仓库到本地仓库 |
git staus | 查看git仓库状态 |
git pull | 远程拉取项目文件( 修改项目之前,一定要拉取最新的代码 ) |
git add . | 添加工作区所有文件至git暂存区( 修改后添加动作 ) |
git commit -m '版本描述' | 将暂存区文件提交到仓库区, 生成一个版本 |
git push | 将修改后的代码推送到远程仓库 |
git log | 查看详细历史记录, 不能查看已删除的commit记录 |
git reflog | 查看历史记录 |
git reset --hard HEAD 或 git reset --hard 版本号 | 当前最新版本 ( 以下介绍两种方式 ) |
git reset --hard HEAD^ | 当前最新版本 的 前一个版本 |
git reset --hard HEAD~1 | 当前最新版本 的 前一个版本 |
git reset --hard HEAD~10 | 当前最新版本 的 前十个版本 |
git checkout 文件名 | 撤销工作区代码(只能作用在工作区和暂存区) |
git reset HEAD 文件名 git checkout 文件名 | 第一步: 将暂存区代码恢复到工作区 第二部: 将工作区代码撤销 |
git diff HEAD -- 文件名 | 对比 版本库 与 工作区 中的代码 |
git diff HEAD HEAD^ -- 文件名 | 对比 版本库 与 版本库 中不同版本的代码 |
rm 文件名 git rm 文件名 git commit -m '删除描述' | 第一步: 删除本地工作区文件 第二步: 删除暂存区文件(确认删除操作) 第三步: 将删除操作提交到版本库 如果不想删除了, 在commit之前执行git checkout -- 文件名 |
git tag -a v1.0 -m 'version 1.0' git push origin v1.0 git tag -d 标签名 git push origin --delete tag 标签名 | 在本地打标签v1.0是标签名 推送标签到远程仓库 删除本地标签 删除远程仓库标签 |
git branch git checkout -b dev git push -u origin dev git branch -d dev git branch 分支名 版本号 | 查看git分支 创建并切换dev分支 设置本地分支跟踪到远程分支dev 删除已经终止的分支 恢复指定版本的分支 |
git check master git merge dev git push | 切换到master主分支 将dev分支合并到master分支 将本地合并后的状态推送到远程仓库 |
命令使用总结:
- 要使用git命令操作仓库,需要进入到仓库内部
- 要同步服务器代码就执行:git pull
- 本地仓库记录版本就执行:git commit -am '版本描述'
- 推送代码到服务器就执行:git push
- 做项目之前先clone,编辑代码前要先pull,编辑完再add,再commit,最后推送是push
代码冲突:
- 原因: 多人同时修改了同一个文件
- 注意: 一旦出现冲突, 必须先解决在做后续开发
- 解决代码冲突:
- 原则: 谁冲突谁解决, 且要协商解决
- 方案: 保留所有代码, 或者保留某一人的代码
- 解决完冲突代码后, 依然需要add, commit, push
- 容易冲突的操作方式:
- 多个人同时操作了同一个文件
- 一个人一直写不提交
- 修改之前不更新最新代码
- 提交之前不更新最新代码
- 擅自修改同事代码
- 减少冲突的操作方式:
- 养成良好的操作习惯,先pull在修改,修改完立即commit和push
- 一定要确保自己正在修改的文件是最新版本的
- 各自开发各自的模块
- 如果要修改公共文件,一定要先确认有没有人正在修改
- 下班前一定要提交代码,上班第一件事拉取最新代码
- 一定不要擅自修改同事的代码