如何高效撤销Git管理的文件在各种状态下的更改
一、背景
企业中我们一般采用分布式版本管理工具git来进行版本管理,在团队协作的过程中,我们难免会遇到误操作,需要撤销更改的情况,那么我们怎么高效的进行撤销修改呢?对于还未提交到暂存区的代码怎么高效撤销更改呢?对于已经提交到暂存区的代码,怎么取消add操作?对于已经提交到本地仓库,还没有提交到远程仓库的代码,怎么进行高效撤销更改呢?还有对于已经提交到远程仓库的代码,如何进行高效的撤销更改呢?那我们本文就来一一解决这些棘手的问题!
二、各种状态高效撤销方案
文件还未提交到暂存区,只是在工作目录中修改了,想要撤销
git checkout [--] file-name (撤销单个文件修改)
git checkout [--] . (撤销当前工作空间中所有文件的修改)- 文件已经add到暂存区,但还没有提交到本地仓库,想要撤销(即取消add操作)
git reset [HEAD] file-name (撤销暂存区中的单个文件)
git reset [HEAD] . (撤销当前暂存区中的所有内容) 文件已经提交到本地仓库,但还没有push到远程仓库,想要撤销
git log (查看并记录下要回滚到的commitId)
git reset [--soft | --mixed |--hard] commitId (回退版本)注:git reset 默认是 --mixed 模式,即 git reset --mixed 等价于 git reset.
--soft : 会保留工作区间以及暂存区index的提交,只是把git commit回退到某个版本,如还需提交,直接commit即可。
--mixed : 会在工作区保留源码,只是将git commit和暂存区index回退到某个版本。
--hard : 源码以及暂存区和git commit都回退到某个版本。
文件已经提交到远程仓库,想要撤销
git log (查看并记录下要回滚到的commitId)
git reset --hard commitId (回退版本)
git push -f origin branch-name 或
git revert commitId(回退版本)
git push origin branch-name
注: reset和revert有着本质的区别,reset直接删除了指定的commit,而revert是用一次新的commit来覆盖要回滚的commit.
reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.
如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
三、总结
通过本文我们就知道如何对不同状态的git管理的文件进行撤销修改的操作,这样即使我们不小心操作了什么东西,我们也能很快的进行回滚,就是要做高效的程序猿~
如何高效撤销Git管理的文件在各种状态下的更改的更多相关文章
- 删除Git管理的文件
首先进入由Git管理的文件夹下: 我们直接使用rm命令符删除git1.txt文件 那么你去删除一个版本库里的文件,工作区的文件就和版本库里的不一样了,现在我们采用git status来查看一下状态. ...
- git 在命令行与图形状态下使用详情
http://blog.csdn.net/risky78125/article/details/50850545 http://blog.csdn.net/risky78125/article/det ...
- git(工作区,暂存区,管理修改,撤销修改,删除文件)
工作区和暂存区 984次阅读 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的l ...
- Git学习笔记三--管理修改、撤销修改、删除文件
1.管理修改 什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改. 为什么说Git ...
- Git管理修改、撤销修改、删除文件
什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改. a.管理修改 对于提交修改, ...
- Git管理修改、撤销和删除文件
目录 备注: 知识点 管理修改 撤销修改 没有git add添加到暂存区时的撤销 git add添加到暂存区后的撤销 git commit提交后的撤销 删除文件 确定从版本库中删除文件 从暂存区把误删 ...
- 三、git学习之——管理修改、撤销修改、删除文件
一.管理修改 现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行, ...
- GIT 管理修改、删除文件
管理修改 现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就 ...
- Git(二)使用git管理文件版本(TortoiseGit )
一.创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都 ...
随机推荐
- 这次真的忽略了一些ActiveMQ内心的娇艳
好久没总结了,内心有点空虚了,所以今天主要给园里的朋友们分享一点儿这几天使用ActiveMQ过程中踩过的小坑,虽然说这东西简单易用,代码几行配置也就几行,问题不大但是后果有点严重,所以就要必要总结一下 ...
- Kaggle Challenge简要介绍
https://en.wikipedia.org/wiki/Kaggle 以下内容,直接摘自维基百科,主要起到一个记录的作用,提醒自己有时间关注关注这个竞赛. Kaggle is a platform ...
- [DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
题目翻译(借鉴自@ 神犇的蒟蒻) [问题描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身 上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身 ...
- 一个RtspServer的设计与实现和RTSP2.0简介
一个RtspServer的设计与实现和RTSP2.0简介 前段时间着手实现了一个RTSP Server,能够正常实现多路RTSP流的直播播放,因项目需要,只做了对H.264和AAC编码的支持,但是 ...
- 常用接口简析3---IList和List的解析
常用接口的解析(链接) 1.IEnumerable深入解析 2.IEnumerable.IEnumerator接口解析 3.IComparable.IComparable接口解析 学习第一步,先上菜: ...
- C语言之循环次数
#include<stdio.h>int main(){int num,count=0,i=0,ret=0;scanf("%d",&num);while(num ...
- nginx使用replace-filter-nginx-module实现内容替换
有时候我们想对响应(例如PHP接口)返回的内容做些字符串,虽然可以使用各语言代码相关方法(例如PHP的str_replace)进行替换,但是在nginx层面替换是更方便的,无需修改代码. 约定:本文源 ...
- 本地git部署web连接azure的git存储库
本地git部署web 创建本地存储仓库 输入以下命令创建git本地仓库(会在当前目录下生产一个.git的目录) git init 然后提交内容 在git仓库所在的目录下存放好需要的网页文件 将文 ...
- golang关于一些新手不注意会出现的小问题
前言 最近在整理之前写程序,学习时所记录的有道云笔记,发现一些有意思的小点跟大家分享一下.如有错误请大家给指出 一.闭包 defer 闭包(匿名函数) func test(){ i, n := ,; ...
- 实践作业2:黑盒测试实践——小组任务分工 Day 1
今日教学实验任务分配后,课下小组例会完成任务分工,具体分工如下: (1)系统需求分析--刘思佳 (2)设计测试用例--王俊杰 (3)编写.运行测试脚本--郜昌磊 (4)记录测试过程--吴慧杰 (5)记 ...