你再不学Git就来不及了!!!

简介: 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。除了项目源代码,你可以对任何类型的文件进行版本控制。

  其他系列文章导航

设计模式合集

多线程合集

分布式合集

ES合集


文章目录

其他系列文章导航

文章目录

前言

版本控制

什么是版本控制

为什么要版本控制

一、认识 Git

1.1Git 简史

1.2Git 与其他版本管理系统的主要区别

1.3Git 的三种状态

二、Git 使用快速入门

2.1获取 Git 仓库

2.2记录每次更新到仓库

2.3推送改动到远程仓库

2.4远程仓库的移除与重命名

2.5查看提交历史

2.6撤销操作

2.7分支


前言

版本控制

什么是版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。

为什么要版本控制

有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。


一、认识 Git

1.1Git 简史

Linux 内核项目组当时使用分布式版本控制系统 BitKeeper 来管理和维护代码。但是,后来开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统,而且对新的版本控制系统做了很多改进。

1.2Git 与其他版本管理系统的主要区别

Git 在保存和对待各种信息的时候与其它版本控制系统有很大差异,尽管操作起来的命令形式非常相近,理解这些差异将有助于防止你使用中的困惑。

下面我们主要说一个关于 Git 与其他版本管理系统的主要差别:对待数据的方式

Git 采用的是直接记录快照的方式,而非差异比较。我后面会详细介绍这两种方式的差别。

大部分版本控制系统(CVS、Subversion、Perforce、Bazaar 等等)都是以文件变更列表的方式存储信息,这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。

具体原理如下图所示,理解起来其实很简单,每当我们提交更新一个文件之后,系统都会记录这个文件做了哪些更新,以增量符号 Δ(Delta)表示。

image.gif编辑

我们怎样才能得到一个文件的最终版本呢?

很简单,高中数学的基本知识,我们只需要将这些原文件和这些增加进行相加就行了。

这种方式有什么问题呢?

比如我们的增量特别特别多的话,如果我们要得到最终的文件是不是会耗费时间和性能。

Git 不按照以上方式对待或保存数据。 反之,Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流

image.gif编辑

1.3Git 的三种状态

Git 有三种状态,你的文件可能处于其中之一:

    1. 已提交(committed):数据已经安全的保存在本地数据库中。
    2. 已修改(modified):已修改表示修改了文件,但还没保存到数据库中。
    3. 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

    由此引入 Git 项目的三个工作区域的概念:Git 仓库(.git directory)工作目录(Working Directory) 以及 暂存区域(Staging Area)

    image.gif编辑

    基本的 Git 工作流程如下:

      1. 在工作目录中修改文件。
      2. 暂存文件,将文件的快照放入暂存区域。
      3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

      二、Git 使用快速入门

      2.1获取 Git 仓库

      有两种取得 Git 项目仓库的方法。

        1. 在现有目录中初始化仓库: 进入项目目录运行 git init 命令,该命令将创建一个名为 .git 的子目录。
        2. 从一个服务器克隆一个现有的 Git 仓库: git clone [url] 自定义本地仓库的名字: git clone [url] directoryname

        2.2记录每次更新到仓库

          1. 检测当前文件状态 : git status
          2. 提出更改(把它们添加到暂存区):git add filename (针对特定文件)、git add *(所有文件)、git add *.txt(支持通配符,所有 .txt 文件)
          3. 忽略文件.gitignore 文件
          4. 提交更新:git commit -m "代码提交信息" (每次准备提交前,先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit
          5. 跳过使用暂存区域更新的方式 : git commit -a -m "代码提交信息"git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。
          6. 移除文件git rm filename (从暂存区域移除,然后提交。)
          7. 对文件重命名git mv README.md README(这个命令相当于mv README.md READMEgit rm README.mdgit add README 这三条命令的集合)

          2.3推送改动到远程仓库

            • 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:git remote add origin <server> ,比如我们要让本地的一个仓库和 GitHub 上创建的一个仓库关联可以这样git remote add origin https://github.com/Snailclimb/test.git
            • 将这些改动提交到远端仓库:git push origin master (可以把 master 换成你想要推送的任何分支)
              如此你就能够将你的改动推送到所添加的服务器上去了。

            2.4远程仓库的移除与重命名

              • 将 test 重命名为 test1:git remote rename test test1
              • 移除远程仓库 test1:git remote rm test1

              2.5查看提交历史

              在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令。git log 会按提交时间列出所有的更新,最近的更新排在最上面。

              可以添加一些参数来查看自己希望看到的内容:

              只看某个人的提交记录:

              git log --author=bob

              image.gif

              2.6撤销操作

              有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交:

              git commit --amend

              image.gif

              取消暂存的文件

              git reset filename

              image.gif

              撤消对文件的修改:

              git checkout -- filename

              image.gif

              假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:

              git fetch origin
              git reset --hard origin/master

              image.gif

              2.7分支

              分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认”的分支。在其他分支上进行开发,完成后再将它们合并到主分支上。

              我们通常在开发新功能、修复一个紧急 bug 等等时候会选择创建分支。单分支开发好还是多分支开发好,还是要看具体场景来说。

              创建一个名字叫做 test 的分支

              git branch test

              image.gif

              切换当前分支到 test(当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样)

              git checkout test

              image.gif

              你也可以直接这样创建分支并切换过去(上面两条命令的合写)

              git checkout -b feature_x

              image.gif

              切换到主分支

              git checkout master

              image.gif

              合并分支(可能会有冲突)

              git merge test

              image.gif

              把新建的分支删掉

              git branch -d feature_x

              image.gif

              将分支推送到远端仓库(推送成功后其他人可见):

              git push origin

              image.gif

              目录
              相关文章
              |
              安全 Linux 开发工具
              狂神聊Git~
              狂神聊Git~
              |
              2月前
              |
              SQL 缓存 测试技术
              代码管理工具之GIT:重新温习一下
              代码管理工具之GIT:重新温习一下
              |
              6月前
              |
              数据可视化 Linux 开发工具
              git葵花宝典,GitLabWeb
              git葵花宝典,GitLabWeb
              22 0
              |
              缓存 Linux 网络安全
              《游戏测试》git培训(上)
              《游戏测试》git培训(上)
              《游戏测试》git培训(上)
              |
              Unix Linux 开发工具
              |
              安全 开发工具 git
              Git奇幻之旅二
              今天我要给你讲一个关于Git的故事,希望你能从中学到一些常用的命令!
              |
              安全 程序员 开发工具
              Git奇幻之旅一
              今天我要给你讲一个关于Git的故事,希望你能从中学到一些常用的命令。
              |
              机器学习/深度学习 存储 开发工具
              git奇技淫巧
              git奇技淫巧
              88 0
              |
              存储 前端开发 网络安全
              Git 的奇技淫巧
              Git 是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回来的。而 “版本管理工具” 能记录每次的修改,只要提交到版本仓库,你就可以找到之前任何时刻的状态(文本状态)。
              124 0
              |
              算法 程序员 开发工具
              Git学习笔记(一)初遇
              Git学习笔记(一)初遇
              Git学习笔记(一)初遇