git的命令总结

2023-05-16

先把清单列出来git cheat sheet

git 命令总结

  • git的init和git clone
  • git add和git commit 提交二连
  • git checkout 反向操作
  • git reset 回退HEAD指针
  • git revert 同回退HEAD指针
  • git branch 分支操作
  • git checkout 切换分支
  • git status和git log 两个查看状态命令
  • git reflog 查看参考日志
  • git stash 暂存分支进度
  • git push和git pull
  • git rebase
  • git clean 清除未追踪文件

git的init和git clone


两个初始化的时候会用的命令,一般在刚开始项目的时候来进行使用。这里需要说明的是:

  1. git init命令是用于初始化git的仓库,也就是隐藏的那个.git文件,这个使用的情况是什么呢,就是我们要把本地的仓库推到远端,就需要在本地先创建仓库,然后用命令remote add进行远端仓库的连接,这时候我们本地其实有两个分支,分别是master和origin/master(一般在下面命令中都用origin)
git remote add 主机名称(origin) 域名
  1. git clone命令是用于将远端的仓库拉取下来,这个拉取下来是什么情况呢,首先他会把代码和远端的.git文件都拉取下来(会在你的拉去目录下面新建一个整个项目的文件目录,所以不需要先建好主目录再clone),这样其实我们就不需要用init命令了,然后他拉取下来的一定是master分支的一个clone,所以现在你会有一个与远端一样的master分支,然而现在你还有若干个origin的分支(命令默认远端主机为origin),肯定有的是origin/master,还会拉取别的几个最老的分支(太多也不会,我这边试出来是出了master还有四个分支)。
  2. 还有这个origin我一直在强调是默认的,他其实和master一样都是使用习惯,我们同时也可以再用remote add添加其他的远端仓库,其实没什么神秘的就是一个网址而已。(一般用ssh,也可用https和另外一个方式)

git add和git commit 提交二连


这个就不用多说了,git三个区的概念,注意要理解git是记录差异的系统,整个git仓库里面代码就只有一份(好像是这么说的吧)

git checkout 反向操作


这个点就和上面遥相呼应

git checkout -- .
  1. 先说这个,这个是从index/stage(就用stage吧)里面取出来放回工作区的,这里有一个注意的是checkout命令是有切换分支的作用的,所以你必须要把文件加上去,这里"–“就代表stage,”."就代表所有文件。
    还有一个要注意的点就是他取出来的时候是不会关心你新建的文件的,比如你add完之后再创建一个test.c文件,他是不会根据stage里面的情形把test.c删除的,但是你修改了或者删除了文件都会改回去。我估计这是因为新的文件是一个Untracked的状态
git checkout HEAD .
  1. 同上面的命令一样,这个里面的"."也是必不可少的,你要告诉git你是要操作文件才行。这个命令从HEAD指向的分支指向的commit里面取出代码将工作区和stage里面全部还原成同样的结构(注意描述的git结构)

  2. 最后再说一点,经常会有把git checkout回退功能和git reset的功能放在一起比较的说法,有一定的道理。
    因为在git checkoutgit reset的功能上有很相似的地方因为他们都可以移动指针(尽管checkout有那么多功能),但两个命令在移动指针的功能上有一个最大的差别

    • checkout移动的是HEAD指针本身,是为了在不同指向之间进行移动的
    • reset移动的是HEAD指针指向的那个指针,是为了对commit进行抛弃的
  3. 最后再说一点(不好意思),最新版本的git中提倡使用resotre,原因是checkout的功能有点多,其实可以追随一下潮流。

git reset 回退HEAD指针


前面谈到了就直接在这里说,我在这稍微引用一点内容
我也觉得下面这个格式很蠢,想看的直接点链接好了^ _ ^

reset三种模式区别和使用场景
区别:

--hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

--soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

--mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

使用场景:
--hard:(1) 要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;(2) 真的想抛弃目标节点后的所有commit(可能觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)。

--soft:原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files),所以假如我们之前工作目录没有改过任何文件,也没add到暂存区,那么使用reset --soft后,我们可以直接执行 git commit 將 index暂存区中的內容提交至 repository 中。为什么要这样呢?这样做的使用场景是:假如我们想合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录(可能是阶段性地频繁提交,就是开发一个功能的时候,改或者增加一个文件的时候就commit,这样做导致一个完整的功能可能会好多个commit点,这时假如你需要把这些commit整合成一个commit的时候)時,可以考虑使用reset --soft来让 commit 演进线图较为清晰。总而言之,可以使用--soft合并commit节点。

--mixed(默认):(1)使用完reset --mixed后,我們可以直接执行 git add 将這些改变果的文件內容加入 index 暂存区中,再执行 git commit 将 Index暂存区 中的內容提交至Repository中,这样一样可以达到合并commit节点的效果(与上面--soft合并commit节点差不多,只是多了git add添加到暂存区的操作);(2)移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEAD 来 Unstage 所有已列入 Index暂存区 的待提交的文件。(有时候发现add错文件到暂存区,就可以使用命令)。(3)commit提交某些错误代码,或者没有必要的文件也被commit上去,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。

基本已经讲的很通透了这里,所以我们这里要说的是如果我们用命令

git reset HEAD

会实现什么效果?默认为mixed模式,本身HEAD指针是不调整的,然而最近一次commit的内容被更新到了stage里面,工作区没有任何变动,是不是和上面的两个checkout加在一块感觉是完整的一套操作。但是不是的,只是这三个功能正好互补了而已,要明白这里面的本质思路。

git revert 同回退HEAD指针


顺带一提这里有一个git revert操作,和git reset操作一样是用来调整HEAD指针的,不过提交结构是不同的,上面的是舍弃提交将指针向前一动,而这个是复制一份前面的提交指针向后移动。这个操作方便取消自己的回退,而git reset想取消就得用git reflog来查找自己舍弃的commit的id号来进行回撤。

git branch 分支操作


  1. 什么都不加,查看本地分支和现在所在的分支
  2. 直接加一个名字,创建一个以此为名的分支
  3. 参数-D加名字,删除以此为名的分支
  4. 参数-a,查看所有分支(本地和远程)
  5. 参数-r,查看远程分支
  6. 参数-v,查看本地所有分支上一次commit信息,可附加-a查看远程
  7. 参数-vv,查看本地所有分支与远程分支关联信息(这个在建立分支时很重要)。可附带-a但远程分支因为没有关联远程分支,只有上一次提交信息

git checkout 切换分支


  1. 加上一个名字,切换到对应名字的分支,没有报错
  2. 参数-b加名字,创建一个以此为名的分支并切换到他
  3. 加上一个名字,如果这个名字对应origin里面的一个分支,那么会自动创建本地的同名分支并同步origin中的内容。这个操作在实际下拉别人分支时使用。

这里想说一下,在分支切换的时候我们是要保证自己的git当前分支是干净的(git status命令)。因为我们在这个工作情景下就不需要考虑三个区交互的情况,用这个命令的时候我们一定是在这个分支上面开发完成了之后在考虑分支之间的交互,如果要在这里再考虑三个区交互就太过多余,根本不符合程序开发的精神。
这里有什么启示,我们程序的规则都是人来制定的,而不是现已存在的自然规律,我们开发的时候目标是为了实用而不是为了完整的逻辑链,因而在学习和掌握程序规则的时候要有明确的场景观念和目的观念,只有在这种思维之下才能更好更快地进行掌握。

git status和git log 两个查看状态命令


  1. git status查看当前分支状态
  2. git log查看提交记录
  • 这两个敲上去看就完事了,注意git status只能显示当前分支的状态,git log不加参数显示当前分支提交记录,可以加分支名来显示其他分支的提交记录。

git log 常用参数

  1. 参数 --pretty=oneline,将每个commit信息展示在一行
  2. 参数 --abbrev-commit,将每个commit的哈希值只显示固定的前几位
  3. git log还可以用简单的形式去加参数,常用的有 :
    1. 参数 --oneline显示为单行信息
    2. 参数 --graph显示树形结构
    3. 参数 --all显示所有的分支信息,和前两条合用效果极好看。
    4. 参数 --stat和 -p显示提交的改动记录,前者主要显示文件的增减,后者以diff形式显示文件的具体增加删除。
    5. 参数 --decorate会在输出的同时显示关联引用(比如分支,tag之类的信息)(这个感觉不太清楚怎么用)。

git reflog 查看参考日志


  1. reflog:Reference logs(参考日志)
    git reflog可以显示可引用的历史版本记录,所有的HEAD指针改动操作会被他记录下来,常用于处理误操作之后进行的commit回退等。
  2. 注意这个reflog并不是Git仓库的一部分,而是本地所特有的,他记录了你从建立仓库以来的所有操作以供参考。
  3. 能引起指针变化的操作总结
git checkout branchName:切换分支 。
git commit:提交。
git reset commit:重置。
git checkout commit:签出某一个提交。
git merge:合并操作。
git rebase:基变。
git pull:相当于 fetch + merge 。
git pull : Fast-forward:没有冲突,快速前进。
git pull --rebase:相当于fetch + rebase。
git clone:初始化ref 。
  1. 具体用法参考

git stash 暂存分支进度


前面有说,当我们切换分支的时候一定要确保分支上面是干净的,但是如果我们有一个不相关的任务需要切换到别的分支上面工作,而现下工作又只进行了一半怎么办呢。可行的方法是现在直接来一个commit然后在别处工作,但是当你回到工作现场的时候就会有一个无用commit,强迫症想要整理他还得花些功夫,这对于我们来说太不优雅。于是我们就有了这样一个命令来进行分支上面的暂存现在已经完成的进度,先让他变成一个干净的分支,之后回来的时候再用list,apply,drop,pop(都是在git stash下的操作)等一系列操作进行恢复。

  1. git stash直接暂存当前分支修改。
  2. git stash list列出当前暂存的内容及暂存时的message。
  3. git stash save “message” 暂存内容的同时进行内容编辑。
  4. git stash pop弹出暂存栈(后进先出)最上层内容并与当前分支合并。
  5. git stash apply保留暂存栈不变并取出最上层内容与当前分支合并,可以加暂存内容名称来使用指定的暂存内容。
  6. git stash drop + 暂存内容名称,删除特定暂存内容。
  7. git stash clear清空暂存内容。
  8. git stash show展示当前工作区与暂存栈顶内容的差异。

git push和git pull


git rebase


git clean 清除未追踪文件


这个操作在实际中我们经常对一个分支修修补补,结果要更新到大佬提交的东西,自己写的垃圾都是报废的。这时我们需要的其实是上面的git checkout回退功能。但有一个很大的问题,对于我们自己新创建的文件和文件夹,git管理中心有一种叫untrack的状态,他对于你无论是暂存区还是工作区的操作都是不参与的,即你git checkout HEAD .了所有改动,又git pull了所有更新,untrack依旧在那里,不增不减。这其实是一个非常好的特性,用起来很方便。不过既然是特性就要有相应的操控手段,如果你不想要这些untrack的文件又因为体量太大不好一个一个删除,git clean就是你无二的选择了。

  1. git clean的基本功能是清除当前文件夹下的untrack文件,但是在使用的时候需要搭配参数进行。
  2. -n 这是最先需要使用的,他表示不进行真正的删除列出所要删除的文件与文件夹,一定要先进行确认再删除。
  3. -d 表示除文件之外的文件夹也要删除,注意如果没有这个选项,只会删除单独新建的文件,对于单独新建的文件夹中的文件是不进行删除的。
  4. -f 表示强制执行,即只要没有-n那么就直接全删不进行确认。(常用)
  5. -i 与上相对,表示进行交互界面删除。(不常用)
  6. -x 连 gitignore 的untrack 文件/目录也一起删掉 (慎用也就是不用,一般这个是用来删掉编译出来的 .o之类的文件用的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git的命令总结 的相关文章

  • Orb_slam3 ROS ,D435i使用,ubuntu编译小记

    C 43 43 版本编译 先官网下载代码 xff0c 并下载安装官网所述安装包 git clone https github com UZ SLAMLab ORB SLAM3 git ORB SLAM3 下载完编译c 43 43 版本 cd
  • d455双目相机联合IMU标定

    感谢这两位博主的优秀文章 xff1a RealSense D455的标定并运行VINS FUSION Z Jin16的博客 CSDN博客 d455 标定 Realsense D435I标定 小岛 神酱的博客 CSDN博客 d435i参数 主
  • gitee发布示例

    简易的命令行入门教程 Git 全局设置 git config global user name 34 bnb 34 git config global user email 34 2207201665 64 qq com 34 创建 git
  • linux终端快捷指令创建

    使用这个打开gedit bashrc xff0c 把下面的按照下面的格式书写 xff1a alias lt 想要的快捷键 gt 61 操作指令 示例 xff1a alias sd 61 39 source devel setup sh 39
  • 使用vscode做得基础配置自动保存格式化

    vscode默认启用了根据文件类型自动设置tabsize的选项 34 editor detectIndentation 34 false 重新设定tabsize 34 editor tabSize 34 2 每次保存的时候自动格式化 34
  • OOQP 使用教程 c++

    最近学习了一下OOQP的使用在这里记录一下 在matlab代码中是quadprog xff0c 而这次使用OOQP也主要是为了计算二次规划问题 安装OOQP 首先是安装问题 xff0c 不得不说 xff0c 当时安装也花了不少时间 xff0
  • 物联网工程 | CAN(Controller Area Network)控制器局域网络答疑

    文章目录 概述一 CAN的物理设备二 CAN的物理传输三 CAN的多设备连接四 CAN编程 概述 本节以问答方式讲述CAN相关的一些疑点问题 一 CAN的物理设备 问 xff1a CAN需要什么样的物理设备支持才能算一个CAN网络 系统 x
  • 【无标题】

    前言 对于喜欢逛CSDN的人来说 xff0c 看别人的博客确实能够对自己有不小的提高 xff0c 有时候看到特别好的博客想转载下载 xff0c 但是不能一个字一个字的敲了 xff0c 这时候我们就想快速转载别人的博客 xff0c 把别人的博
  • VSCode中针对C语言的代码格式化配置

    默认格式化工具 打开设置 Ctrl 43 xff0c 选择 用户 配置 xff0c 找到 文本编辑器 Default Formatter xff1a 安装了C C 43 43 插件后 xff0c 即可选择 xff1a C C 43 43 m
  • 总结的常用的前端开发中的常见套路之购物车页面

    1 商品的全选和全不选 获取页面中全选框所在的input xff0c 绑定其变change事件获取全选框的状态遍历获取商品对应的CheckBox xff0c 设置其选中状态和全选的保持一致同时 xff0c 当全选框状态发生变化时 xff0c
  • restframework权限,认证,限流配置

    认证Authentication DRF框架的默认全局认证方案如下 REST FRAMEWORK 61 39 DEFAULT AUTHENTICATION CLASSES 39 39 rest framework authenticatio
  • seek()方法的使用

    seek xff08 xff09 方法的使用 seek 方法用于移动文件读取指针到指定位置 file seek 方法标准格式是 xff1a file seek offset whence offset xff1a 开始的偏移量 xff0c
  • 为什么QQ用的是UDP协议而不是TCP协议?

    QQ既有UDP也有TCP xff01 不管UDP还是TCP xff0c 最终登陆成功之后 xff0c QQ都会有一个TCP连接来保持在线状态 这个TCP连接的远程端口一般是80 xff0c 采用UDP方式登陆的时候 xff0c 端口是800
  • 五分钟读懂TCP 协议——TCP协议简介

    TCP 是互联网核心协议之一 xff0c 本文介绍它的基础知识 一 TCP 协议的作用 互联网由一整套协议构成 TCP 只是其中的一层 xff0c 有着自己的分工 xff08 图片说明 xff1a TCP 是以太网协议和 IP 协议的上层协
  • JSON模块基本使用

    usr bin python3 coding utf 8 import json json loads 把json字符串转成 python 对象 json string 61 39 39 39 34 a 34 34 x 34 34 b 34
  • c语言中return的各种用法 建议收藏

    按初学的理解 xff0c return的任务就是返回对应的参数 xff0c 在外层函数中对这个参数做进一步处理 实际上return的用法不只这些 为调用的函数返回参数值 此类应用最为普遍 xff0c 通常是在一个具有返回值的函数中 xff0
  • chatgpt的原理 第一部分

    前言 这两天 xff0c ChatGPT模型真可谓称得上是狂拽酷炫D炸天的存在了 一度登上了CSDN热搜 xff0c 这对科技类话题是非常难的存在 不光是做人工智能 机器学习的人关注 xff0c 而是大量的各行各业从业人员都来关注这个模型
  • 自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第一部分

    我是去年9月22日才正式学习Java的 xff0c 因为在国营单位工作了4年 xff0c 在天津一个月工资只有5000块 xff0c 而且看不到任何晋升的希望 xff0c 如果想要往上走 xff0c 那背后就一定要有关系才行 而且国营单位的
  • 自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第二部分

    我的学习心得 xff0c 我认为能不能自学成功的要素有两点 第一点就是自身的问题 xff0c 虽然想要转行学习Java的人很多 xff0c 但是非常强烈的想要转行学好的人是小部分 而大部分人只是抱着试试的心态来学习Java xff0c 这是
  • 深入理解任务堆栈以及堆栈溢出

    前言 xff1a 在多任务操作系统中创建任务时 xff0c 都需要指定该任务的堆栈大小 xff0c 那么这个堆栈的作用时什么呢 xff1f 什么情况下需要用到堆栈 xff0c 以及大小不够时会产生什么异常呢 xff1f 1 任务状态 简单分

随机推荐

  • 计算机网络的166个概念你知道几个 第四部分

    HTML xff1a HTML 称为超文本标记语言 xff0c 是一种标识性的语言 它包括一系列标签 xff0e 通过这些标签可以将网络上的文档格式统一 xff0c 使分散的 Internet 资源连接为一个逻辑整体 HTML 文本是由 H
  • 15000 字的 SQL 语句大全 第一部分

    一 基础 1 说明 xff1a 创建数据库CREATE DATABASE database name 2 说明 xff1a 删除数据库drop database dbname 3 说明 xff1a 备份sql server 创建 备份数据的
  • 毕业设计源码基于springboot的旧物置换系统的实现

    摘 要 随着时代在一步一步在进步 xff0c 旧物也成人们的烦恼 xff0c 许多平台网站都在推广自已的产品像天猫 咸鱼 京东 所以开发出一套关于旧物置换网站成为必需 旧物置换网站主要是借助计算机 xff0c 通过对用户进行管理 为减少管理
  • 毕业设计源码基于Spring Boot的论坛管理系统的实现

    摘要 xff1a 在社会快速发展的影响下 xff0c 论坛管理系统 继续发展 xff0c 使 论坛管理系统 的管理和运营比过去十年更加 信息化 依照这一现实为基础 xff0c 设计一个快捷而又方便的网上 论坛管理系统 是一项十分重要并且有价
  • 毕业设计源码基于Spring Boot的旅游管理系统的实现

    摘 要 社会的发展和科学技术的进步 xff0c 互联网技术越来越受欢迎 网络计算机的 交易 方式逐渐受到广大人民群众的喜爱 xff0c 也逐渐进入了每个 用户 的使用 互联网具有便利性 xff0c 速度快 xff0c 效率高 xff0c 成
  • 轮询、中断和DMA三种方式的原理和联系

    CPU控制外部设备的方式 xff1a 中断 轮询 DMA 轮询中断DMA 由于外部设备的速度差异 xff0c CPU可以使用不同的方式控制外部设备的访问 常见的方式轮询 中断和DMA 轮询 轮询最简单 xff0c CPU通过不断地查询某个外
  • OpenMV识别色块与STM2F4通过串口通信

    花了三天时间学习了一下OpenMV的简单使用 xff0c 在这写个博客记录一下 xff0c 并且上传自己的代码 xff0c 以方便交流学习 第一次发帖 xff0c 不周之处见谅 首先概括一下我实现的功能 xff1a OpenMV识别红色色块
  • c++语言简单提问

    1 定义一个空的类型 xff0c 里面没有任何成员变量和成员函数 对该类型求sizeof xff0c 得到的结果是 1 2 为什么不是0 空类型的实例中不包含任何信息 xff0c 本来求sizeof应该是0 xff0c 但是当我们声名该类型
  • 二 ROS通信机制-话题通信(发布订阅模式)

    二 ROS通信机制 话题通信 发布订阅模式 ROS 中的基本通信机制2 1话题通信 发布订阅模式 2 1 1概念2 1 2作用2 1 3 理论模型2 1 4 话题通信应用时需要关注的地方 xff1a 3 简单实现3 1ROS工作空间建立 x
  • 解决ROS中运行launch文件报错ERROR: cannot launch node of type[xxx/xxx]:xxx的问题

    解决ROS中运行launch文件报错ERROR cannot launch node of type xxx xxx xxx的问题 错误截图 xff1a 原因 xff1a 解决方式 xff1a 当时我出现的错误是 ERROR cannot
  • c++ stl 五种迭代器

    c 43 43 stl 五种迭代器 2010 12 31 14 22 25 分类 xff1a C 43 43 C 举报 字号 订阅 下载LOFTER 我的照片书 迭代器的分类 Iterator Categories I
  • C语言头文件中定义变量问题(转)

    上个星期回学校的时候 xff0c 刚好碰到一个学弟在写程序 xff0c 并且刚好碰到一个总编不过去的问题 xff0c 我看了看 xff0c 正好是个头文件重复包含问题 xff0c 问题描述如下 xff1a 他在程序中建立了一个global
  • Opencv Aruco识别(python)

    效果图 先上效果 代码 直接上代码 xff1a span class token operator span span class token operator span usr span class token operator span
  • Windows下Cmake安装步骤详解(图文)

    文章目录 Cmake介绍Cmake下载及安装 Cmake介绍 CMake是一个跨平台的安装 xff08 编译 xff09 工具 xff0c 可以用简单的语句来描述所有平台的安装 编译过程 xff0c 并且输出对应的makefile或者pro
  • C语言:通过指针模拟实现strcat函数

    模拟实现strcat strcat函数的功能 把src所指向的字符串 xff08 包括 0 xff09 复制到dest所指向的字符串后面 xff08 删除dest原来末尾的 0 xff09 要保证dest足够长 xff0c 以容纳被复制进来
  • C语言中将字符串拆分再进行拼接

    我们有时候需要对于字符串进行操作 xff0c 主要用到strcat和strtok两个函数 xff0c 因此记录下这次的操作方式以便之后查阅 span class token macro property span class token d
  • 并行编程实现矩阵乘法优化

    实现四种矩阵乘法程序 xff0c 并对比运行效率 1 xff09 串行算法 2 xff09 Catch优化 3 xff09 SSE版本 4 xff09 分片策略 span class token macro property span cl
  • c++的函数reserve()和unique()和sort()

    函数reserve span class token comment vector reserve span span class token macro property span class token directive keywor
  • 关于c中代码加 ‘\‘ 进行换行的说明

    我们在c与c 43 43 中经常会遇到一种情况就是加 进行换行来保持代码整体结构一致的使用情况 xff0c 那么具体来说换行的规则是什么 xff0c 这里进行一下记录 span class token macro property span
  • git的命令总结

    先把清单列出来git cheat sheet git 命令总结 git的init和git clonegit add和git commit 提交二连git checkout 反向操作git reset 回退HEAD指针git revert 同