使用Git后10件你可能需要“反悔”的事

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


Git是目前世界上最优秀最流行的分布式版本控制系统,也是程序员们日常使用最频繁的工具之一(几乎每天都需要使用它来对源代码进行版本管理)。

使用Git的过程,难免由于手快或者别的什么原因,需要对做过的事情进行“反悔”或者多次“反悔”。不用担心,Git强大到几乎任何操作都是可以“反悔”的,让我们一起来看看吧。

1. 在未暂存前,撤销本地修改

在介绍Git“反悔”操作之前,先简单提及下Git的一些基础知识。

Git项目有3个区域:工作区、暂存区和Git仓库(分成本地仓库和远程仓库)。如下图:

 

1

本地编写的代码,不执行任何Git命令,处于工作区。

执行git add命令时,会将工作区的文件标记为已暂存,保存在暂存区。

执行git commit命令时,会将标记为已暂存的文件保存都本地Git仓库,并生成一个快照。

在没有暂存之前(没有执行git add命令),我们可以通过以下命令查看本地修改:

git diff

显示的格式如下图所示:

 

1

如果我们不想要这些代码本地代码(比如一些临时的测试代码),可以通过以下命令一次性撤销所有本地修改:

git checkout -- .

 

3

注意:该命令不可二次“反悔”,本地操作一旦撤销,将无法通过Git找回。

撤销之后再次执行git diff命令将没有任何输出,代表没有文件在暂存区。

我们也可以指定具体的文件路径,撤销该文件的修改:

git checkout -- [filename] 

2. 在暂存之后,撤销暂存区的修改

本地写完代码,提交到本地仓库之前,需要先将修改的文件添加到暂存区,执行以下命令将本地所有已修改的文件添加到暂存区(当然也可以指定具体的文件):

git add .

此时我们执行git diff命令,将不会有任何输出(因为文件已被添加到暂存区),想要查看暂存区的修改,可以执行以下命令:

git diff --staged

看到的效果和之前为暂存前,通过git diff看到的一模一样。

如果这时我们想要一次性撤销暂存区的全部修改,可以执行以下命令(当然也可以撤销暂存区指定文件的修改):

git reset .

注意:

该命令可以二次“反悔”,通过git add .命令可以将文件再一次添加到暂存区。

这里的“撤销暂存区的修改”是指撤销git add .这个命令,回到执行git add .之前的状态,即已修改未暂存状态。

此时,如果执行git diff --staged命令,将没有任何输出,执行git diff命名将看到已修改未暂存状态的输出。

1和2的两个命令可以合并成一个:

git reset --hard<=>git reset .
git checkout -- 

即:如果已暂存,但未提交本地仓库之前,想把所有文件直接抛弃(而不是从暂存区删除),可以直接执行以上命令。

3. 提交到本地仓库之后(但未推送到远程仓库),撤销本次提交

执行以下命令,可以将暂存区的所有文件保存到本地Git仓库,并生成文件快照(便于之前的回退等操作):

git commit -m "modify some files"

此时提交历史里面会有一条记录f8651ff(Commit ID):

 

2

如果我们不想要这次修改的内容,有以下2种方法:

方法一

回到当前提交的父对象a18c6fa(即上一次提交,通过git log查看),就等于撤销了本次提交:

git checkout a18c6fa

 

4

执行git log命令,发现已经回到之前的提交:

 

5

方法二

重置之前的提交:

git reset --hard HEAD~1

6

效果和方法一一样:

7

注意:该命令是可以二次“反悔”的,具体步骤如下:

  • 找到被重置的提交 git reflog,发现是 f8651ff
  • 使用reset回到该提交 git reset --hard f8651ff

8

4. 修改提交

考虑以下场景:

原本打算修改两个文件,结果只提交了一个文件,但又不想生成两个提交记录(Commit ID),具体执行的命令如下:

git add src/app/app.component.html
git commit -m "add test block"
git log

 

9

这样其实只提交了app.component.html一个文件,不是我们想要的。

可以通过以下命令“反悔”(添加遗漏文件,又不重新生成新的Commit ID):

git add src/app/app.component.css
git commit --amend

10

还有一种场景可能更加常见,没有遗漏的文件,只是提交信息里有一个单词写错了,可以使用以下命令进行修补:

git commit --amend -m "add test container"

注意:--amend修补参数会将改变之前的Commit ID,但不会生成新的Commit ID。

5. 撤销提交历史中的某一次指定的提交

第3小结提到回退最近一次提交的方法(使用git reset命令),该方法只能针对连续的提交,如果只想撤销提交历史中的某一次提交(比如:),该怎么办呢?

比如:Commit ID为711bb0b的提交,该次提交将标签的target属性由"_blank"改成了"_self"。

11

可以使用以下命令撤销该次提交(将提交的内容“反操作”),并生成一个新的提交在最前面:

git revert 711bb0b

 

12

revert之后,会在提交历史的最前面生成一个新的Commit ID(1f49a42),该次提交将标签的target属性由"_self"改回了"_blank"。

 

13

6. 合并出现冲突时,撤销合并操作

两个分支改了同一个文件的同一个地方,合并时将出现冲突:

 

14

如果不想解决冲突,想撤销这个合并,可以使用以下命令:

git merge --abort

abort之后,将恢复合并之前的状态。

7.暂存区的文件加多了,想移除,又不想删掉本地的文件

git rm --cached src/test.pptx

8.分支重命名

git br -m [old_br] [new_br] 

9. 撤销变基操作

将rebase_test分支的修改变基到master上:

git co rebase_test
git rebase master

 

13

撤销的步骤如下:

  • 使用git reflog命令找到变基前的提交09b0adc
  • 使用git reset --hard 09b0adc重置到该提交

 

14

10. 以脚本方式改写提交

考虑以下场景,在一次很早的提交中,将一个储存密码的文件passwords.txt提交到了远程仓库,这时如果只是从远程仓库中删除该文件,别人依然可以通过提交历史找到这个文件。

因此我们需要从每一个快照中移除该密码文件,用以下命令就可以做到:

git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

该命令执行完会将提交历史中所有提交的passwords.txt文件彻底删除,永远没法通过Git找回。

除了以上“反悔”操作,还有一个很强大的命令,也可以以某种形式对过去做过的事情进行“反悔”,那就是交互式变基:

git rebase -i

该命令非常强大。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-07-14
本文作者:aoxiang
本文来自:“dockone”,了解相关信息可以关注“dockone”

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 整合MongoDB

文章目录1. 引入依赖2. 在yml中添加配置3. 在启动类中开启mongodb在model中添加依赖&#xff0c;为什么在model中添加&#xff1f;因为会有映射的实体类MongoObject对应mongodb中的数据表对象&#xff1a;1. 引入依赖 <dependency><groupId>org.springframework.b…

浏览器从输入URL到页面渲染过程 ——页面渲染流程

之前我有总结过一篇经典面试题&#xff1a;浏览器从输入URL到页面渲染过程 &#xff0c;接下里我将对某些知识点进行更细致的解析。 浏览器从输入URL到页面渲染过程 系列文章&#xff1a; &#xff08;一&#xff09;&#xff1a;浏览器从输入URL到页面渲染过程 —— 浏览器的…

阿里发布2020农产品电商报告数字农业将成风口

完美日记创立于2017年&#xff0c;这家公司上线不到两年即成为天猫彩妆销冠&#xff0c;2019年成为11年来第一个登上天猫双十一彩妆榜首的国货品牌&#xff0c;包揽天猫2019全年彩妆销冠&#xff1b;2020年4月成为首个亮相天猫超级品牌日的国货彩妆品牌&#xff0c;同时勇破彩妆…

【干货】和你谈谈数据分析报告

前言&#xff1a; -更多关于数智化转型、数据中台内容请加入阿里云数据中台交流群—数智俱乐部 &#xff08;文末扫描二维码或点此加入&#xff09; -阿里云数据中台官网 https://dp.alibaba.com/index &#xff08;作者&#xff1a;数智从业者&#xff09; 在当今企业纷纷推动…

Vue3 安装axios使用报错:Uncaught TypeError: Cannot read property ‘use‘ of undefined

最近在学习Vue3&#xff0c;使用vue cli4搭建了一个demo项目&#xff0c;安装axios后&#xff0c;控制台报错&#xff1a; Uncaught TypeError: Cannot read property use of undefinedat eval (axios.js?be3b:59)at Module../src/plugins/axios.js (app.js:1229)at __webpac…

云原生五大趋势预测,K8s安卓化位列其一

作者 | 李响、张磊 Kubernetes 本身并不直接产生商业价值&#xff0c;你不会花钱去购买 Kubernetes 。这就跟安卓一样&#xff0c;你不会直接掏钱去买一个安卓系统。Kubernetes 真正产生价值的地方也在于它的上层应用生态。 “未来的软件一定是生长于云上的”&#xff0c;这是…

centos7 linux 安装 keeplived

文章目录一、简介部署总览1. 简介2. 部署总览二、安装实战2.1. 安装环境2.2. 下载软件包2.3. 同步软件包2.4. 解压、编译、安装三、系统服务3.1. 配置复制3.2. 脚本复制3.3. 服务开机启动四、配置修改4.1. 编辑配置4.2. 140 服务器配置4.3. 141 服务器配置4.4. 启动keepalived4…

阿里人脸识别安全技术获专利可防范3D人脸面具攻击

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 当人脸识别遇上3D技术&#xff0c;谁将是最后的胜利者?长期困扰人脸识别行业的安全问题有了最新的解法。日前&#xff0c;阿…

vue3中 使用 swiper 插件,自定义切换按钮, 将 前进后退 、左右切换 按钮放到容器外部

今天在使用 swiper 时&#xff0c;遇到一个 坑爹的 问题。 swiper 组件的本来样式长这样&#xff1a; 左右切换的按钮在滑动容器内部&#xff0c;但是我们想要它跑到容器外面去。 网上找了一堆方法都不好使 也不知道是不是因为 我使用的是 高版本原因 最终实验结果&#x…

一眼看尽5G江湖,Gartner发布5G网络基础设施魔力象限报告

作者 | 白告天来源 | 边缘计算社区头图 | 下载于视觉中国近日&#xff0c;国际权威分析机构Gartner发布了首份《通信运营商5G网络基础设施魔力象限》报告。以最直观的方式展示了这一领域内各家头部企业的力量对比情况。Gartner通信运营商5G网络基础设施魔力象限该魔力象限帮助通…

一篇小文带你走进RabbitMQ的世界

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 说到消息中间件&#xff0c;大部分人的第一印象可能是Kafka。毕竟Kafka自问世以来&#xff0c;就顶着高并发&#xff0c;大流…

nginx高可用方案:keepalived+nginx vip 动态位移

文章目录一、部署总览常用命令1. 部署总览2. 常用命令二、软件安装配置2.1. 安装keepalived2.2. 安装nginx2.3. 配置静态文件三、测试3.1. 启动nginx3.2. 验证四、vip动态位移测试4.1. 140验证4.2. 141验证4.3. 140停止kp服务4.4. 141 验证4.5. 140 重新启动kp服务一、部署总览…

多角度分析平台即服务?PaaS的类型和用例

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 没有适合所有人的单一PaaS。即使云计算已经发展了10多年&#xff0c;但对云计算服务模型的定义仍然相当模糊。通常&#xff0…

未来,边缘计算的功能支柱是 Kubernetes

来源 | SDNLAB责编 | 寇雪芹头图 | 下载于视觉中国编者按在数字化转型时代&#xff0c;5G网络是一个飞跃。5G正在推动边缘计算的发展&#xff0c;而Kubernetes则是5G与边缘计算之间的粘合剂。云计算的十年云计算之于信息技术(IT)产业&#xff0c;就像石油之于汽车工业一样。云让…

如何在工作中快速成长?致工程师的10个技巧

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 作者 | 江建明 阿里巴巴高级无线开发专家 导读&#xff1a;精英人数的增长速度持续加快后&#xff0c;很多人开始焦虑&#…

在新项目中使用 Vue3 使用总结

一、使用背景 最近公司需要搭建一个新项目&#xff0c;用于做官网。因为作为官网&#xff0c;首先项目不算大&#xff0c;一共只有十来个页面&#xff0c;并且想要用户体验感很好&#xff0c;所以最终选定以 Vue 作为技术栈。 虽然 Vue3 &#xff08;中文官网&#xff09;刚问…

2020年从架构谈起到Mesh结束

作者 | 张羽辰&#xff08;同昭&#xff09;阿里云交付专家 导读&#xff1a;如今&#xff0c;几乎所有的事情都离不开软件&#xff0c;当你开车时&#xff0c;脚踩上油门&#xff0c;实际上是车载计算机通过力度感应等计算输出功率&#xff0c;最终来控制油门&#xff0c;你从…

Mendix:低代码平台四大常见用例开发

编辑 | 宋慧 供稿 | Mendix 头图 | 付费下载于视觉中国 如今&#xff0c;低代码对很多人来讲可能已经不再是一个陌生的名词。创新的低代码开发平台实现了低级别编码的抽象化和人工流程的自动化。低代码通过可视化开发工具和可重用组件&#xff0c;缩短了定制化网络和移动应用的…

下架已上线的小程序;2.设置不允许被用户搜索到

下架已上线的小程序&#xff1a; 登录微信开发者后台【设置】-【功能设置】-【暂停服务设置】-【暂停服务】&#xff0c;如图 设置小程序不允许被用户搜索到&#xff1a; 登录微信开发者后台【设置】-【功能设置】-【隐私设置】-【关闭】&#xff0c;如图 操作过程中遇到的问题…