必要的概念

  • 当前编辑界面:工作区(workspace)
  • “git add”命令:将改动加入到缓存区(Index)
  • ”git commit”命令:提交代码到本地库(Local Repository)
  • ”git push”命令:提交代码到远程库(Remote Repository)

未使用“git add”命令缓存代码时

git checkout

git checkout -- <filepathname>  # 丢弃工作区某个文件的修改
git checkout . # 丢弃工作区所有文件的修改

注意:此命令不会删除掉新建的文件,需要手动删除。

已使用“git add”命令缓存代码

git reset

git reset HEAD <filepathname>  # 撤销暂存区某个文件的修改,重新放回工作区
git reset HEAD . # 撤销暂存区所有文件的修改,重新放回工作区

注意:相当于撤销“git add”命令,但只是将本地的修改从暂存区回退到工作区。

已使用“git commit”命令提交代码

git reset

git reset --hard HEAD^ <filepathname>   // 回退某个文件到上一次commit的状态
git reset --hard HEAD^ // 回退所有文件到上一次commit的状态
git reset --hard <commit id> // 回退所有文件到某个commit

git commit --amend

重做上一次commit,并包括指定文件的新变化。

合并缓存区的修改和最近的一次commit,并尝试重新commit。可以理解为,用一个全新的commit整个替换了最近一次commit。

如果缓存区没有内容, 可以用来编辑上一次的commit描述。

不要对一个公共的commit使用amend。如果amend了一个被其他开发者使用的commit, 可能会严重影响其他开发者。

git rebase

重新定义分支的起点,也就是将当前分支从一个commit移动到另一个commit作为起点。

分支上的老commit将被删除,保持了项目历史的干净。建议不要在一个公共的分支中使用rebase。

git rebase <base>   # 将<base>做为当前分支的新起点, <base>可以是任何一种commit引用(如ID,branch name,tag,HEAD~N等)。
git rebase -i <base> # 交互式地将<base>做为当前分支的新起点,过程中可以对要rebase的commit做一定的修改。

"git reset"命令

用来撤销本地的修改。建议不要reset一个公共的项目历史。

主要参数:

  • --soft 回退后a分支修改的代码被保留并标记为add的状态(git status 是绿色的状态)
  • --mixed 重置索引,但不重置工作树,更改后的文件标记为未提交(add)的状态。默认操作。
  • --hard 重置索引和工作树。
git reset  # 回退版本库到上一个commit的状态, 工作区不变。
git reset <commit> # 回退版本库到指定的<commit>, 工作区不变。 git reset --hard # 回退版本库和工作区到上一次commit的状态。 --hard表明覆盖所有的修改, 而且是不可逆的, 因此使用之前要谨慎。
git reset --hard <commit> # 回退版本库和工作区到指定的<commit>。 git reset --hard origin/master # 将版本库和工作区回退到和远程的一样。

回退到上个版本:git reset --hard HEAD^ <filepathname> git reset --hard HEAD^ git reset --hard HEAD~

回退到上上个版本:git reset --hard HEAD^^ git reset --hard HEAD~1

以此类推。

Git - 回滚与撤销的更多相关文章

  1. git merge 撤销与git 回滚

    git merge提交后恢复 http://blog.psjay.com/posts/git-revert-merge-commit/ git回滚 https://www.jianshu.com/p/ ...

  2. git回滚

    Git回滚的常用手法 07net01.com 发布于 4小时前 评论 传统VCS的回滚操作 对于版本控制系统VCS来说,回滚这个操作应该是个很普通也是很重要的需求. 如果你是传统VCS,比如SVN或者 ...

  3. Git回滚代码暴力法

    Git回滚有多种方式,这里使用的是[强制提交到远程分支] 效果为:如回滚前的提交记录是 1.2.3.4,使用这种方法回滚到2,那么提交记录就变成了1.2. 操作方法: 需要在本地的Git仓库,右键选择 ...

  4. Git使用小技巧之回滚和撤销

    想要获取更多文章可以访问我的博客 - 代码无止境. 日常的开发,我们难免会创建错误的git提交记录,整个时候git给我们提供了两个命令来解决这个问题.一个命令是git reset,另一个是git re ...

  5. git的回滚与撤销【reset and revert】

    git的工作流程-- 3个区域 工作区:我们可以看到的文件内容 在操作 git add 之前的!! 缓存区:是不可见的  已经git add操作,还没git commit -m "" ...

  6. git push之后回滚(撤销)代码

    问题描述:首先,先说明一下,为什么会引发这次的话题,是这样的,我做完功能Agit push之后,2个月后需求部门要求不要功能A了,然后需要在没有功能A的基础上开发,怎么办?赶紧回滚代码呀. 然后我用g ...

  7. git 回滚方式

    git push 命用于从将本地的分支版本上传到远程并合并. 命令格式如下: git push <远程主机名> <本地分支名>:<远程分支名> 如果本地分支名与远程 ...

  8. git回滚错误提交

    git log //找到你要回滚的那次提交 比如:43596f6b1f57157e627c25ae7a843f60157ac52d git reset --hard HEAD~43596f6b1f57 ...

  9. git 回滚远程服务端master的代码

    1.先备份版本 git checkout master git pull git branch master_backup //备份一下这个分支当前的情况 git push origin master ...

随机推荐

  1. ubuntu下安装/卸载vmware虚拟机

    1.下载vmware(官网下载试用版,试用版输入序列号后即为专业版,序列号网上搜,很多) 2.下载后安装(命令行) 1)cd进你下载的位置 1.1)下载的文件名字为:VMware-Workstatio ...

  2. 模块and包

    一.模块 1.import 加载的模块四个通用类别 1.使用python编写的py文件 2.已被编译为共享库或者DLL或者C\C++的扩展 3.包好一组模块的包 4.使用c编写并连接到python解释 ...

  3. 2019.01.26 codeforces 1096G. Lucky Tickets(生成函数)

    传送门 题意简述:现在有一些号码由000~999中的某些数字组成(会给出),号码总长度为nnn,问有多少个号码满足前n2\frac n22n​个数码的和等于后n2\frac n22n​个数码的和(保证 ...

  4. (20)The most mysterious star in the universe

    https://www.ted.com/talks/tabetha_boyajian_the_most_mysterious_star_in_the_universe/transcript00:12E ...

  5. Codeforces Round #519 by Botan Investments F. Make It One

    https://codeforces.com/contest/1043/problem/F 题意 给你n个数,求一个最小集合,这个集合里面数的最大公因数等于1 1<=n<=3e5 1< ...

  6. jq 某个时间段的倒计时

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. s4-5 以太网帧

    以太网所处的层次 IEEE 802.3/以太网MAC子层协议  IEEE802.3协议描述了运行在各种介质上1 Mb/s~10 Mb/s的1- 持续CSMA/CD协议的局域网标准.  很多人对以太 ...

  8. JDK 1.5、1.6 & 中文版API,J2EE5API大全(借鉴)

    个人分类: Java文档           Sun 公司提供的Java API Docs是学习和使用Java语言中最经常使用的参考资料之一.但是长期以来此文档只有英文版,对于中国地区的Java开发者 ...

  9. mysql学习之路_连接查询

    回顾 列属性:主键,自增长,唯一键. 关系:一对一,一对多,多对多 三层范式: 1NF:字段设计必须符合原子性 2NF:不存在部分依赖(没有复合主键) 3NF:不存在传递依赖(实体单独成表) 逆规范化 ...

  10. svn 提交代码 自动过滤技巧

    操作 在用svn管理版本时,有时希望在提交到服务器时,能过滤掉指定后缀名的所有文件,或指定名称的文件夹.文件名. 常见的文件夹名称和文件名如下: bin obj debug temppe *.suo ...