Git初步

Posted 橘猫吃不胖~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git初步相关的知识,希望对你有一定的参考价值。

Git初步

1 Git是什么

  • Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  • Git 与常用的版本控制工具 CVS,Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

2 SVN与Git的最主要的区别

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等

  1. Git 是分布式的,SVN 不是。这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
  2. Git 把内容按元数据方式存储,而 SVN 是按文件。所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
  3. Git 分支和 SVN 的分支不同。分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
  4. Git 没有一个全局的版本号,而 SVN 有。目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
  5. Git 的内容完整性要优于 SVN。Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

3 Git 工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

4 Git 工作区、暂存区和版本库

  1. 工作区:就是你在电脑里能看到的目录。
  2. 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  3. 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

工作区、版本库中的暂存区和版本库之间的关系如图:

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。
  • 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中
  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行 git rm --cached <file> 命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行 git checkout . 或者 git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
  • 当执行 git checkout . 或者 git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

5 Git 安装配置(Windows 平台上安装)

安装包下载地址:https://gitforwindows.org/
国内镜像地址:https://npm.taobao.org/mirrors/git-for-windows/

完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。

在开始菜单里找到"Git"->“Git Bash”,会弹出 Git 命令窗口,可以在该窗口进行 Git 操作。

设置Git系统标识:填写用户名和邮箱

git config --global user.name "用户名"

 git config --global user.email "邮箱"


注意:git config --global 参数,有了这个参数,表示这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定的不同的用户名和邮箱。

6 基本操作

6.1 创建版本库(仓库)

版本库就是“仓库”,英文名repository,可以理解为一个目录,这个目录里面的所有文件都可以被Git管理,文件的修改,删除Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。

例如:在我的电脑E盘下创建目录git_s,作为本地仓库

常用命令介绍:

cd       # 进入某个目录
dir      # 显示当前文件夹下的目录和文件
mkdir    # 创建一个文件夹
pwd      # 显示当前的目录路径

6.2 添加文件到版本库

要添加文件到版本库,首先需要将这个目录变为git可以管理的仓库,进入需要管理的目录,执行以下命令:

git init


这时候当前目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,不能随意修改目录里面的文件,否则,会破坏git仓库。

注意:所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从1kb变成2kb,但是具体改了什么,版本控制也不知道。

示例:在E:\\git_s目录下创建readme.txt文件,内容为:橘猫吃不胖。将创建的文件添加到暂存区,然后提交到仓库,命令如下:

git add 文件名    #将文件提交到暂存区
git add .    #将本地修改过的文件且已经追踪的文件添加到本地的暂存区
git commit -m '注释内容'   #将暂存区文件提交到仓库(单引号内为注释)

6.3 检查是否有未提交的文件

git status # 检查当前文件状态

6.4 检查文件是否被修改

修改readme.txt的文件,在文件中加入一行:今天天气真好;然后重新检查状态:

修改文件后,通过命令git status发现,文件已经被修改,但是未提交,如果要检查文件修改了什么内容,可以通过以下命令查看:

git diff  # 查看文件修改的内容


检查无误后,继续提交修改后的文件,与上面命令相同,或者使用以下命令。

git commit -am '字符串'    # -a表示add,提交已经追踪过且修改了的文件


6.5 查看历史变更记录

git log    # 获得历史修改记录

git log --pretty=oneline    # 使记录只显示主要的内容,一行显示

6.6 版本回退

cat 文件名    # 查看文件内容

git reset --hard HEAD^    # 回退到上一个版本


可以看到内容已经回退到上一个版本,通过git log查看修改记录,发现最近的一次的记录已经看不到了。

如果想回到最新的版本,可以通过如下命令进行回退:

git reflog    # 获取历史版本号
git reset --hard 版本号    # 回退到该版本号对应的版本

如果要回退到上上个版本,可以使用git reset --hard HEAD^^命令,但是这样稍显麻烦,如果回退到100个版本之前,只需要执行这个命令即可:git reset --hard HEAD~100

以上是关于Git初步的主要内容,如果未能解决你的问题,请参考以下文章

动态规划初步--城市里的间谍

Git初步

04_Git杀手锏(分支)

Git 初步学习

git 初步

git初步研究2