git 必看,各种撤销操作
场景概念说明
首先说明一个概念, git是一个分布式的版本控制工具,分布式即 git 管理的项目是有多个大致平等的仓库的。通过一个例子来说明这个东西。
举一个最简单的使用场景: 你在github 建立了一个项目, 然后把已经初始化的项目拉到了本地(或者从本地push了内容到github)。 即: 此时github 和你本地都有了项目,且二者,已经建立了联系。
此时这一个项目既有了两个仓库,一个在github 的远端仓库,一个在本地的本地仓库。 如果是两人合作,则会有两个本地仓库。 虽然主观上,把github上的仓库视为主仓库,但是我们可以通过一些操作,把任一仓库变更为新的主仓库。 即: 这些仓库的地位没有实质上的差别。可以做如下转换
不熟练就先备份
不熟练的话,做感觉有危险的操作前,先备份。
可以使用 git stash,备份当前的修改,想要恢复的时候,直接使用 检出即可。 或者干脆 git checkout -b newBranch, 备份一个新分支。 备份 不是今天的主要话题,就不展开讲了。
撤销操作--仅变动本地的代码
取消文件的修改
git checkout fileName, 这个命令会从本地仓库里检出文件,覆盖掉 指定文件的修改。 本地仓库 即已经commit 提交到本地仓库的代码。把指定的文件名换成‘ . ’ 即为选择全部的意思。
取消 git add 操作
git reset --mixed 仅取消 git add 带来的效果。 即本地的修改还在,但是取消了add 的状态。
回退到指定到 commit号
git reset --hard commitId, 这个命令 回退到指定的commit,并且不会保留本地尚未提交的修改。所以一定要慎重使用。
取消commit时,更安全的操作: revert
更安全的操作, 使用 git revert
git revert commitId,会撤销指定的commit,但是与 reset --hard 不同的是,revert 不会丢掉被撤销的commit,而是会生成一个新的commit,其所有操作与指定的commit 相反,以此来覆盖掉该commit 的修改。
举个栗子: 按序有三个commit: c1, c2, c3。 现在我们位于c3. 使用 git commit --hard c2, 则当前状态会退回到 c2, git log, 只会看到,c2、c1. 而 如果使用git revert c2,则会新添加一个c4的commit,c4的操作与c2 完全相反。 git log 可以看到 1 ~ 4 全部的commit。
如果你想撤销远端的代码呢
如果使用了revert,直接 git push 即可。
如果使用的是git reset,或者 rebase到了之前的commit; 在更改了本地代码以后,git push -f。
-f 一定慎用,如果涉及到远端主分支,干脆就不要用。
涉及远端的,还是推荐用 revert
欢迎批评与指正。
git 必看,各种撤销操作的更多相关文章
- git基本命令之删除撤销操作
1.将删除文件恢复--撤销所删除的文件git checkout 文件名 2.git resetgit reset --hard commitID(或某个节点)----强制切换到某个点,会导致所修改的内 ...
- git的回退和撤销操作
回退是git的使用中很常用的一个操作,如果清楚各个回退命令的作用,不仅大大加快代码回退的效率,还能避免代码回退造成的事故 1.git reset --hard [commit] 清空暂存和未暂存的更改 ...
- git版本回退与撤销操作
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步, ...
- Git入门看这一篇就够了! (转)
Git 的三种状态 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed):数据已经安全的保存在本地数据库中. 已修改(modified):已修改表示修改了文件,但还没保存到数据 ...
- Git 学习看这篇就够了!
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...
- 从零开始使用git第三篇:git撤销操作、分支操作和常见冲突
从零开始使用git 第三篇:git撤销操作.分支操作和常见冲突 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:gi ...
- Git撤销操作
撤销操作的相关文章 http://www.linuxidc.com/Linux/2015-06/119350.htm ——撤销已经修改,但是还没有添加到暂存区的操作: 解决方案: 有两种情形: ...
- Git学习之路(4)- 撤销操作、删除文件和恢复文件
▓▓▓▓▓▓ 大致介绍 经过前面的学习(小白学Git)已经建立了版本库,并上传了文件,这次来学习对这些文件进行基本的操作,即: ◆ 撤销操作 ◆ 删除文件 ◆ 恢复文件 我在此之前,已经将三个文件提交 ...
- 大话git中的撤销操作
下面以现实场景作为情境. 基础知识,理解git中的几个区域 本地代码已经add,未commit 修改本地工作目录中的readme.md,添加文字"第一次修改" 然后查看下状态 ➜ ...
随机推荐
- 平衡二叉树 JAVA实现 亲测可用
平衡二叉树的JAVA实现 亲测可用 包括LL LR RL RR四种情况的旋转算法 以及添加删除树结点之后对平衡二叉树的维护算法 都已经实现并测试过 没有问题. 代码地址可以直接上我的GIT clone ...
- .NET程序员如何快入门Spring Boot
本篇文章将教你作为一个.NET程序员如何快入门Spring Boot.你不需要用Eclipse,也不需要用IDEA.已经习惯了VS,其他的IDE-- 但不得不说VS Code很厉害,一用就喜欢.微软给 ...
- F4帮助
在INITIALIZATION之后添加 AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_month-low 事件,s_month-low为要添加的搜索帮助. 下面 ...
- Java Collection秋招复习
抽象类和接口的区别 我们先来看一下抽象类 * @auther draymonder */ public abstract class AbstractClassTest { private int T ...
- JIRA的安装部署问题
JIRA的安装部署问题: 因电脑上装了两人系统,导致我的JIRA服务不能和tomcat同时启动,让我弄了好久都不知道是啥原因,经过请教,总算得出原来是JIRA的Port和Tomcat的Port冲突.在 ...
- outerHTML、innerHTML以及innerText三者的区别
- 一道关于String的面试题,新鲜出炉,刚被坑过,趁热!!
很多人都会答错的一道关于String的题目,究竟有什么难度? 我们一起来看一道关于String的面试题,准确说是改编的面试题! 准备好啦?在放大招之前先来一个小招式 String s1 = new S ...
- eclipse下jdbc数据源与连接池的配置及功能简介
今天在做四则运算网页版的时候遇到了一个困惑,由于需要把每个产生的式子存进 数据库,所以就需要很多次重复的加载驱动,建立连接等操作,这样一方面写程序不方便,加大了程序量,另一方面,还有导致数据库的性能急 ...
- 设计和编写一个异步通用Picker选择器,用于时间日期、城市、商品分类的选择
目录 一.功能规划 二.最底层基础实现 (1)Picker界面和功能实现 (2)不同类型的选择器基础实现 三.数据源层 (1)时间日期 (2)多级同步分类,如:城市 (3)多级异步分类,如:城市 四. ...
- Log2Net日志查询网站代码解析
在前面的几节中,我们介绍了Log2Net的使用方法和代码设计.使用这个组件,我们可以方便地将日志记录到数据库中,那么,我们怎么能看到这些日志呢?于是,日志查询网站应运而生.效果图如下: 该代码已开源, ...