git 的使用
代码协同管理工具
- 防止代码丢失,做代码备份
- 做代码的版本管理,创建多个版本或者节点,在多版本之间切换
- 可以将代码在多人之间简单的传输共享
- 可以方便多人协同开发,开辟各自分支和分支管理
什么是git
git是一个开源的分布式版本控制系统,可以用于高效的管理大小项目。
分布式 : 每个节点关系平等,都保存完整代码,节点之间相互推
送或者下载代码。工作方式多样
集中式 : 有明确的中央服务器统一管理代码,每个节点将代码上
传中央服务器或者从中央服务器下载。逻辑简单
git特点
- git可以管理各种文件,特别是代码项目,多在*nix系统中使用
- 是开源的系统,是唯一可以操作github的管理工具
- git是分布式管理,不同于集中式,这也是和svn最大的差别
- git 可以脱网操作,传输速度更快
- git的安全性很强,有全球唯一的commit版本号
- git的分支管理很强大,可以方便多人协同工作
git 基本配置
git安装: sudo apt-get install git
git config
配置级别
- 系统中所有的用户均使用的配置
命令 : git config --system
配置文件 : /etc/gitconfig
e.g. 配置git用户
sudo git config --system user.name Tedu
- 当前用户的所有项目均使用的配置
命令: git config --global
配置文件 : ~/.gitconfig
e.g. 配置用户邮箱
git config --global user.email tarena@tedu.cn
- 只在当前项目中使用的配置
命令: git config (命令要在git项目文件夹中执行)
配置文件: project/.git/config
e.g. 配置编译器
git config core.editor vscode
- 查看当前配置
git config --list
git 基本概念
工作区 : 通过自己的主机操作的git目录
暂存区 : 用来记录你工作的行为,作为暂时保存
本地仓库 : 本地用来备份同步工作区内容的区域
远程仓库 : 其他主机的git仓库
git的基本操作命令
初始化仓库:git init
注意:初始化仓库后产生.git目录为git的管理目录,初始化仓库的
目录中的内容即可使用git管理
查看工作分支状态:git status
默认工作分支为master,可以通过创建新的分支切换
文件提交到暂存区:git add [file]
- 可以一次提交多个内容,中间用空格隔开
- 提交的内容可以使文件也可以是目录
- 如果想将当前目录下所有内容都提交也可以使用 * 表示
删除暂存区的记录
git rm --cached [file] (如果是目录加 -r)
将暂存区记录的修改内容同步到本地仓库
git commit -m "some message"
- -m 为添加的附加信息
- 当工作区和本地仓库内容一致是git status提示工作区干净
查看提交日志
git log
一行显示git log --pretty=oneline
工作区操作
查看工作区文件和本地仓库的差异
git diff [file]
放弃工作区文件修改(撤销)
git checkout -- [file]
恢复本地仓库文件到工作区
git checkout [file]
文件的移动和删除
删除工作区文件并提交到暂存记录
git rm [file]
移动工作区文件并提交到暂存记录
git mv file dir
rm mv 的用法和shell命令rm mv相同,操作后直接commit同步
到本地仓库
版本控制命令
回到之前版本
git reset --hard HEAD^
HEAD 后几个^表示回到之前的几个版本
通过commit_id回到指定的版本
git reset --hard commit_id(前七位)
查看操作日志
git reflog
获取到操作记录后可以根据commit_id去往较新的版本
标签管理
什么是标签 : 即在当前工作位置添加快照,保存项目的版本信息
,一般用于项目版本的迭代
创建标签
git tag v1.0
默认会在最新的commit_id处打标签
查看标签
git tag 查看所有标签
git show V2.0 查看某个标签的具体信息
在某个指定commig_id处打标签
git tag v0.9 [commit_id]
回到某个标签的版本
git reset --hard v0.9
删除标签
git tag -d v2.0
保存临时工作区
创建临时工作区
git stash
将工作区修改内容暂时封存,恢复到最近一个“干净”状态
查看保存的工作区
git stash list
应用某个工作区
git stash apply stash@{1}
新的工作区总是为stash@{0},老的工作区会向下排列
应用上一个工作区,并删除他
git stash pop
删除工作区
git stash drop stash@{0} 删除某一个
git stash clear 删除所有
分支管理
什么是分支?
分支即每个人在获取原有分支(master)代码的基础上,作为自己的工作环境,
单独开发,不会影响其他分支操作,开发完成后再统一合并到主线分支
好处: 安全,不影响其他人工作,自己控制进度
缺点: 会有冲突,降低耦合度可以有效地减少冲突
查看当前分支 git branch
前面带 * 的表示当前正在工作的分支
创建分支 git branch [branch_name]
注意: 创建分支之前尽量保证原分支是干净的
切换工作分支 git checkout [branch_name]
创建并切换到新分支下 git checkout -b <branch_name>
合并分支 git merge [branch_name]
默认是 fast-forward
快速提交,没有提交信息
我们可以禁用这种模式,使用以下命令
git merge --no-ff -m '提交信息' 分支名
删除分支 git branch -d [branch_name]
强制删除未合并的分支 git branch -D [branch_name]
解决合并冲突
冲突的发生: 两个分支修改了同一个文件并有了各自的提交
请看示例:
1.创建一个新分支 dev
> git checkout -b dev
2.修改 code.txt 内容,并提交
> git add code.txt
> git commit -m '新增了内容在code.txt中'
3.切换回 master 分支
> git checkout master
4.在master的 code.txt 添加一段内容并进行提交
> vi code.txt
5.现在,master分支和dev分支各自都分别有了新的提交
这样在合并的时候就会冲突
> git merge dev
6.解决冲突
- 打开冲突的文件,手动删除 <<< master 和 >>> dev
- 然后保存, 再次提交
远程仓库
在远程主机上的仓库,git是分布式的,每一台主机上的git结构
基本相同,只是把其他主机上的git仓库叫做远程仓库
创建共享仓库:
1.创建目录 mkdir gitrepo
2.设置仓库文件夹的属主
chown 用户: 用户组 gitrepo
chown tarena: tarena gitrepo
3.创建共享仓库
git init --bare aid.git
4.设置git项目文件夹数组
chown -R tarena: tarena aid.git
添加远程仓库
git remote add origin[远程主机名]
tarena@127.0.0.1:/home/tarena/gitrepo/aid.git
向远程主机推送分支
git push -u origin master
从远程主机获取项目
git clone 链接地址
将代码同步到远程主机
git push
将远程仓库内容拉取到本地
git pull
git fetch (获取远程分支到本地,但是暂时不合并)与pull有差别,fetch没有合并那一步
删除已有的远程主机
git remote rm origin
github(远程仓库)
开源的项目社区网站,提供丰富的开源项目,也为用户提供项目管理服务
git是github唯一指定的代码管理工具
网址: https://www.github.com
创建新的仓库: 右上角+ new repository --> 填写信息
操作github:
1.git remote 连接远程仓库
2.通过github上传代码
3.github就是一个远程仓库