Git简介
- Git是最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
集中式和分布式
- 集中式
- 版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器
- 分布式
- 根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上
安装Git
- yum install git
创建版本库
- 版本库又被称为仓库,【repository】,初期可以理解为一个目录,这个目录里面管理的文件都可以称为被git管理起来的,每个文件的修改,删除等的操作git都能进行跟踪
- git init
- 将一个普通目录变成版本库
- .git是一个目录,就是用来跟踪管理版本库
- 将一个普通目录变成版本库
- git config --global user.email "you@example.com"
git config --global user.name "Your Name"
# cat查看时可以显示
git config --local user.email "you@example.com"
git config --local user.name "Your Name"- 设置账号的缺省身份标识
- 用户名和邮箱来自github上的注册
- git add filename
- 将文件添加到缓存区/暂存区
- git add .
- git commit -m "日志"
- 提交文件到版本库【仓库】
- git commit -a -m '日志'
- git commit -a 相当于运行 git add 把所有当前目录下的文件加入暂存区域再运行
- 多次add添加,commit提交一次
版本回退
- git status
- 查看仓库当前的状态
- git diff filename
- 查看仓库具体的改动,如果无改动,则无显示
- git reset --hard 版本号【commit id】
- 或者HEAD^代替版本号
- git log
- 查看提交历史记录,以便于确定回到哪个历史版本
- git reflog
- 用git reflog查看历史执行过的git操作,从上往下寻找第一个commit的操作,则是未来的最新的版本
工作区与版本库
- 工作区
- 就是你电脑中的能看到的目录【python2020】
- 版本库
- 工作区中有一个隐藏的目录.git,该目录就是git中的版本库
- 暂存区
- git add
- git仓库
- git commit
其他命令
- git checkout -- a.txt
- 撤销工作区的修改(注意空格)
- git reset HEAD a.txt
- 撤销暂存区的修改
$PATH变量
- 如果需要直接执行某个命令,需要将其添加至PATH路径中
- echo $PATH
- 查看PATH有哪些
- PATH=${PATH}:/opt/bin
- 追加PATH
- 暂时
- 如果需要永久追加,需要将其写入.bashrc(家目录或者etc下的.bashrc)
- 或者将软链接放入path
- n -s /root/lotuslaw /usr/bin/lotuslaw
- 追加PATH
时光穿梭机
- git status
- 查看仓库的当前状态
- git diff filename
- 查看仓库中文件的具体改动
- git reset --hard 【commit id】
- 版本回退
- git log
- 查看提交历史记录
- git reflog
- 查看历史执行过的git操作
- git checkout -- <文件>
- 丢弃工作区的改动
- git reset HEAD <文件>
- 取消暂存
- 对于删除文件的跟踪
- rm file
git rm file # 相当于add
git commit -m '日志'
- rm file
远程仓库
- 准备
- 创建GitHub账号
- 生成ssh key
- 密钥,建立本地和网络之间的连接
- ssh-keygen -t rsa -C "github的注册邮箱"
- cat .ssh/id_rsa.pub
- 添加私钥
- ssh-agent bash
ssh-add id_rsa
- ssh-agent bash
- 密钥GitHub
- 检测是否添加成功
- ssh -T git@github.com
- 码云:ssh -T git@git.oschina.net
- 建立连接
- 将本地仓库和远程仓库联系起来
- git remote add origin ssh地址
- 关联远程仓库
- git push [-u] origin master
- 推送本地仓库到远处仓库
- 第一次加-u
- 如果版本有问题,先拉取再推送
- git push --all
- git pull origin master
- 从远程仓库拉取分支到本地
- git pull --all
- 本地修改----> add到暂存区 ---> commit到本地仓库 ---> push到远程仓库
- 克隆
- git clone ssh地址
- 克隆到本地之后,就可以任意修改本地工作区中的文件,修改完成之后,首先将修改add到暂存区,然后将暂存区中的修改提交到本地仓库,最后将本地仓库中的修改推送到远程仓库
- 克隆远程仓库到本地(会自动创建本地仓库并关联)
- git clone ssh地址
分支管理
- 创建、合并分支
- git checkout -b dev
- 切换到一个新分支 'dev'
- git branch
- 查看有哪些分支,*号表示当前分支
- git checkout master
- 切换分支
- git merge dev
- 在master分支下合并分支
- 合并某个子分支到当前分支
- git branch -d dev
- 删除分支
- git checkout -b dev
- 解决冲突
- - 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
- 解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
- 用git log --graph命令可以看到分支合并图
- - 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
- 分支合并策略
- > - master分支应该是非常稳定的,仅仅使用master分支发布版本,平时不在上面干活
> - 比如:每个人都在dev的分支上干活,每个人都有自己的分支,时不时的向dev上合并代码就可以了
> - 比如:发布1.0版本,再把dev上的代码合并到master上面
> - 合并分支时,加上--no-ff参数表示使用普通模式进行合并,合并之后可以查看历史 记录,而Fast-Forword快速模式没有历史记录 - 合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息
- 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
- git merge --no-ff -m "222-1" dev
- git log --graph
- > - master分支应该是非常稳定的,仅仅使用master分支发布版本,平时不在上面干活
标签管理
- 创建标签
- git tag v1.0
- git tag v2.0 ae20ec5
- 为指定commit id创建标签
- git tag
- 查看标签
- 操作标签
- git show v1.0
- 查看指定标签的详细信息
- git tag -a v0.1 -m "version 0.1" e7423195
- 创建标签,携带标签的描述信息
- git tag -d v0.1
- 删除标签
- git push origin --tags
- 将本地仓库中的标签推送到远程仓库
- git push origin :refs/tags/v0.2
- 删除远程仓库中的指定标签
- git show v1.0
解析地址
- /etc/hosts
- 10.36.139.5 git.test.com