从 Git 到 Git Flow

125 阅读5分钟

官网下载

git bash

git bash 是 Windows 下的一个命令行工具,是基于"MSYS GNU"环境的 git 分布式版本控制工具,用于上传或下载项目代码。可以通过 git bash 模拟 Unix 命令行的终端出来,在这个终端里面做 git 相关的版本控制。

基础命令

git init # 初始化仓库

git clone # 直接克隆仓库

git remote add origin [http or ssh] # 添加远程仓库,ssh需要添加秘钥,请自行查阅相关文章

git status # 查看状态

git fetch # 将远程仓库的更新全部取回本地

git checkout –b [本地分支名] origin/[分支名] # 新建本地分支并跟踪远程分支

git log –p FETCH_HEAD # 查看更新信息

git merge FETCH_HEAD # 将拉取下来的最新内容合并到当前所在的分支中

git pull [远程仓库 远程分支名] : [本地分支名]
# 1. 将远程仓库的更新全部取回本地
# 2. 远程分支与当前分支合并,冒号后面部分可省略
# 3. 相当于git fetch + git merge

git branch # 查看本地分支

git branch –a # 查看远程分支

git branch [分支名] # 新建本地分支

git checkout [分支名] # 切换分支

git checkout --track origin /[分支名] # 跟踪远程分支

git-flow 工作流

  • 使用git flow version确认当前环境中是否已经安装(如 Git for Windows v2.6.4 及以上版本自带 Git Flow,无需再次安装)
  • 使用git flow init初始化仓库,连按enter键默认设置
  • 预设master、develop分支,可创建feature、release、hotfix分支
  • master 用来与产品代码同步的分支
  • develop 进行任何新开发的基础分支

feature 分支

feature 分支基于 develop 分支,用于功能迭代开发。

  git flow feature start [分支名] # 创建特性分支
  git flow feature publish [分支名] # 特性分支推送到远程仓库
  git flow feature finish [分支名] # 把我们的工作整合到 “develop” 分支中

release 分支

release 分支基于 develop 分支,用于发布线上版本。release 分支用版本号命名是一个明智的选择,这个命名方案还有一个很好的附带功能,那就是当我们完成了 release 后,git-flow 会适当地自动去标记那些 release 提交。

  git flow release start [分支名] # 创建特性分支
  git flow release publish [分支名] # 特性分支推送到远程仓库
  git flow release finish [分支名] # 把我们的修改整合到“develop master” 分支中

hotfix 分支

hotfix 分支基于 master 分支,用于线上 bugs 紧急修复。release 版本作做全面测试时,可能就会发现一些小错误。在这种情况下,git-flow 提供一个特定的 “hotfix” 工作流程。

  git flow hotfix start [分支名] # 创建特性分支
  git flow hotfix publish [分支名] # 特性分支推送到远程仓库
  git flow hotfix finish [分支名] # 把我们的修改整合到“develop master” 分支中
  • 每次合并 release/hotfix 分支后,记得推送本地 develop 和 master 分支至远程
  • 同时可以使用git push --tag打上标签(tag)

一些日常问题

commit message的描述有误,需要修改,使用命令

git commit --amend # 注:该操作会改变你原来的commit id

使用git branch -a看到已经删除的远程分支

原因:git 合并冲突分支后会保留分支,避免无法撤回

  1. 获取远端分支信息,看到和本地和远端不同步的地方,过时的就是和本地不同步的分支
  git remote show origin
  1. 同步远程的分支到本地,远程已被删除的分支就不会再看到了
  git remote prune origin

高級

脚本文件(把命令变成脚本)

Shebang(也称 Hashbang ,)是一个由井号和叹号构成的字符序列 #! ,其出现在文本文件的第一行的前两个字符。(即脚本开头:#!/usr/bin/env sh)

  1. 创建一个文件,无所谓后缀
  2. 添加执行权限(windows 没有这个概念)
  3. 把要执行的命令写到文件里
  4. 运行sh [正确文件路径] # 或者[./正确文件路径]命令即可执行
  5. 如果加了 shebang ,删掉 sh 也能执行,但是必须用正常的路径,如果加了 PATH (不知道的可以了解下系统环境变量相关知识),可以只用文件名就能执行(可执行的文件路径加进 PATH 中,就可将文件名当作指令来调用该文件)
  6. #!/usr/bin/env python这种用法是为了防止操作系统用户没有将 python 装在默认的/usr/bin 路径里。当系统看到这一行的时候,首先会到 env 设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作
  7. 通过.sh 脚本执行 perl 脚本,不需要使用 perl 前缀,但仅限于:#!/bin/env sh

git for windows 内置 perl 解释器

Perl 语言被称为"实用报表提取语言”(Practical Extraction and Report Language),其最初的设计者是 Larry Wall,Perl 指的是语言本身,perl 指的是程序运行的解释器。Perl 语言汲取了很多编程语言的特性,所以如果你有其他语言的编程基础,上手会非常快。它的显著特点是集成了正则表达式和第三方库(CPAN),常用于 linux 系统处理生物数据,善于处理字符串和批量化。
学习网站

举个 🌰

# 生成作者信息文件
# -s -e -p 选项作用官网自行查阅
# 尝试管道符'|'为界,分析下每个命令的作用🤣
git shortlog -se | perl -spe 's/^[\s+]+\d+\s+/author: /' | perl -spe's/\</\nemail: </' | perl -spe 's/\>/>\n/'  > AUTHORS.txt

无关紧要的小知识

git log --pretty=format:[字符]

控制显示的记录格式,常用的格式占位符写法及其代表的意义如下:

  • %H 提交对象(commit)的完整哈希字串
  • %h 提交对象的简短哈希字串
  • %T 树对象(tree)的完整哈希字串
  • %t 树对象的简短哈希字串
  • %P 父对象(parent)的完整哈希字串
  • %p 父对象的简短哈希字串
  • %an 作者(author)的名字
  • %ae 作者的电子邮件地址
  • %ad 作者修订日期(可以用 -date= 选项定制格式)
  • %ar 作者修订日期,按多久以前的方式显示
  • %cn 提交者(committer)的名字
  • %ce 提交者的电子邮件地址
  • %cd 提交日期
  • %cr 提交日期,按多久以前的方式显示
  • %s 提交说明