Git使用小技巧之回滚和撤销
想要获取更多文章可以访问我的博客 - 代码无止境。
日常的开发,我们难免会创建错误的git提交记录,整个时候git给我们提供了两个命令来解决这个问题。一个命令是git reset
,另一个是git revert
。两者有啥区别呢?两者主要的区别是,git reset
命令是回滚某次提交,被回滚的提交将不会出现在提交记录中,而git revert
命令是创建一个新的提交来达到撤销的目的,被撤销的提交和撤销的提交都会出现在提交记录中。
准备
首先呢,我们还是需要准备一个git
仓库,并且准备一个可以修改的文件,文件名无所谓,我这里就创建了一个README.md
文件:
mkdir git-test
cd git-test
git init
touch README.md
git add *
git commit -m "init"
git reset
1.修改README文件。
2.提交这次修改。
git commit "错误的提交"
3.假设刚刚的提交是个错误的,我们需要回退,这个是个git reset
命令就有用武之地了,我们可以使用它回退到指定的提交。
$ git reset e431092f22a85deebf7bd6f4f96d9943530b49bf
Unstaged changes after reset:
M README.md
4.我们在使用git status
查看状态,会发现README文件处于一个被修改的状态,并且内容没有发生变化。也就是说git reset
会将本地仓库的指针知到你指定的分支,但是内容不会丢弃,而是放到了工作区,如果你想再次提交还是可以的。
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
如果你想直接丢弃掉,可以加上--hard
参数即可。其实git reset
有三种回滚方式:
git reset --hard <回滚分支>
git reset --soft <回滚分支>
git reset --mixed <回滚方式>
--hard
回滚分支到当前所在分支之间修改的内容将会被完全丢弃掉。--soft
会将修改的内容放到暂存区,你仍然可以使用git commit
命令提交。--mixed
则是reset的默认参数,也就是你不指定参数的话,会默认使用--mixed
回滚,这种回滚方式会将修改的内容放到工作区。
git revert
有些情况下我们可能不太希望错误的提交记录被完全抹除掉,还是希望它保存在git的提交记录中,万一我们撤销出错了还可以有补救的机会。这中情况下我们就需要使用git revert
命令来实现。
1.我们来查看下当前git仓库的提交记录。
$ git log
commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299 (HEAD -> master)
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 18:08:30 2019 +0800
错误的提交
commit e431092f22a85deebf7bd6f4f96d9943530b49bf
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 17:23:44 2019 +0800
init
2.现在我们需要将这个错误的提交撤销掉,执行下面的命令就可以了。
git revert 28aef5f811895f7124a3ae0e3b095a37ef9cb299
在执行的过程中会跳出来一个VI编辑界面,让我们编辑撤销提交的message信息,默认为Revert "被撤销提交的message"
,当然我们可以进行编辑。
3.在使用git log
命令查看提交日志,我们会发现被撤销的提交和撤销的提交都出现在提交记录中,然后你去查看README文件的内容,会发现已经回滚回去了。
$ git log
commit ef836162c8f4cf75086151e517339789dd937453 (HEAD -> master)
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 18:13:27 2019 +0800
Revert "错误的提交"
This reverts commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299.
commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 18:08:30 2019 +0800
错误的提交
commit e431092f22a85deebf7bd6f4f96d9943530b49bf
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 17:23:44 2019 +0800
init
Git使用小技巧之回滚和撤销的更多相关文章
- git远程库代码版本回滚方法
最近使用git时, 造成了远程库代码需要回滚到之前版本的情况,为了解决这个问题查看了很多资料. 问题产生原因: 提交了错误的版本到远程库. 以下是解决的方法, 供大家参考: 1.对本地代码库进行回滚 ...
- 8 个 Git 的小技巧
git 已经成为了我日常必备工具之一,我总结我几乎每天使用的8个有用(且简洁)的git技巧. 使用-p选择性添加 当你想提交内容时,你可以通过使用 git commit -am 来选择所有文件或使 ...
- Git配合Tag的代码回滚
现有的远程仓库版本的tag为v1.0 前置准备 具体操作: 我们在本地修改一下readme文件,然后进行add,commit操作. 再给我们的commit打上tag git tag -a v1.1 - ...
- git push之后回滚(撤销)代码
问题描述:首先,先说明一下,为什么会引发这次的话题,是这样的,我做完功能Agit push之后,2个月后需求部门要求不要功能A了,然后需要在没有功能A的基础上开发,怎么办?赶紧回滚代码呀. 然后我用g ...
- git本地以及远程分支回滚
转:https://www.cnblogs.com/sunny-sl/p/11236280.html 1. git本地版本回退 Git reset --hard commit_id(可用 git lo ...
- Android Studio|IntelliJ IDEA Git使用小技巧
一 分支管理 1. 新建分支 在master的基础上创建新分支dev 2. 推送分支 将新建的分支dev推送到远程 3. 切换分支 4. 合并分支 当我们在dev分支完成代码修改并测试通过后 需要将d ...
- git的回滚与撤销【reset and revert】
git的工作流程-- 3个区域 工作区:我们可以看到的文件内容 在操作 git add 之前的!! 缓存区:是不可见的 已经git add操作,还没git commit -m "" ...
- Git - 回滚与撤销
必要的概念 当前编辑界面:工作区(workspace) "git add"命令:将改动加入到缓存区(Index) "git commit"命令:提交代码到本地库 ...
- Git使用小技巧之多个远程仓库
想要获取更多文章可以访问我的博客 - 代码无止境. 这是一个普通的工作日,小代正在勤勤恳恳的写代码.这时陈BOSS走到小代身边,跟小代说:"我们的代码需要同时推送到Github和码云两个仓库 ...
随机推荐
- QT实现鼠标钩子(使用SetWindowsHookEx安装mouseProc函数)
HHOOK mouseHook=NULL; LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam ) { if(nCode ...
- SDL(01-10)
SDL中的函数需要先初始化SDL才能用 : //Initialize SDL ) { printf( "SDL could not initialize! SDL_Error: %s\n&q ...
- 《Docker 实战》第三章 Docker Hub 寻宝游戏
# 秘密仓库和密码 docker run --rm -it --name password dockerinaction/ch3_ex2_huntanswer
- 在 win10 环境下,设置自己写的 程序 开机自动 启动的方法
原文:在 win10 环境下,设置自己写的 程序 开机自动 启动的方法 1.是登录自己用户时才能开机启 C:\Users\username\AppData\Roaming\Microsoft\Wind ...
- android Camera2 API使用详解
原文:android Camera2 API使用详解 由于最近需要使用相机拍照等功能,鉴于老旧的相机API问题多多,而且新的设备都是基于安卓5.0以上的,于是本人决定研究一下安卓5.0新引入的Came ...
- 所有语言的Awesome(2)
Curated list of awesome lists https://awesomeweekly.co https://github.com/sindresorhus/awesome ✨ Pre ...
- WPF Layout 系统概述——Measure
原文:WPF Layout 系统概述--Measure 前言 在WPF/Silverlight当中,如果已经存在的Element无法满足你特殊的需求,你可能想自定义Element,那么就有可能会面临重 ...
- 原生Js监听普通dom尺寸变化
原生Js监听普通dom尺寸变化 具体做法有以下几种: 初始化项目后,轮询,反复查看 dom 尺寸是否变化,这种一听就感觉不好,开销太大. 监听元素的滚动事件,在 目标 dom 里面包裹一个同等大小的 ...
- 从零开始学习音视频编程技术(三) 开发环境搭建(Qt4.86手动设置环境,主要就是设置g++和qmake,比较透彻,附下载链接)
1.先下载安装Qt 我们使用的版本是4.8. 可以自行百度下载也可以从下面的网盘地址下载: Qt库和编译器下载: 链接:http://pan.baidu.com/s/1hrUxLIG 密码:0181 ...
- PySide——Python图形化界面入门教程(六)
PySide——Python图形化界面入门教程(六) ——QListView和QStandardItemModel 翻译自:http://pythoncentral.io/pyside-pyqt-tu ...