简单易学的git教程

Git的简介

Git的优点

  • 分布式版本控制系统,不用联网也可以使用
  • 分支管理功能强大
  • 随着开源项目的流行,git也越来越流行。全球最大的同性交友平台(github)只支持git

Git的缺点

学习难度有点大,一些理论比较难理解

分布式与集中式

集中式



分布式


创建版本库

  • 版本库的概念:可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来
  • 版本库的创建
    1. 创建一个空目录
    2. 在空目录中执行git init命令

版本管理

  • 工作区和暂存区
  • 提交修改
  • 撤销修改
  • 查看状态和日志
  • 版本回退

工作区和暂存区

  • 电脑中看到的目录就可以认为是工作区
  • 工作区有一个隐藏目录.git,这个不算工作区,而是git的版本库
  • 版本库中有区域叫做暂存区

提交修改

  • git跟踪并管理的是修改,而非文件
  • 创建一个新文件、修改文件中内容和删除文件都算作修改
  • 提交修改
    1. 新建、修改或者删除一个文件readme.txt
    2. 新建或者修改文件时使用git add readme.txt 命令将文件添加到暂存区;删除文件时使用git  rm readme.txt将删除修改添加到暂存区
    3. 使用git commit -m “修改readme"命令将修改确认提交

撤销修改

  • 工作区撤销修改,使用git checkout -- readme.txt命令可以让文件回到最近一次add、commit时的状态,可以简单理解将版本库的文件替换工作区中的文件
  • 暂存区撤销修改,使用git reset HEAD readme.txt命令撤销暂存区修改
  • 撤销版本库修改,需要使用版本回退,前提是没有推送到远程库

查看状态

  • 查看当前状态,使用git status命令,显示当前状态
    1. nothing to commit (working directory clean)表示当前工作区没有任何修改,和版本库一致的
    2. no changes added to commit (use "git add" and/or "git commit -a")表示修改了内容没有提交到暂存区
    3. # modified:   readme.txt表示提交到暂存区未commit

查看修改和日志

  • git diff readme.txt可以查看文件修改的内容,显示的格式正是Unix通用的diff格式
  • 使用git log可以历史记录,同时可以看到每次提交的版本号

版本回退

  • git每次commit都会生成一个版本,通过git log命令可以查看历史版本
  • 用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本是HEAD^^,往上100个版本写100个^可以写成HEAD~100
  • git reset --hard HEAD^代表回退到上一个版本,相当于回到过去
  • git reflog查看每次命令的记录,可以回到回退之前的版本,相当于回到未来

远程仓库

  • 远程仓库指的是运行git的服务器,可以用gitlab和github对git仓库进行托管
  • 使用git remote 可以将本地仓库和远程仓库关联
  • 使用git clone 可以将远程仓库复制一份作为本地仓库

分支


分支命令

  • 查看分支:git branch
  • 创建分支:git branch <name>
  • 切换分支:git checkout <name>
  • 创建+切换分支:git checkout -b <name>
  • 合并某分支到当前分支:git merge <name>
  • 删除分支:git branch -d <name>

分支策略

  • master分支是整个项目的主分支
  • develop分支反映最新的开发
  • feather分支用于某个新功能的开发
  • release分支用于准备新版本的发布。
  • hotfix分支用于紧急bug修复

master分支

所有其他分支都直接或间接源自master。master分支只用于产品发布,不能在上面进行工作。

develop分支

  • develop中的代码总是可以完整编译的。
  • 当develop中的代码进入稳定状态(修复了绝大多数bug)准备release时,所有develop中的更改将通过release branch最终merge到master。
  • master和develop分支要和远程仓库保持一致

feather分支

  • feather分支用于某个新功能的开发,源自develop,并最终merge到develop。
  • feather分支最终要么合并到develop 分支,要么被删除。

release分支

  • release分支用于准备新版本的发布。源自develop,merge到develop和master。
  • release分支仅修复小的bug,不能添加新功能。而develop分支可以同时开始新功能的开发。该分支上修复的bug需要merge到develop,并在该分支完成时merge到master。此时需要给master打上tag,标记这个新的release。

hotfix分支

  • Hotfix分支用于紧急bug修复,源自master,merge到develop和master。
  • 对于已经上线的产品,可能有意外的紧急bug需要修复。hotfix branch可以避免修复bug的工作影响develop 分支

分支示例


自定义配置

  • 忽略特殊文件,使用.gitignore文件配置忽略的文件
  • 配置别名, git config --global alias.st status
  • 配置文件,每个版本库的配置文件是.git/config,每个用户的配置文件是在用户的主目录中的这个文件.gitconfig