Tool - Git

Git

Git 官网:https://git-scm.com/

Git 概述

Git 简介

  1. Git 是一个代码协同管理工具。

  2. Git 是一个开源分布式版本控制系统,可用于高效的管理大小项目。

  3. Git 是2005年由 Linus Torvalds (Linux 之父)主导开发。

Git 的作用

  1. 防止代码丢失,可以做备份。

  2. 代码版本的管理,可以进行多个版本之间的跳跃。

  3. 可以方便的将代码在多人之间进行共享传输。

  4. 多人开发时,有各种模式可以方便代码管理。

Git 和 Svn

用的最多的两种代码管理工具:Git、Svn

分布式:每一个结点都保存完整的代码,没有统一的中央服务器,节点之间相互推送下载代码完成代码共享,例如git。

集中式:代码集中管理,每次完成的代码上传到中央管理器,然后再统一从中央管理器中下载代码使用,例如svn。

安装 Git

Windows下安装 Git

官网下载:https://git-scm.com/download/win

Linux 下安装 Git

$ sudo apt-get install git
$ git --version
git version 2.7.4

配置 Git

Git 有三个不同级别的配置文件,可以通过 git config 来配置。

  1. 系统级:系统中所有的用户都可以使用该配置,配置文件目录为 /etc/gitconfig

    # 查看系统级配置列表
    git config --system --list
    
  2. 用户级:当前用户可使用该配置,配置文件目录为 ~/.gitconfig~/.config/git/config

    # 查看用户级配置列表
    git config --global --list
    
  3. 项目级:当前项目可使用该配置,配置文件目录为 ./.git/config

    # 查看项目级配置列表
    git config --list # 默认为 --local,与 git config --local --list 效果相同
    

每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。也就是说优先级顺序为:项目级 > 用户级 > 系统级

常用配置:

# 查看所有的配置以及它们所在的文件
git config --list --show-origin

# 配置项目级用户名
git config user.name Hujingbo

# 配置项目级邮箱
git config user.email hujingbo98@163.com

# 配置项目级编辑器为 vim
git config core.editor vim

使用 Git

工作流

工作区中写代码 --> 添加到暂存区 --> 提交到本地仓库 --> 发布到远程仓库

工作区:就是项目所在的目录,编写代码的区域。

暂存区:如果项目中的文件想备份或者进行其他操作,需要将指定的文件先保存在暂存区。

本地仓库:本地仓库是真正保存备份或者其他操作文件的区域,只能被当前项目所在的目录使用。

远程仓库:如果想将某一个项目与其他主机进行共享或者传递,需要使用远程仓库。

# Git 工作流
#------------------------------------------------------------------------------
# 初始化仓库
git init
# 克隆现有仓库
git clone <url>
# 查看本地状态
git status
# 工作区 -> 暂存区
git add <pathspec> # 将指定的已修改文件提交到暂存区
git add <. | *> # 将当前目录下所有已修改的文件提交到暂存区
# 暂存区 -> 工作区
git restore --staged <file>...
# 暂存区 -> 本地仓库
git commit -m <msg>
# 撤销上次 commit
git reset HEAD~
#------------------------------------------------------------------------------

# 查看日志
#------------------------------------------------------------------------------
# 查看 commit 日志
git log
# 查看单行日志
git log --pretty=oneline
# 按补丁的格式输出日志
git log --patch
git log -p
# 查看提交的简略统计信息
git log --stat
#------------------------------------------------------------------------------

# 比较工作区文件和本地仓库文件的区别
git diff [<path>]

恢复操作

# 查看所有的历史版本
git reflog # 最新的操作始终在最上边
# 回到上一个版本
git reset --hard HEAD^  # HEAD后面的^数量决定了回到上几个版本
# 回到指定的版本
git reset --hard <commit_id> # 只需要commit id的前七位即可

标签管理(版本管理)

标签就是在当前工作的位置添加快照,保存工作状态,一般用于版本的迭代。

# 创建标签
#------------------------------------------------------------------------------
# 创建标签
git tag <tagname>
# 创建标签并设置提示信息
git tag <tagname> -m <msg>
# 默认是在最新的commit id处创建标签
git tag v1.0
# 指定某一个commit id处创建标签
git tag <tagname> <commit id>
#------------------------------------------------------------------------------

# 删除标签
git tag -d <tagname>

# 查看标签
#------------------------------------------------------------------------------
git tag
# 查看指定标签的具体信息
git show <tagname>
#------------------------------------------------------------------------------

# 推送标签操作到远程
#------------------------------------------------------------------------------
# 第一种:推送操作的标签
git push origin :refs/tags/<tagname>
# 第二种:更直观的删除远程标签的方式
git push origin --delete <tagname>
#------------------------------------------------------------------------------

# 检出标签
git checkout <tagname>

# 基于标签创建分支
git checkout -b <branch> <tagname>

# 恢复到指定标签的位置
git reset --hard <tagname>

贮藏操作

# 贮藏工作区的修改
#------------------------------------------------------------------------------
git stash
git stash push
# 贮藏新增文件
git stash -u
# 带备注贮藏
git stash save "备注"
# 带备注贮藏新文件
git stash save "备注" -u
#------------------------------------------------------------------------------

# 查看贮藏
git stash list

# 贮藏弹出
#------------------------------------------------------------------------------
# 弹出指定贮藏
git stash apply stash@{编号}
# 弹出最近的贮藏并删除
git stash pop
# 删除指定的贮藏
git stash drop stash@{编号}
# 删除所有的贮藏
git stash clear
#------------------------------------------------------------------------------

分支操作

# 查看分支
#------------------------------------------------------------------------------
# 查看分支,前面有 * 的分支为当前检出分支
$ git branch
# 查看所有分支
$ git branch --all
# 查看每一个分支的最后一次提交
$ git branch -v
# 查看哪些分支已经合并到当前分支
$ git branch --merged
# 查看所有包含未合并工作的分支
$ git branch --no-merged
# 查看尚未合并到master分支的有哪些?
$ git branch --no-merged master
#------------------------------------------------------------------------------

# 分支创建
git branch <分支名称>

# 分支切换
git checkout <分支名称>

# 创建并切换到新的分支:
git checkout -b <分支名称>

# 合并分支
#------------------------------------------------------------------------------
# 将指定的分支合并到当前分支
git merge <分支名称>
# 注意: 合并过程中如果没有冲突,直接合并后当前分支即为干净的状态,直接保存在本地仓库
# 中。如果产生冲突,需要人为的选择,然后在进行add和commit的操作。在创建分支前,尽量
# 保证当前分支是安静的,以减少冲突的发生
#------------------------------------------------------------------------------

# 删除分支
#------------------------------------------------------------------------------
# 删除指定的分支
# 注意: 如果删除的分支没有合并,是不能用当前命令删除的,使用 -d 删除,表示强制删除指
# 定分支。
git branch -d < 分支名称>
# 从服务器上删除 serverfix 分支
git push origin --delete <branch>
#------------------------------------------------------------------------------

远程仓库

远程仓库可以共享仓库中的项目,可以被其他主机接收到。

# 添加远程仓库
git remote add <name> <url>

# 删除远程仓库
git remote rm <name>

# 将本地仓库的文件推送到远程仓库
# 注意:第一次推送需要加-u,以后不需要。
git push
git push -u <repository> <branch>

# 从远程仓库获取项目
git clone <url>

# 从远程仓库拉取分支并与当前分支合并
git pull <repository> <branch>

# 从远程仓库拉取分支(不合并):
git pull <remote repository> <remote branch>:<local branch>

# 将本地仓库的文件推送到远程仓库
git push

# 从远程仓库中更新代码
git pull
# 也用于更新,但是如果有新的分支不会合并
git fetch

# 本地旧覆盖版远程新,当本地比远程旧,用本地覆盖远
git push --force <remote repository>

分支开发工作流程

什么是分支开发?

分支主要用于多人协作工作,分支即获取原有代码,在此基础上创建自己的工作环境,单独开发,不会影响其他分支的操作,开发完成后再统一合并到主线分支中。分支开发的好处,安全,不影响其他人工作。

project(项目库)
     master(主线分支)
          hotfix(线上紧急bug修复分支)
     develop(开发分支)
          feature(功能分支)
          release(发布分支)
               bugfix(bug修复分支)
长期分支

master主线分支

记录项目主线版本的开发迭代过程,该分支是已发布的稳定的产品版本。
master分支的权限由版本管理员统一进行管理,除版本管理员外,其他任何人不允许向master分支合并代码。其他分支需要向master分支合并代码时,首先提出合并请求,然后由版本管理员合并到master分支,合并后,版本管理员应立即添加版本号,发布随时可用的产品版本;每向master分支合并一次,产品版本号就会增加一次。

develop开发分支

记录所有开发人员日常工作的成果,该分支是相对稳定的开发版本。
develop分支的合并操作由研发主管和版本管理员共同管理,不允许开发人员将自己的代码直接合并到develop分支,也不允许开发人员在develop分支上直接进行开发工作,一经发现严肃处理。

一个项目库只能有一个master分支和一个develop分支。项目库创建后,由版本管理员从master分支创建develop分支,项目组所有成员需要克隆服务器上的项目库到本地,然后再从develop分支创建自己的feature分支进行工作。

短期分支

项目库中存在的短期分支有:feature、release、bugfix和hotfix。

feature:功能分支
用于开发新的功能。所有新功能的开发都要先创建feature分支,然后再进行开发工作,feature分支由开发人员从develop分支创建,不同的功能需创建不同的feature分支。

release:发布分支
用于产品发布准备。新功能开发完成后需要发布产品新版本时,要创建release分支进行发布准备,release分支由版本管理员从develop分支创建。

bugfix:bug修复分支
用于修复不紧急的bug。系统测试过程中发现bug,开发人员需要从release分支创建bugfix分支进行修改,不允许开发人员在release分支上直接修改bug。

hotfix:线上紧急bug修复分支
用于修复产品发布后出现的紧急bug。产品上线后,在客户现场出现问题,需要马上解决时,由开发人员从master分支创建hotfix分支进行紧急修复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值