GIT 的基本使用

GIT 的基本使用

2018-09-20 | |

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
GIT - https://git-scm.com

基本概念介绍

GIT仓库   Repository,可以看作一个目录,这个目录里面的所有文件都可以被 git 管理起来。仓库分为本地仓库与远程仓库。在实际的项目开发过程中,远程仓库放在 git 服务器上(如:gitgub、gitlab或者自己搭建的git服务器),本地仓库则会放在每个开发人员的电脑上。开发人员可以直接 clone 服务器上的远程仓库地址来作为我们的本地仓库;也可以直接在本地通过 git init 命令来初始化一个 git 仓库,并与服务器上的远程仓库相关联。

工作区   本地仓库所对应的那个目录,也就是我们通过 git init 初始化的那个目录。默认情况下,这个目录下的所有文件与子目录(.git目录除外)都在工作区里。

暂存区   可以理解为一个虚拟工作区,位于.git文件夹下的index目录下。这个虚拟工作区会跟踪工作区的文件变化(新增、修改、删除)。

版本库   .git目录,是一个隐藏目录,位于工作区下,但它并不属于工作区,是 git 用来跟踪管理版本的目录,由 git 自动创建。

本地仓库

使用流程

注:以下使用流程是直接在本地初始化 git 仓库,并与远程仓库进行关联。如果是从远程仓库 clone 到本地,则可以跳过 1、2步

  1. 初始化本地仓库
    使用终端进入指定目录底下,通常为项目的根目录,然后执行 git init 命令,这个目录就成为了我们的本地仓库。
  2. 编辑工作区内的文件(新增、修改、删除)
  3. 查看工作区内的文件状态
    当我们修改了工作区内的文件后,可以使用 git status 命令来查看当前工作区内文件的修改状态。
  4. 添加文件到暂存区
    我们可以使用 git add . 命令来将工作区中所有变化过的文件添加到暂存区中。当添加完后,可以使用 git status 命令来查看目前工作区中的状态。
  5. 提交到本地仓库
    使用 git commit 命令来将暂存区中的文件提交到本地仓库中。提交完成后,使用 git status 命令来查看此时工作区与暂存区的状态。

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
初始化本地仓库
git init

查看当前工作区的状态
git status

查看文件修改的内容信息
git diff file

添加工作区内的所有文件到暂存区
git add .

添加工作区内的指定文件到暂存区
git add file

提交暂存区内的文件到本地仓库
git commit -m '提交日志'

查看版本提交的日志
git log [--graph] [--pretty=oneline] [--abbrev-commit]
--graph 可选命令,图形化日志输出
--pretty=oneline 可选命令,简化日志的输出
--abbrev-commit 可选命令,简化提交日志的输出

撤销对工作区的修改(恢复到最近一次提交到暂存区时的状态)
git checkout -- file

撤销对暂存区的修改
git reset HEAD file

切换到指定的版本
git reset --hard commitID
commitID 表示版本号:
HEAD 当前版本,也就是最新的提交
HEAD^ 当前版本的上一个版本
HEAD~N N 为整数,表示往上第 N 个版本

删除暂存区的文件(先删除文件,再提交一个新的版本)
git rm file
git commit -m '提交日志'

设置用户名与邮箱
git config --global user.name xxx
git config --global user.email xxx@xxx

远程仓库

使用流程

  1. 远程仓库的创建
    在实际开发过程中,一些公司会使用第三方的 git 托管平台来作为自己的 git 服务器(如:gitlab)。创建远程仓库的过程比较简单,只需按照提示一步步操作就可以了,这里就省略了。
  2. 本地仓库与远程仓库的关联
    如果是通过 git init 命令初始化的本地仓库,则需要将本地仓库与远程仓库关联起来。
    1
    git remote add origin 远程仓库地址
    如果是直接从 git 服务器上 clone 远程仓库到本地来作为自己的本地仓库,则不需要再建立关联了,因为它们已经建立了关联。
    1
    git clone 远程仓库地址
  3. 推送至远程仓库
    当我们通过 git commit 命令将暂存区的内容提交到本地仓库之后,如果想要别人能够更新到我们提交的代码,则需要将之前提交到本地仓库的内容推送到远程仓库。
    1
    2
    这里将内容推送至 master 主分支,实际开发过程中可以根据具体情况推送到指定的分支
    git push origin master
  4. 拉取远程仓库中的代码
    如果别人已经将他修改的代码推送到了远程仓库,我们可以拉取到远程仓库中最新的代码。实际开发过程中,如果是多人开发,则在修改代码前需要先拉取下远程仓库中最新的代码,以免出现代码冲突。
    1
    git pull origin master

    常用命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    本地仓库与远程仓库建立关联
    git remote add origin 远程仓库地址

    clone 远程仓库到本地
    git clone 远程仓库地址

    查看远程仓库
    git remote -v

    修改远程仓库的地址
    git remote set-url 新地址

    获取远程仓库最新提交的代码
    git pull origin master

    将本地的提交推送到远程仓库
    git push origin master

分支管理

使用流程

  1. 创建分支
    当我们clone 或者通过 git init 命令来初始化一个本地仓库时,git 默认会创建一条分支,这条分支叫主分支,即 master 分支。在实际开发过程中,master 分支应该仅用来发布新版本,平时不能在上面干活。一般我们会创建一个新的分支专门用来开发,即 develop 分支,这条分支是不稳定的,当我们需要发布某个新版本的时候,再把 develop 分支合并到 master 分支上,在 master 分支上发布这个新版本。每个开发人员都在 develop 分支上工作,每个人都会创建一个自己的分支,时不时地往 develop 分支上合并就可以了。
    1
    2
    3
    4
    5
    6
    7
    8
    创建 develop 分支
    git branch develop

    切换到 develop 分支
    git checkout develop

    创建 develop 分支,并切换到该分支上
    git checkout -b develop
  2. 查看分支
    我们可以查看当前本地仓库中的所有分支以及远程仓库中的所有分支。
    1
    2
    3
    4
    5
    查看本地分支
    git branch

    查看远程分支
    git branch -r
  3. 提交代码到当前分支
    前面我们介绍本地仓库的时候说过代码提交到本地仓库的流程。我们将工作区修改过的文件通过 git add . 命令添加到暂存区,其后再使用 git commit 命令将文件提交到本地仓库。因为当前没有创建其它分支,只有一个 master 主分支,所以我们是直接提交到 master 主分支上的。现在我们已经创建了一个 develop 分支,并且已经切换到了该分支上,那么我们提交的代码就是在 develop 分支上提交的,与 master 分支不相关,也就是说当我们切回到 master 主分支时,之前在 develop 分支所作的所有操作都不会对 master 分支产生影响,通过 git log 命令也不会看到在 develop 分支上的提交记录。我们切换到某个分支,那么对应的操作就是针对这个分支的。

    这里提交的步骤与前面本地仓库的提交步骤是一样的,只不过之前是在 master 分支上提交的,现在是在 develop 分支上提交的。

  4. 创建远程分支
    当我们创建完一个远程仓库后,git 会默认创建一个分支,即 master 主分支,前面也提到过,我们一般不会直接在 master 主分支上进行开发,所以就需要再创建一个分支,来作为我们开发的分支,master 分支上只记录所有发布的版本。

    我们可以先在本地仓库中创建一个分支(如:develop 分支),并将该分支推送到远程仓库中,作为远程仓库的一个分支。

    1
    2
    提交本地的 develop 分支并作为远程的 develop 分支
    git push origin develop:develop
  5. 分支合并
    当我们在某个分支下提交完代码后,如果想要同步到其它分支上去,就可以进行分支的合并操作。比如:我们在 develop 分支上将代码开发完毕后,需要同步到 master 主分支,这个时候我们可以先切换到 master 主分支上,然后使用 git merge 命令来将 develop 分支上的提交合并到 master 主分支上。
    1
    2
    3
    4
    5
    6
    切换到 master 主分支
    git checkout master

    将 develop 分支合并到 master 分支
    git merge --no-ff -m '提交日志' master
    --no-ff 可选命令,表示禁用 Fast forward 模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
  6. 分支抓取
    如果我们 clone 的远程仓库已经存在多个分支(如:develop 分支),那么默认情况下我们只能看到本地的 master 分支,如果我们想要在 develop 分支上进行开发,就必须在本地再创建一个分支,并如远程仓库的 develop 分支相关联。
    1
    2
    创建一个本地的 develop 分支并与远程的 develop 分支相关联
    git checkout -b develop origin/develop
  7. 分支删除
    当我们不需要某个分支的时候,可以将这个分支删除。需要注意的是,不能够删除当前所处的那个分支。也就是说如果想要删除 a 分支,那么我们首先要切换到其它的分支,可以删除该分支。
    1
    2
    3
    4
    5
    删除本地分支
    git branch -d branchName

    删除远程分支
    git push origin:branchName

    常用命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    创建分支
    git branch branchName

    切换到指定分支
    git checkout branchName

    创建分支,并切换到该分支
    git checkout -b branchName

    创建远程分支(提交本地的某个分支来作为远程的一个分支)
    git push origin

    查看本地分支
    git branch

    查看远程分支
    git branch -r

    分支合并
    git merge --no-ff -m '提交日志' branchName

    删除本地分支
    git branch -d branchName

    删除远程分支
    git push origin:branchName

标签管理

使用流程

  1. 创建标签
    发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
    1
    2
    3
    4
    5
    6
    7
    8
    创建本地标签 1.0.0
    git tag 1.0.0

    推送本地的某个标签来作为远程的一个标签
    git push origin 1.0.0

    推送本地所有的标签来创建对应的远程标签
    git push origin --tags
  2. 查看标签
    我们可以使用 git tag 命令来查看本地已经创建的标签。
    1
    2
    查看本地已经创建的所有标签
    git tag
  3. 删除标签
    我们可以通过 git tag -d 命令来删除我们已经创建过的某个本地标签;如果是想要删除某个远程标签,则可以先在本地把这个标签删除掉,然后再推送到远程仓库就可以了。
    1
    2
    3
    4
    5
    删除本地的 1.0.0 标签
    git tag -d 1.0.0

    删除远程仓库中的 1.0.0 标签
    git push origin :1.0.0

    常用命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    创建本地标签
    git tag tagName

    推送本地的指定标签来作为一个远程标签
    git push origin tagName

    打着本地所有的标签来作为对应的远程标签
    git push origin --tags

    查看标签
    git tag

    删除指定的本地标签
    git tag -d tagName

    删除指定的远程标签
    git push origin :tagName