Git全栈开发者使用指南

1、Git基础

在这里插入图片描述

一、Git简介

Git是一种分布式版本控制系统,由Linux之父Linus开发。html

所谓分布式版本管理系统,就是在每一台机器上都有一个完整的仓库。前端

image-20201229212250725

二、Git官网

Git官网:gitvue

image-20201229212543426

在官网上能够获取Git的安装软件。git

除此以外,还能够下载《progit》——这是最棒的Git学习资料,并且有中文版本。github

三、Git安装

https://git-scm.com/downloads官方下载地址下载对应的操做系统版本一步步安装便可。数据库

在这里插入图片描述

四、Git基本配置

安装完成以后,在任意目录下,右键 Git Bash Herevim

在这里插入图片描述

全局配置邮箱和用户名(–global表示全局配置,也能够不配置,每一个仓库单独配置)segmentfault

$ git config --global user.name "test"
$ git config --global user.email test@qq.com

五、Git基本概念

5.一、Git工做区域

Git有四个工做区域:bash

  • 工做区

    简单说工做区就是咱们项目的目录。app

    image-20201229220303023

  • 仓库区/本地仓库

    工做区有一个.git目录,其实这个不是工做区,是Git的版本库,存储了Git仓库的全部版本信息

    image-20201229220345268

    在这里插入图片描述

  • 暂存区

    暂存区域是一个文件,保存了下次将提交的文件列表信息,通常在 Git 仓库目录中。 有时候也被称做“索引”,

    不过通常说法仍是叫暂存区域。

  • 远程仓库

    对于分布式版本管理系统,远程仓库不是必须存在的,可是一般项目都会有远程仓库。例如Github就是咱们很是熟悉的远程仓库。

    image-20201229221144078

    基本的Git工做流程以下:

    • 在工做目录修改文件
    • 暂存文件,将文件快照放入暂存区
    • 提交更新,找到暂存区的文件,将快照永久性存储到到 Git 仓库区(本地)
    • 将本地仓库的变动推送到远程仓库

以上几个区域的关系能够用下图表示:

img

5.二、Git分支

分支是为了将修改记录的整个流程分开存储,让分开的分支不受其它分支的影响,因此在同一个数据库里能够同时进行多个不一样的修改。

在这里插入图片描述

Git 为咱们自动建立的第一个分支,也叫主分支,通常其它分支开发完成后都要合并到 master

在这里插入图片描述

5.三、Git文件状态

在git中,文件主要有四种状态:

Life Cycle

  • Untracked: 未跟踪, 此文件在文件夹中, 但并无加入到git库, 不参与版本控制. 经过git add 状态变为Staged.
  • Unmodify(Committed): 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中彻底一致. 这种类型的文件有两种去处, 若是它被修改, 而变为Modified. 若是使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并无进行其余的操做. 这个文件也有两个去处, 经过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

2、Git应用实践

看完上面的Git基础,你可能有一些迷惑,接下来,咱们以实际工做中开发的流程来加深对Git的理解吧。

一、克隆项目

能够经过在工做区使用git init来初始化一个Git仓库,但一般开发中咱们不会这样作,由于实际的项目大部分已经进行了部分开发,并进行了版本管理,因此咱们首先作的是从远程仓库克隆项目。

这里我从Gitee(通常开发项目的远程仓库是部署在内网的GitLab) fork了一个开源项目,将这个项目做为远程仓库的项目:

image-20201229214855118

点击克隆下载,能够看到项目的路径,

  • HTTPS是凭据式的路径,使用此路径,向远程仓库推送代码的时候须要凭据(帐号密码);

    这种方式向远程仓库提交,会要求帐号密码,输入完成以后,Win10操做系统能够选择记住凭据,这样就不用每一次都输入了,Win10操做系统管理凭据 控制面板 → 用户账户 → 凭据管理器 → Windows凭据

    image-20201230174621550

  • SSH是秘钥式的路径,向远程仓库推送代码的时候,须要本地的私钥和远程仓库的公钥对应。

    SSH配置能够参考 Windows配置Github、Gitee共存的Git环境,这里就不详细展开讲解。

我已经进行了公私钥的配置,因此这里选择SSH。

image-20201229215107233

使用git clone命令克隆项目

image-20201229215845069

二、代码管理

项目已经成功克隆,接下来要进行咱们的开发了。

2.一、建立分支

一般开发不是在Master分支上,而是在开发分支上,使用 git branch develop建立一个新分支:

image-20201229222931344

能够经过git branch命令列出全部分支:

image-20201229223057016

能够看到咱们新建的分支。

2.二、切换分支

使用git checkout develop命令切换到新建的develop分支:

image-20201229223325328

2.三、添加文件到暂存区

接下来,咱们再develop分支上进行一些开发操做,我这里对 redeme 进行了一些修改,须要把修改添加到暂存区。

  • 首先经过 git status命令查看工做区文件状态

    image-20201229223653744

  • 接下来使用 git add README.md命令(可使用git add .添加全部修改)将更改添加到暂存区

image-20201229223945199

能够看到文件已经添加。

2.四、提交修改到仓库

接下来使用git commit -m "😀修改了redeme",将修改提交到仓库

image-20201229224319159

这里值得一提的是,咱们的提交信息尽可能遵循某种规范,例如在提交信息中体现本次提交的类型:

  • feat :新功能
  • fix : bug修复
  • docs :文档变动
  • style :与样式相关的全部变更
  • refactor :既不是bug修复也未添加功能的代码更改
  • test :与测试有关全部变更
  • chore :改变了构建任务,程序包管理器配置等

规范而精确的提交信息不只能帮助咱们的同事快速了解咱们的提交,也对咱们本身的开发和重构有很大的帮助。我喜欢用表情包标注提交类型,这样从远程仓库看提交记录比较好看😄

在这里插入图片描述

能够经过git log命令查看提交历史:

image-20201229224851871

2.五、推送修改到远程仓库

可使用git push origin develop命令将修改推送到远程仓库,在推送以前,一般经过git pull origin develop(本实例远程仓库不存在develop分支,因此直接推送)命令来拉取远程仓库——这个是为了不本地版本落后的状况,固然若是冲突你也能够强制提交,只是你的同事会作出什么过激行为不敢保证。😂

image-20201229231704254

在咱们的远程仓库就能够看到此次提交了:

image-20201229231807331

2.六、合并分支

最终咱们的提交都是要合并到master分支的,首先切换到master分支,接着经过命令,git merge develop命令,将develop分支合并到master

image-20201229232122731

咱们这个分支是没有冲突的,可能在合并的过程当中会出现冲突的状况,能够经过 git status 查看冲突的文件,手动解决冲突。固然,能够借助一些开发工具来完成这个工做,下文再讲。

2.七、版本回退

假如说,咱们发现此次提交不是咱们想要的,能够经过 git reset --hard HEAD^ 回退到上一次提交

image-20201229232415498

2.八、打标签

假如咱们要发布一个版本,咱们一般会给此次提交打一个标签 git tag publish/0.0.1

image-20201229232931444

能够经过git tag命令来查看咱们打的标签。

3、Git经常使用命令

在上面有这样一张图片,基本上平常使用记住这6个命令就能够了,可是要想熟练使用,可能就须要记住更多命令了,这里整理了一些经常使用的命令。

img

一、初始化仓库

# 在当前目录新建一个Git代码库
    $ git init

    # 新建一个目录,将其初始化为Git代码库
    $ git init [project-name]

    # 下载一个项目和它的整个代码历史
    $ git clone [url]

二、配置

Git的设置文件为.gitconfig,它能够在用户主目录下(全局配置),也能够在项目目录下(项目配置)。

# 显示当前的Git配置
    $ git config --list

    # 显示 Git 的某一项配置
    $ git config <key>

    # 编辑Git配置文件
    $ git config -e [--global]

    # 设置提交代码时的用户信息,选择global即全局配置
    $ git config [--global] user.name "[name]"
    $ git config [--global] user.email "[email address]"

三、增长/删除文件

这里的增长/删除文件指的是向暂存区增长/删除文件。

# 查看文件状态,查看当前工做区新增、更改或删除的文件
    $ git status
     
    # 添加指定文件到暂存区,能够添加多个文件,中间以空格隔开
    $ git add [file1] [file2] ...

    # 添加指定目录到暂存区,包括子目录
    $ git add [dir]

    # 添加当前目录的全部文件到暂存区
    $ git add .

    # 添加每一个变化前,都会要求确认
    # 对于同一个文件的多处变化,能够实现分次提交
    $ git add -p

    # 删除工做区文件,而且将此次删除放入暂存区
    $ git rm [file1] [file2] ...

    # 中止追踪指定文件,但该文件会保留在工做区
    $ git rm --cached [file]

    # 更名文件,而且将这个更名放入暂存区
    $ git mv [file-original] [file-renamed]
    
    # 临时保存修改,可跨分支
    # save为可选项
    $ git stash [save message]
    # 全部保存的记录列表
    $ git stash list
    # 恢复工做进度到工做区,此命令的stash@{num}是可选项,在多个工做进度中能够选择恢复,不带此项则默认恢复最近的一次进度至关于git stash pop stash@{0}
    $ git stash pop [stash@{num}]
    # 恢复工做进度到工做区且该工做进度可重复恢复,此命令的stash@{num}是可选项,在多个工做进度中能够选择恢复,不带此项则默认恢复最近的一次进度至关于git stash apply stash@{0}
    $ git stash apply [stash@{num}]
    # 删除一条保存的工做进度,此命令的stash@{num}是可选项,在多个工做进度中能够选择删除,不带此项则默认删除最近的一次进度至关于git stash drop stash@{0}
    $ git stash drop stash@{num} 
    # 删除全部保存
    $ git stash clear

四、代码提交

# 提交暂存区到仓库区,若是不加-m,会进入vim编辑器
    $ git commit -m [message]

    # 提交暂存区的指定文件到仓库区
    $ git commit [file1] [file2] ... -m [message]

    # 提交工做区自上次commit以后的变化,直接到仓库区
    $ git commit -a

    # 提交时显示全部diff信息
    $ git commit -v

    # 使用一次新的commit,替代上一次提交
    # 若是代码没有任何新变化,则用来改写上一次commit的提交信息
    $ git commit --amend -m [message]

    # 重作上一次commit,并包括指定文件的新变化
    $ git commit --amend [file1] [file2] ...

五、分支

# 列出全部本地分支
    $ git branch

    # 列出全部远程分支
    $ git branch -r

    # 列出全部本地分支和远程分支
    $ git branch -a

    # 新建一个分支,但依然停留在当前分支
    $ git branch [branch-name]

    # 新建一个分支,并切换到该分支
    $ git checkout -b [branch]

    # 新建一个分支,指向指定commit
    $ git branch [branch] [commit]

    # 新建一个分支,与指定的远程分支创建追踪关系
    $ git branch --track [branch] [remote-branch]

    # 切换到指定分支,并更新工做区
    $ git checkout [branch-name]

    # 切换到上一个分支
    $ git checkout -

    # 创建追踪关系,在现有分支与指定的远程分支之间
    $ git branch --set-upstream [branch] [remote-branch]

    # 合并指定分支到当前分支
    $ git merge [branch]
   
    # 查看分支合并状态
    $  git rerere status
   
    # 显示合并冲突解决方案的当前状态——开始解决前与解决后的样子
    $  git rerere diff

    # 选择一个commit,合并进当前分支
    $ git cherry-pick [commit]
    
    #分支重命名
    $ git git branch -m [oldName]  [newName]
    # 删除分支
    $ git branch -d [branch-name]

    # 删除远程分支
    $ git push origin --delete [branch-name]
    $ git branch -dr [remote/branch]

六、标签

# 列出全部tag
    $ git tag

    # 新建一个tag在当前commit
    $ git tag [tag]

    # 新建一个tag在指定commit
    $ git tag [tag] [commit]

    # 删除本地tag
    $ git tag -d [tag]

    # 删除远程tag
    $ git push origin :refs/tags/[tagName]

    # 查看tag信息
    $ git show [tag]

    # 提交指定tag
    $ git push [remote] [tag]

    # 提交全部tag
    $ git push [remote] --tags

    # 新建一个分支,指向某个tag
    $ git checkout -b [branch] [tag]

七、查看信息

# 显示有变动的文件
$ git status

# 显示当前分支的版本历史
$ git log

# 显示commit历史,以及每次commit发生变动的文件
$ git log --stat

# 搜索提交历史,根据关键词
$ git log -S [keyword]

# 显示某个commit以后的全部变更,每一个commit占据一行
$ git log [tag] HEAD --pretty=format:%s

# 显示某个commit以后的全部变更,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature

# 显示某个文件的版本历史,包括文件更名
$ git log --follow [file]
$ git whatchanged [file]

# 显示指定文件相关的每一次diff
$ git log -p [file]

# 显示过去5次提交
$ git log -5 --pretty --oneline

# 显示全部提交过的用户,按提交次数排序
$ git shortlog -sn

# 显示指定文件是什么人在什么时间修改过
$ git blame [file]

# 显示暂存区和工做区的差别
$ git diff

# 显示暂存区和上一个commit的差别
$ git diff --cached [file]

# 显示工做区与当前分支最新commit之间的差别
$ git diff HEAD

# 显示两次提交之间的差别
$ git diff [first-branch]...[second-branch]

# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"

# 显示某次提交的元数据和内容变化
$ git show [commit]

# 显示某次提交发生变化的文件
$ git show --name-only [commit]

# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]

# 显示当前分支的最近几回提交
$ git reflog

八、远程同步

# 克隆远程仓库
$ git clone [url]

# 下载远程仓库的全部变更
$ git fetch [remote]

# 显示全部远程仓库
$ git remote -v

# 显示某个远程仓库的信息
$ git remote show [remote]

# 增长一个新的远程仓库,并命名
$ git remote add [shortname] [url]

# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]

# 拉取远程分支,同时建立本地分支
$ git fetch [remote] 远程分支名x:本地分支名x
# 拉取远程分支,同时建立本地分支,且切换到该分支
$ git checkout -b [branch] [origin/远程分支名]

# git pull至关于如下两步
# 一、拉取远程分支
$ git fetch [remote] [branch]
# 二、合并到当前分支
git merge [remote/branch]

# 上传本地指定分支到远程仓库
$ git push [remote] [branch]

# 强行推送当前分支到远程仓库,即便有冲突
$ git push [remote] --force

# 推送全部分支到远程仓库
$ git push [remote] --all

# 更新远程分支列表
$ git remote update [remote] --prune
$ git remote update [remote] -p

# 删除和远程仓库的关联
$ git remote rm [remote]

九、撤销

# 恢复暂存区的指定文件到工做区
$ git checkout [file]

# 恢复某个commit的指定文件到暂存区和工做区
$ git checkout [commit] [file]

# 恢复暂存区的全部文件到工做区
$ git checkout .

# 重置暂存区的指定文件,与上一次commit保持一致,但工做区不变
$ git reset [file]

# 重置暂存区与工做区,与上一次commit保持一致
$ git reset --hard

# 重置当前分支的指针为指定commit,同时重置暂存区,但工做区不变
$ git reset [commit]

#  回退到上一次提交
$ git reset --hard HEAD^
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工做区,与指定commit一致
$ git reset --hard [commit]

# 重置当前HEAD为指定commit,但保持暂存区和工做区不变
$ git reset --keep [commit]

# 新建一个commit,用来撤销指定commit
# 后者的全部变化都将被前者抵消,而且应用到当前分支
$ git revert [commit]

# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop

4、在开发工具中使用Git

在Git中一些操做例如解决冲突分支比较等等使用图形化的操做可能会更加方便快捷。

TortoiseGit是一款不错的图形化Git工具,是一个不错的选择,下载地址:https://tortoisegit.org/downl...

image-20201230175941903

固然,使用开发工具集成Git,也是一个不错的选择。

一、在IDEA中使用Git

IDEA是当前最好用的Java开发IDE,IDEA默认集成了对Git的支持,只须要配置设置执行程序便可。

1.一、配置Git

  • File --> Settings--> Version Control --> Git,修改Git执行路径为本身安装的Git路径。

image-20201226170425899

  • 点击Test,配置成功会提示Git版本信息

image-20201226170737431

1.二、远程操做

Idea中能够很是便捷的进行远程仓库相关的操做。

1.2.一、拉取代码

经过Idea能够直接拉取远程仓库的代码

  • File --> New ---> Project From Version Controller --> Git

image-20210101122023216

  • 填入远程仓库地址,选择 Clone

image-20210101122201172

这样远程仓库的代码就克隆到了本地。

1.2.二、拉取远程分支

上面咱们拉取的是远程仓库主干代码,咱们也能够拉取远程分支代码。右下角,点开分支。

image-20210101122607056

能够看到 Remote Branchs,下面就是远程仓库的分支。点击远程分支,Checkout As,就能够把远程分支拉到本地了。

image-20210101124703962

1.2.三、更新代码

咱们在提交代码前最好先更新下远程仓库的代码到本地仓库,这样能够减小没必要要的冲突,更新update能够直接经过快捷键 Ctrl + T ,也能够经过工具栏上按键来实现:

image-20210101125000452

1.2.四、提交/推送代码

在IDEA中开发好本身的代码以后如何提交到远程仓库呢?右键项目-->Git

image-20210101125217192

  • 1.Commit Directory:commit代码(将stage区的暂存文件提交到当前分支的本地仓库,并清空stage区),也能够push代码(把本地仓库的文件同步到远程仓库)。

image-20210101125736901

    • Commit对应Git的Commit命令,commit到本地仓库
    • Commit and Push也就是Commit和push,咱们能够直接在这里commit到本地仓库以后,再push到远程仓库。

在IDEA中,咱们会看到文件被标识着不一样颜色:红色,绿色,蓝色。它们分别表明什么意思呢?

  • 红色:未被版本控制的文件,即未添加到版本控制的文件,例如咱们添加到ignore中的文件。
  • 绿色:新加入版本的文件,即咱们新建立的文件,还未提交到远程仓库。
  • 蓝色:修改过的文件,即远程仓库中已有该文件,咱们此次对它进行了修改,可是还未提交。

这里再接着看看几个按键的做用:

image-20210101130202600

2.Add:把本地文件从工做目录添加到本地仓库的stage区,对应Git的Add命令。

3.Compare with Branch…:与远程分支比较。咱们提交前能够经过此功能比较下咱们工做目录中代码和远程分支代码的异同。

4.Show History:查看历史修改版本记录。

5.Revert:回滚,会将你的本地修改回滚。

6.Repository:各类仓库命令。

image-20210101130400728

1.三、分支管理

1.3.一、新建分支

点击New Branch能够新建分支

image-20210101122733992

1.3.二、分支切换/比较/合并/重命名/删除

在Idea中这些功能的使用也常简单,点击分支,点击要操做的分支,就能够看到这些选项

image-20210101123418491

1.四、查看提交历史

Version Controllerlog能够查看提交历史

image-20210101130638650

1.五、合并(处理冲突)

上面咱们提了分支合并,能够从本地分支合并,也能够从远程仓库合并,通常两个并行开发的分支合并都是会有冲突,Idea中合并冲突是很是方便的。

  • 在合并过程当中发生了冲突,Idea会提示冲突,选择Merge

image-20210101131209085

  • Idea提供了三个分栏,咱们能够点击箭头,很方便地处理冲突

image-20210101131313411

  • 若是合并时没有处理,也能够在Version Controller中处理

image-20210101131750519

二、在VS Code中使用Git

VS Code是当前最流行的前端开发工具,VS Code对Git的支持不是那么强大,可是能够经过插件来加强Git功能。

2.一、基本使用

2.1.一、基本界面

个人VS Code配置了中文包。

点击左侧Git标识,能够看到不少的操做。

image-20210101133222496

2.1.二、文件状态

当对文件进行修改后,有三种状态

alt

  • M 是 modify 的缩写即该文件存在修改
  • D 是 delete 的缩写即该文件被删除了
  • U 是 Update 的缩写即该文件是新添加
2.1.三、提交代码

image-20210101134246844

文件按钮的的意思。

  • 若是是新添加的文件,放弃修改就会提示完全删除文件。
  • 若是是删除的文件,选择放弃修改就会从仓库中恢复文件 (不再用担忧误删的文件找不到了)  
  • 点击 + 号确认文件的修改就会提到 stash Changes 上 (对应 git add 命令)

image-20210101134415788

确认了文件以后,在输入框输入此次更新的内容,而后点击打勾就能够保存这一次更新了 (对应 git commit 命令)
若是当前全部的 Changes 都要 commit ,那能够直接输入上传的信息而且打勾就能够快速 commit 了。

2.1.四、推送代码

完成提交之后,vscode 的左下角就会出现上箭头的数字为 1 (上箭头是 push 的更新,下箭头是能够 pull 的更新)
固然若是以前没有 push 过代码的话,这个可能会没有数字显示。
这个时候就能够将代码推送到 远程仓库上了 (对应 git push 命令)

image-20210101135322345

OK,远程仓库就能够看到咱们的提交了。

image-20210101135531641

2.1.五、拉取代码

也能够经过 vscode 左下角的下箭头看到仓库是否能够 拉取,而后点击菜单的 git pull 进行仓库更新 (对应 git pull 命令)

image-20210101135743780

2.1.五、分支切换

vscode 能够直接在左下角建立分支,也能够切换分支。

image-20210101135941565

上面的功能知足了基本要求,若是还须要 代码比对解决冲突,能够选择插件,目前公认的最好用的插件是GitLens。

2.二、使用Git插件

2.2.一、安装GitLens

打开插件商店,搜索 GitLens,安装便可。

image-20210101140524655

2.2.二、GitLens基本使用

安装完成以后侧边的工具栏会多出一个 git 分支图标,点击就能够查看更详细的信息了。

image-20210101141822489

  • 第一个折叠面板查看全部提交
  • 第二个折叠面板查看当前打开文件的历史
  • 第三个折叠面板查看分支
  • 第四个折叠面板查看远程
  • 第五个折叠面板查看stash的文件
  • 第六个折叠面板查看标签
  • 第七个折叠面板能够比较不一样的分支标签的文件区别

同时发现,每一行代码都会显示提交人和提交信息

image-20210101142124359

2.2.三、查看更改

修改文件后,Gitlens 侧边会有颜色块告诉你代码的更新状况:

  • 红色箭头表示删除
  • 蓝色块表示修改
  • 绿色块表示增添

image-20210101142959836

在右上角点击查看更改,能够查看当前文件的更改。

image-20210101142700430

image-20210101143105278

2.2.四、处理冲突

VScode 内置的 git 会告诉你有冲突的文件,而后经过 Gitlens 能够快速调整冲突。

image-20210101145429996

image-20210101145525530



<big>参考</big>

【1】:Git 从入门到放不下

【2】:经常使用Git命令整理

【3】:Git分支管理策略

【4】:vue-blog

【5】:《progit》

【6】:Windows配置Github、Gitee共存的Git环境

【7】:VScode 结合git的全面使用流程(上)

【8】:VScode 结合git的全面使用流程(下)

相关文章
相关标签/搜索