git 使用方法

本贴最后更新于 2770 天前,其中的信息可能已经时移世异

git 介绍

Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

git 架构

git 由三部分组成:

  • 工作区:用户工作目录

  • 暂存区 index:用户提交的工作文档暂存于此

  • 对象库 object:用户执行 commit 操作之后的文件会进入对象库。对象库中的文件可以随时进行版本回滚。
    git 工作原理:
    首先执行 git 初始化,然后会在用户目录生成一个.git 目录,其中记录的是 index 区,object 区,hook 等各种信息。当用户在工作目录编辑文档之后可以执行 git add 把文档记录到 index 区域,然后再通过 git commit 操作把 index 区域的文件同步到 object 区域,并且可以指定一个注释信息作为版本注释信息。object 中的文件是以 sha 算法进行单向加密的 hash 值,以文件名和大小等信息为 hash 计算的依据。其中前两位为目录名,后面为文件名:

    在 object 中有 HEAD 的概念,HEAD 是一个指针,永远指向当前最新的一个 commit 版本。git 实现版本的回滚就是利用 head 实现的。当需要回滚到以前的版本的时候 HEAD 会指向用户指定的版本。
    git 原理图:

    git 使用方法

    提交文件
    git add filename:用于把文件提交到 index 区域
    git commit :用户提交 index 的文件到 object 区域
    例子:

    git init develop #创建一个develop的工作区,其中有.git目录# cd develop cp /etc/passwd /. #拷贝/etc/passwd文件到当前工作区# git status #查看当前git状态,会提示有文件需要add进行提交或者执行git rm进行删除# git add . #提交当前工作区所有文件到index# git commit -m ‘v0.1’ #提交文件到object区域,并注释为v0.1#

    此时进入.git 目录的 object 目录会看到已经多了一个文件,即刚提交的文件。
    可以对文件进行多次修改,修改完成之后再次按照以上步骤提交,然后可以进行版本回滚
    版本回滚:
    git reset --hard :将 head 指向改定的提交,index 的快照内容也更改为指定提交,工作区文件变为指定版本
    git reset --soft:head 指向给定的提交,index 和工作区不受影响
    git reste --mixed:head 指向给定的提交,index 的快照也恢复到指定版本,但是工作区内容不变

    git log --graph --pretty=oneline #查看所有的历史提交版本# git reset --hard ***:恢复到指定的版本,***表示可以为commit值,也可以为tag或者文件名,也可以通过相对路径表示#

    此时就可以恢复到以前的版本,但是有一个问题,如果想从以前版本再恢复到最新版本发现 git log 已经找不到最新的 commit 信息了,这是因为当前状态还没有 commit,不过也可以恢复,需要使用 git reflog 查看最新的 commit 信息,git reflog 会列出在 git 执行的所有操作。
    git 相对路径表示法
    HEAD^1:表示恢复到上一个提交版本
    HEAD^2:表示恢复到上两个提交版本
    HEAD~10:表示恢复到上 10 个版本

    git 多分支

    git 可以指定多个分支同时工作,比如开发工作中 master 分支通常是用于稳定版本的发布,通常还会有 develop 开发分支。通常在 develop 分支进行开发工作,开发完成之后会把 develop 分支工作的内容合并到 master 分支中去。
    git branch:列出当前的分支数目和当前使用的分支
    git branch 分支名:创建新分支
    git checkout 分支名:切换分支

    git 分支合并

    git 分支有两种合并方式,一个为 merge,一种为 rebase。
    merge 表示把指定分支合并到另一个分支,此时两个分支的内容会合二为一,不过如果分支过多会导致分支过复杂。
    rebase 表示把指定分支无缝合并到另一分支,分支变化的内容会以 pack 文件的方式存在,pack 存放的是多个分支不同的内容。从下图可以看到 rebase 会更加明晰。

    git 合并分支一般会自动完成,不过如果主分支和另一分支对一个文件同时进行了修改操作,则需要手动解决冲突再合并。合并之前需要两个分支都 commit 工作。

    #merge操作# git checkout master git merge develop #合并develop到master git add . #合并完成需要重新提交 git commit #rebase操作# git checkout master git rebase develop git add. git commit

    分布式 git 版本控制系统

    有多种方法可以实现此功能,比如可以采用 github 或者公司自建 gitlab 等。
    常用命令:
    git clone 分支名:克隆远程分支到本地
    git remote:显示所有的远程分支
    git push:推送当前修改的工作内容到远程分支
    git pull:将远程分支内容取下来然后和本地进行合并
    git fetch:取回远程服务器的更新
    git 本地和远程服务器的传输可以通过多种方法

  • http 或 https 协议:可以进行远程下载,但是无法做到上传

  • ssh:可以进行远程下载上传

  • git 协议:由 git-daemon 程序提供,监听在 tcp 的 9418 端口;仅支持“读”操作,无任何认证功能;
    gitlab 和 github 都支持 http 和 ssh 两种方式。

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    951 引用 • 943 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    199 引用 • 541 回帖 • 1 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    951 引用 • 943 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    36 引用 • 155 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 393 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 413 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 87 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 2 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 545 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 226 回帖 • 135 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 731 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 168 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 45 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    132 引用 • 796 回帖 • 1 关注
  • 倾城之链
    23 引用 • 66 回帖 • 158 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖
  • 叶归
    5 引用 • 16 回帖 • 10 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 20 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 568 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 2 关注
  • 自由行
    1 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖