首页 > 技术文章 > GIT的工作流程

jmllc 2021-06-18 11:12 原文

三种状态
 
文件的三种状态:已提交(committed)、已修改(modified)和已暂存(staged)
  • 已修改,表示修改了文件,但还没保存到数据库中。 
  • 已暂存,表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交,表示数据已经安全的保存在本地数据库中。 
如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。 
 
三个工作区域
 
Git 项目的三个工作区域:工作区、暂存区以及仓库区
  • 工作区(workspace):就是你在电脑里能看到的目录。
  • 暂存区(staging area):一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index),保存了下次将提交的文件列表信息。
  • 仓库区( local repository & remote repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库,用来保存项目的元数据和对象数据库的地方。
 

Git 工作流程

基本的 Git 工作流程如下:克隆、检出、增删改、暂存、提交、推送  
  1. 克隆:从远程仓库中克隆项目到本地(git clone; git init)
    * 克隆或创建的目的都是产生一个本地仓库;
  2. 检出:检出或切换分支(git branch; git checkout)
    * 切换分支只替换工作区内容,因此,多个分支不需要多个目录;切换分支后,工作区还原到分支创建时或最后更新时的样子;
    * 执行 git init 的时候,默认情况下 Git 会创建 一个 名为master 的分支,并且将该分支作为当前分支;
  3. 增删改:添加修改工作区上的文件——主要工作内容(git status; git diff; git reset; git rm; git mv; git merge)
    * 合并分支时会产生冲突, 需要手动去修改, 修改后,用 git add 告诉 Git 文件冲突已经解决;
    * 可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支;
  4. 暂存:将文件的快照放入暂存区域(git add)
  5. 提交:将暂存区域的文件快照永久性存储到 Git 仓库目录(git commit)
  6. 推送:将本地项目的修改推送到远程仓库中(git push)
    * git push 将本地分支合并到远程分支“或上传作为远程仓库的一个分支”; 如果本地分支名与远程分支名相同,可以省略命令行中的远程分支名;如果合并时发生冲突,则会push 失败,需要 pull 或 fetch先。
    * git pull 将远程分支直接合并到本地分支“或将远程仓库的某一分支下载为本地的一个分支”; 如果是拉取到当前分支,可以省略命令行中的本地分支名; 可能会产生冲突,需要手动解决;
    * git fetch 将远程分支拉取到本地,用户检查远程分支的更新内容之后,判断是否与本地冲突等,再决定是否合并到本地分支中( git merge);
    * git romote 主要用于编辑存于本地的“远程仓库的基本信息”,包括为一个或多个远程仓库创建(增删改)别名、为某一远程仓库的别名“配置(增删改)”url等;origin 为 git clone 时 为所克隆的远程仓库创建的默认别名。
 
三个命令级别
 
【byFelix,三个命令级别——并非严谨的归纳】git命令操作对象可以粗略的分为三个级别:
(1)操作对象为文件或目录,可以称为文件级git命令;
(2)操作对象为分支的,可以称为分支级git命令;
(3)操作对象为库的,可以称为库级git命令;
如此分级,有利于理解git命令。除按操作对象分级外,也可以按命令结果进行,例如,如果结果主要是文件信息,则为文件级命令。
 
  • 库级:git clone; git init; git romote
  • 分支级:git branch; git checkout; git push; git pull; git fetch
  • 文件级:git status; git diff; git reset; git rm; git mv; git merge; git add;  git commit; git log; git blame
 

推荐阅读