大家好,今天我们来介绍git当中一项非常重要的功能——交互式工具

有的时候如果我们要处理的文件很多,使用git add .等操作会非常有隐患,因为很有可能我们一不小心就疏忽了一些内容。如果我们使用一个文件名一个文件名地填写呢,又非常地复杂,体验并不好。所以呢git当中还提供了第三种方法,也就是今天要介绍的内容——交互式工具。

交互式暂存

交互式暂存的命令非常简单,其实就是一个参数,-i。这里的i表示的是interactive,也就是交互的意思。当我们执行这个命令之后,git会进入一个交互式的终端。这样我们就可以通过一些简短地命令和git进行交互。

首先,我们输入git add -i 进入交互式的命令。

可以看到这里有8个选项,这里的选项大家应该都能看懂,其中集成了很多种功能,我们接下来一个一个讲解。

首先是将新文件添加到暂存区,我们选择4,表示添加未被git管理的文件,接着又会询问我们要添加的文件。这里我们就不用再输入文件名了,直接选择序号即可。我们先添加一个,选择3。之后我们会看到3对应的文件名前面被打上了*,表示这个文件将会被添加。

接着我们再敲一次回车,可以回到上级菜单,然后我们选择7退出,可以看到git的状态已经改变了。

查看改动

我们将改动添加到暂存区之后,我们还可以使用git add -i 来查看某一个文件的具体改动。操作方法也非常简单,我们同样通过git add -i 进入交互模式,然后选择6进入diff模式。

接着我们输入1,表示我们要查看的改动,git会打开一个vim窗口,为我们展示这个文件当中被我们添加的改动。

它的效果等价于我们执行git diff --cached

取消暂存

如果我们add了之后,发现add错了,想要反悔,那么也是容易的,我们可以使用revert功能撤销我们这次的add

操作也很简单,我们还是输入git add -i 进入交互式的命令。会发现我们刚进来的时候就提示我们当前暂存区的状态。这里我们选择3进行撤销,git会展示出我们暂存区的所有文件,这里我们只提交了一个文件,所以也只能看到一个。


image-20201022084056498

这里我们选择1号文件,然后退出,会发现我们回到了git提交之前的状态。

暂存补丁

最后介绍一下补丁的功能,这个功能我用的不多,不过用好了可以在一些情况下大大简化我们的操作。

当我们执行暂存操作的时候,我们针对的主体都是某一个文件。但是会有这样一种情况,某一个文件当中的改动很多,我们只想要把其中的一部分添加进git,另外一部分先保留在本地。这种情况也很常见,比如同时开发两个功能,一个开发好了,另外一个还在测试。为了赶工期,决定先把其中的一个功能先上线,那么还在测试的功能显然不能被提交,否则可能会带来隐患。

针对这种情况,我们就需要使用补丁。为了演示,我们在之前的文件当中加了两行废话,然后执行git add -i,选择5.

当我们选择了我们想要进行补丁的文件并且按回车之后,git会把我们的改动一个部分一个部分地询问我们。

这里的命令可能看不明白,没关系,我们输入?可以获取完整的含义。

说了这么多,其实关键的只有两个,y表示需要把它加入存储,n表示不加入。这样当我们操作完了之后,我们再来查看状态,会发现刚才我们操作过的文件当中,一部分被添加了进来,另外一部分没有。

总结

怎么样,交互式命令是不是非常好用呢?

它的最大的一个优点就是将多个命令集合在了一起,可以一个命令实现多个功能。并且每个功能都以交互的形式展现,可以方便我们的操作,降低我们搞错的几率。这也是很多git大神非常喜欢的功能,希望大家都能学会。

今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发

原文链接,求个关注

{{uploading-image-87920.png(uploading...)}}

学会了这一招,距离Git大神不远了!的更多相关文章

  1. 想成为Git大神?从学会reset开始吧

    大家好,今天我们来着重介绍一个非常关键的功能就是reset.在上一篇文章介绍修改历史记录的时候曾经提到过,当我们需要拆分一个历史提交记录的时候需要使用reset.估计很多小伙伴不明白,reset究竟做 ...

  2. 详解git rebase,让你走上git大神之路

    在之前的文章当中我们介绍了git merge的用法,明白了通过git merge我们可以合并两个分支的改动.这样我们就可以很方便地进行协同开发了,每个人都在自己的分支下开发代码,开发完毕之后再一起合并 ...

  3. 多年的.NET开发,也只学会了这么几招

    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了   随着工作年龄逐渐增加,身边的重担也越来越多.以前可以在公司加班到晚上10点,现在不行了.以前可以通宵 ...

  4. 文章如何做伪原创 SEO大神教你几招做"原创"网站文章的心得

    想要创作出好的文章并被百度所喜欢,就非常需要SEO的优化能力,以及要对文章进行塬创或伪塬创,那么,如何做伪塬创文章?以及如何做好塬创网站文章呢?对此,本文小编就为大家带来了几招做"塬创&qu ...

  5. 【推荐】Java工程师如何从普通成为大神值得一读

    本文源自 http://www.hollischuang.com/archives/489 一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的 ...

  6. 李洪强iOS开发之大神必备的Xcode插件

    iOS开发大神必备的Xcode插件 写在前面 工欲善其事,必先利其器,iOS开发中不仅要学会Xcode的基本操作,而且还得学会一些Xcode的使用技巧,如掌握常用的快捷键等,还有就是今天要说到的Xco ...

  7. 从菜鸟到大神:Java高并发核心编程(连载视频)

    任何事情是有套路的,学习是如此, Java的学习,更是如此. 本文,为大家揭示 Java学习的套路 背景 Java高并发.分布式的中间件非常多,网上也有很多组件的源码视频.原理视频,汗牛塞屋了. 作为 ...

  8. iOS组件化思路-大神博客研读和思考

    一.大神博客研读 随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的 ...

  9. 大神的vim配置

    大神的vim配置,O(∩_∩)O spf13-vim : Steve Francia's Vim Distribution __ _ _____ _ ___ _ __ / _/ |___ / __ _ ...

随机推荐

  1. OpenCascade拓扑对象之:Face的方向、参数域和曲面间的关系

    @font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...

  2. 水题挑战3: NOIP 2017 宝藏

    参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋 ...

  3. Hash 算法与 Manacher 算法

    目录 前言 简单介绍 简述 Hash 冲突 离散化 基本结构 普通 Hash 简述 例题 字符串 Hash 简单介绍 核心思想 基本运算 二维字符串 Hash 例题 兔子与兔子 回文子串的最大长度 后 ...

  4. 网络编程NIO:BIO和NIO

    BIO BIO(Blocking I/O),同步阻塞,实现模式为一个连接一个线程,即当有客户端连接时,服务器端需为其单独分配一个线程,如果该连接不做任何操作就会造成不必要的线程开销.BIO是传统的Ja ...

  5. 12 RESTful架构(SOAP,RPC)

    12 RESTful架构(SOAP,RPC) 推荐: http://www.ruanyifeng.com/blog/2011/09/restful.html

  6. TCP 三次握手和四次挥手图解(有限状态机)

    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由 IETF 的 RFC 793 定义,是为了在不可靠的互联网络 ...

  7. 1+X云计算 应用商城系统(gpmall)-遇到的问题以及解决办法

    1+X云计算 应用商城系统(gpmall)-遇到的问题以及解决办法 问题1: 关于网站访问(打不开或者连接不上服务器的问题): 没有关闭selinux和防火墙,是访问不了网站 [root@mall ~ ...

  8. VBA_Copy数据及数据格式_DoLoop删除空行

    Sub copyreport() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Ap ...

  9. 【转】volatile和synchronized的区别

    volatile和synchronized的区别 volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取: synchronized则是锁定当前变量,只有当前 ...

  10. currentColor在CSS的含义

    currentColor属于CSS中的一个变量,当然也有人称之为CSS的自定义属性,其代表"当前颜色". 在CSS中设置了color的值后,相应CSS代码块(由两个花括号包裹的内容 ...