本月开始接触到Git版本管理工具,觉得很有意思,在这里总结一下学习Git的一些心得体会。

要在Mac上完整的使用git进行版本管理,需要熟悉Mac终端操作命令和Git操作命令两种命令,索性两种命令加在一起也并不是很多,我在这里就一起总结了。

1.Mac终端操作命令

Git在使用中经常要用到Mac目录/文件管理的相关命令,主要包括查找目录/文件,并对目录/文件进行操作(增删查改)两大类别,再细分可分为以下几种小的类别:

(1)目录切换命令

    • $ pwd 显示当前工作目录的路径 (我在哪里
    • $ ls 列出当前目录下文件 (我这里有什么
      • 添加 -l 显示文件详细信息(文件权限 包含文件数等)
      • 添加 -a 显示目录下所有文件 (隐藏文件也会显示)
    • $ cd <file name> 进入工作目录 (向前走
    • $ .. 表示当前目录的上一级目录 (配合命令3,向后退
    • $ cd ~ 进入当前登录账户目录下 (回到起点

(2)目录操作命令

    • $ mkdir <file name> 创建新目录(文件夹)
    • $ rm -rf  <file name>删除文件或目录
    • $ rm -rf*  <file name>强制删除当前目录下所有文件
    • $ mv -f <file name>  target 移动目录或文件
    • $ cp -r <file name> 复制目录或文件

(3)文件操作命令

    • $ touch <file name> 增加文件
    • $ cat <file name> 进入文件
    • $ stat <file name> 查看文件详细信息

(4)系统相关操作

    • $ chmod <file name>更改指定目录或文件权限
    • $ sudo 以root权限执行一次命令
    • $ clear 清屏
    • $ fn command t 新开终端窗口
    • $ ps aux 静态查看进程
    • $ kill 杀死进程
    • $ kill -9 pid 杀死指定进程

2.Git 指令

简单介绍了Mac终端操作命令后,正式开始介绍Git技术,主要从以下几个部分介绍:

  1. 为什么使用Git
  2. 我如何看Git
  3. Git游戏存档
  4. Git游戏存档进化版--Git分支
  5. Git远程仓库

下面开始正文:

(1)为什么使用Git

我的答案是,因为Git优雅,简介,易懂。我之前没有用过SVN似的集中式版本管理工具,所以也无从比较两者的好坏,但是经过一段时间Git的使用,不用通过复制多个文件夹进行版本管理了,需要输入的命令屈指可数,完全满足管理需求,并且当输错时还总是有温馨的提示,而且整个Git大致想一遍也能大致理解其思路,这样用起来更加得心应手。总之Git令我很满意,因此我愿意在这里分享学习使用Git的一些心得和感想。

(2)我如何看Git

这里的“我如何看”是指,我如何理解Git操作,进一步说,是我对Git为什么设置这个功能,为什么这么用的一些小小的思考。

我将Git大致想象为游戏的存档系统,包含存档菜单:盛放存档的容器,存档器:用来存档,读档器:用来读档。仔细想想这三个构建也就是版本管理最核心的功能了吧,这么一想,游戏存档本身就是一个版本控制工具。那么现在问题来了,游戏的存档系统和开发环境中使用的版本控制系统有哪些不同:1.游戏存档信息可视化,2.游戏存档有数量限制,3.游戏存档不存在时间上的连贯性,即你可以同时玩多个角色并为他们分别在不同时期存档。这样想下去,其实有很多地方可以继续深究,但我们先就此打住,先来谈谈Git,我认为Git的核心功能在于以下三个部分:1.Git游戏存档,2.Git游戏存档升级版--Git分支,3.Git远程仓库,下面分别予以说明。

(3)Git游戏存档

因为Git使用起来实在和游戏存档系统太相似了,所以为Git的核心功能暂时取了个这样的名字。不过要详解Git游戏存档的细节,首先要掌握Git的一些基本知识,话不多说,一图胜千言

可以看到,当将一个文档目录(文件夹)设为git仓库时,git会在该目录下添加.git隐藏目录,里面存放git暂存区,分支,HEAD指针等众多重要的git构件,于是我们可以通过git仓库实现文件的版本管理。

Git游戏存档的主要玩法如下:

  1. 建立游戏存档系统:进入目标文件目录,使用命令 $ git init 初始化一个git仓库。
  2. 存档:
    1. $ git add <file name> 将修改文件拖入暂存区
    2. $ git commit -m '<msg>' 将暂存区文件拖入目标分支 (存档)
  3. 查询存档:$ git log 查询存档目录
    1. --pretty = oneline省略存档时间,作者,将存档名和备注整合为一行
  4. 读档:
    1. $ git reset -- hard HEAD^ 回退到上一个存档点
    2. $ git reset -- hard <save id> 读取指定id存档

以上几条命令就是git游戏存档功能的基础功能了,熟练掌握以上6条git操作,就可以实现用git进行游戏存档式版本管理功能。

OK,你现在可以将任何想要用git进行版本管理的目录变成git仓库进行管理(git init),可以通过git add和git commit命令迅速为你此次的改动“存档”,保存一个即时的快照,当你通过git log打开git的“存档目录”时,你可以清楚地看到你的每一次存档时间,存档人,存档id和相应的备注,当你决定要读取某个存档时,立即使用git reset指令加存档的唯一id,大功告成!整个git版本管理逻辑就如游戏存档一般简介明了。

但是,慢着。接下来的一些问题不知道你是否充满疑惑?

  1. 为什么“存档”时要执行两次操作?
  2. 我如何知道存档是否真的保存了?
  3. 我说,那个HEAD是什么?
  4. wow,我发现了一个bug!
  5. 等等,我还没存档,我想重头玩!
  6. 我删除了一些文件,要使用add命令吗?
  7. hey,说真的,存档名真难记。

别着急,我会逐一回答这些问题。

(1)为什么“存档”时要执行两次操作?

你是在说为什么存档在游戏中只用点击一次“存档”,而在git中要先git add一下修改的文件,然后还要git commit提交?这太复杂了,这两步有什么意义对吧。老实说我也刚明白不久,我想原因大概是,由于git会跟踪仓库内文件的"变动",而我们一般工作时,往往一个任务会牵扯众多文件的修改(比如,前端开发中新增一个web功能需要修改相应的HTML,CSS,JAVASCRIPT三个文件),因此一个文件存档一次显然是没有意义的(或者说,太过于浪费了),因此git允许我们将同一个功能的不同文件一个一个放入暂存区,然后统一提交至当前分支(关于分支之后再说),这样存档变得有意义多了,我们哪个功能完成的不好,就读档,修修补补,再提交。所以你应该明白该放入什么文件至暂存区了吧?

(2)我如何知道存档是否真的保存了?

hi,这真是一个好问题,简单的方法是使用刚才提到的git log查询存档目录。但我觉得你想知道的肯定不止这些,通常,我们经常使用$ git status这个指令查看目前工作目录的状态,git会贴心的告诉我们工作区的最新状态(一些文件被删除了?一些陌生的文件被添加进来了?一些文件有一些变动!)你可以清楚地知道你离“保存”还有多远的路要走。而当git告诉你文件有改动的时候,你还可以通过$ git diff指令查看所有文本文档的具体改动是什么。

(3)我说,那个HEAD是什么?

简单说,是一个指针,指向当前分支下最新的那个存档,所以你可以通过git reset --hard HEAD^(^表示上一个)回退到上一个存档点,但是HEAD指针的功用不只如此,实际上之所以git能够在各存档点不断跳转,就是因为git实际上只是在拨弄HEAD指针的缘故,当HEAD指针被拨到倒数第二个存档的位置后,git会隐藏掉HEAD指针之后的所有存档,让你有一种时光倒流的感觉,但是放心,之前的那些存档还在。

(4)wow,我发现了一个bug!

我知道你要说什么,使用git reset -- hard HEAD^^回退到上上一个存档后,再使用git log检查存档发现有两个最近的存档丢失了对吧?放心,我刚才预告过了,他们还在,不过你需要使用一点特别的方式找到他们,使用$ git reflog指令查看命令历史,你会发现每次有关存档的信息都在上面,当然包括每次存档的id!所以如果你真的难以割舍最新的两个存档,读档吧,我保证他们还在!

(5)等等,我还没存档,但我想重头玩!

我知道,这也是在所难免的事情,你add了修改的文件到暂存区,然后你拾起一份新的文件开始修修补补,但最后你却把一切弄得一团糟,怎么办呢,你想。读档吧,可是读档后暂存区的那些已经改好的文件就没有了,别着急,git里总有后悔药吃,此时的你需要$ git checkout -- <file name>指令,这个指令会帮你吧工作区的文件还原至时间上最近的一次提交,要么是暂存区的文件,要么是分支上的。嫌一个个输入文件名太烦?试试$ git checkout .指令如何,他会撤销工作区内所有的变动,当然放入暂存区的文件是安全的。

(6)我删除了一些文件,要使用add命令吗?

当然不,对于删除的文件,如果确定要删除,使用$ git rm <file name>指令。

(7)hey,说真的,存档名真难记!

恩,说实话,是这么回事,git为了避免在多人开发中存档名的重复导致管理混乱,并没有使用简单的序号来编排存档,而是使用一长串无规律的字母数字组成的字符串。但是好在git意识到了复杂存档名不容易被人记忆的问题,开发出了“标签”这个功能。你可以通过$ git tag <tag name>指令为最近的一次存档打上一个标签(PS:你可以同时给一个存档打上多个标签),并可以通过 -a <tag name>指定标签名,通过-m <msg>附加额外的说明文字。这样你可以轻松的通过标签识别出对你而言特别的存档,当然,你也可以通过标签迅速跳回到某个存档。恩 我听到你又开始心里嘀咕,要是想给之前的某个存档打上标签怎么办?答案是使用$ git tag <tag name> <id>的指令,只要在标签名后附加你想要打标签的存档id就可以了。

之后,我们可以通过$ git show <tag name>查看打上标签的存档信息,使用$ git tag -d <tag name>删除标签。

最后再总结一下,为了说明某个存档很“特别”,我们可以为他打上标签,并使用如下指令进行整个标签操作:

打标签:$ git tag <tag name> <id>

读标签:$ git show <tag name>

删除标签:$ git tag -d <tag name>

最后再免费附赠两个指令(别着急,后面我们会提到远程的事情):

推送标签至远程仓库:$ git push origin <tag name>

一次性推送所有标签至远程:$git push origin --tags

删除远程标签:$ git tag -d <tag name> 本地删除)+ $git push origin :refs/tags/<tag name>(远程删除)

不知不觉已经写到这里了,到达这里,你应该已经能够使用git的基本功能进行很酷的版本管理,但是git的功用还远不止如此,我将会在接下来的章节讨论git剩下的两个核心功能。希望你能跟上,bey~

学Git,用Git ①的更多相关文章

  1. 最近学到的Git知识,大厂的Git机制还是很方便的

    本文首发于微信公众号:程序员乔戈里 转载请注明:https://blog.csdn.net/WantFlyDaCheng/article/details/102538508 一.两次的 git com ...

  2. [Git] 还原Git上commit,但是没有push代码

    直接在Idea上操作2步解决: 1. 找到: 2. 在To Commit里面填写:HEAD^,表示将commit的信息还原为上一次的,需要多次直接reset多次即可: 使用命令行:原理一样 以下内容转 ...

  3. 命令行操作svn和git和git

    前几天在写代码的时候电脑突然坏掉,老大交代的任务没完成,非常痛恨自己用svn或者git保存代码,相信很多程序员遇到过,硬盘坏掉,存在硬盘中的代码丢失,无法找回的问题,svn和git可谓程序员界的福音, ...

  4. Git:Git初体验——Git安装配置

    作为即将成为一个程序员的男人,一直在听别人说Git多好多好,之前也随便了解了一些,但是始终没有决心去学会.现在大四了,只有毕设和一门开学六七周只去过一次课的全员必修课外,也没有什么事情做,何不去做这些 ...

  5. 使用Git、Git GUI和TortoiseGit

    1. 关于命令行 我一直建议在命令行中使用Git或者SVN.因为这样可能更加了解他们的工作方式,也不容易遗漏重要的问题和提醒. 在Windows习惯的驱使下,大多数人是不会看弹出的对话框中有什么信息的 ...

  6. git学习——git理解和仓库的创建

    一.git用的3个工作的状态的理解. 1. 工作区 workspace(modified); 2. 暂存区 stage(staged) ; 3. git本地仓库 repository(commited ...

  7. git format-patch & git apply & git clean

    一.打补丁 git format-patch & git apply 最近在工作中遇到打补丁的需求,一来觉得直接传文件有些low(而且我尝试了一下,差点把项目代码毁了) ,二来也是想学习一下, ...

  8. [git]图解git常用命令

    本文图解git中最常用的命令.如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻. 基本用法 约定 命令详解 Diff Commit Checkout Detached HEAD(匿名分支提 ...

  9. Android Studio配置Git及Git文件状态说明

    Android Studio配置Git还是比较简单的,麻烦的是可能中间出现各种问题.如果你想了解或感兴趣,请往下看. 首先你得下载Git客户端,网址:http://git-scm.com/downlo ...

  10. Git Server & Git Hook

    http://ju.outofmemory.cn/entry/16893 我喜欢 github,我现在的个人代码全部是托管在上面了,但是一些公司或者某些项目不适合放入github中,你希望能有一个完全 ...

随机推荐

  1. JS中的call、apply、bind 用法解疑

    JS中的caller  arguments.callee  call  apply  bind方法 一.call()和apply()方法 1.方法定义 call方法: 语法:call([thisObj ...

  2. 20165330 2017-2018-2 《Java程序设计》第3周学习总结

    课本知识总结 第四章 类与对象 类:包括类声明和类体 基本格式: class 类名 { 类体的内容 } 类声明: class+类名(注意:类名首字母需大写) 类体:类声明之后的一对"{&qu ...

  3. Python resources

    我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架.网络 ...

  4. 服务器端Session和客户端Session(和Cookie区别)2

    https://blog.csdn.net/java_faep/article/details/78082802 我们可以得出如下结论: 关闭浏览器,只会是浏览器端内存里的session cookie ...

  5. libtorch 哪些函数比较常用?

    libtorch 加载 pytorch 模块进行预测示例 void mat2tensor(const char * path, torch::Tensor &output) { //读取图片 ...

  6. 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活--hdu2191(多重背包模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 标准的多重背包 题目 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是 ...

  7. python数据分析基础——numpy和matplotlib

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2假如有如下几组体重和身高数据,让求每组数据的BMI值: w ...

  8. generateScriptFile.py脚本使用过程中遇到的问题及解决

    generateScriptFile.py脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- """ use case: p ...

  9. 005-hive概述,计算原理及模型

    计算原理及模型 优化的根本思想: 尽早尽量过滤数据,减少每个阶段的数据量 减少job数 解决数据倾斜问题 Hive概述 名称       hive系统架构 metastore derbymysql   ...

  10. Spring boot 打包瘦身方法

    背景 随着spring boot 的流行.越来越多的来发着选择使用spring boot 来发 web 应用. 不同于传统的 web 应用 需要 war 包来发布应用. spring boot 应用可 ...