文章目录

  • 1.工作前先查看日志
  • 2.修改已 commit 的版本
  • 3.reset 回到 add 之前
  • 4.reset 回到 commit 之前

1.工作前先查看日志

$ git log --oneline

2.修改已 commit 的版本

有时候我们总会忘了什么, 比如已经提交了 commit 却发现在这个 commit 中忘了附上另一个文件. 接下来我们模拟这种情况. 上节内容中, 我们最后一个 commit 是 change 2, 我们将要添加另外一个文件, 将这个修改也 commit 进 change 2. 所以我们复制 1.py 这个文件, 改名为 2.py. 并把 2.py 变成 staged, 然后使用 --amend 将这次改变合并到之前的 change 2 中.

$ git add 2.py
$ git commit --amend --no-edit   # "--no-edit": 不编辑, 直接合并到上一个 commit
$ git log --oneline    # "--oneline": 每个 commit 内容显示在一行# 输出
904e1ba change 2    # 合并过的 change 2
c6762a1 change 1
13be9a7 create 1.py

3.reset 回到 add 之前

有时我们添加 add 了修改, 但是又后悔, 并想补充一些内容再 add. 这时, 我们有一种方式可以回到 add 之前. 比如在 1.py 文件中添加这一行:

d = 3

文件从修改(modified)状态到staged状态

$ git add 1.py
$ git status -s # "-s": status 的缩写模式
# 输出
M  1.py     # staged


接下来我们想回到modified状态执行以下语句:

$ git reset 1.py
# 输出
Unstaged changes after reset:
M   1.py
-----------------------
$ git status -s
# 输出M 1.py     # unstaged

4.reset 回到 commit 之前

每个 commit 都有自己的 id 数字号, HEAD 是一个指针, 指引当前的状态是在哪个 commit. 最近的一次 commit 在最右边, 我们如果要回到过去, 就是让 HEAD 回到过去并 reset 此时的 HEAD 到过去的位置.

# 不管我们之前有没有做了一些 add 工作, 这一步让我们回到 上一次的 commit
$ git reset --hard HEAD
# 输出
HEAD is now at 7338690 change 2
-----------------------
# 看看所有的log
$ git log --oneline
# 输出
7338690 (HEAD -> master) change 2
49f05cc change 1
4e6aee2 create 1.py

# 回到 49f05cc change 1
# 方式1: "HEAD^"
$ git reset --hard HEAD^  # 方式2: "commit id"
$ git reset --hard 49f05cc
-----------------------
# 看看现在的 log
$ git log --oneline
# 输出
49f05cc (HEAD -> master) change 1
4e6aee2 create 1.py


怎么 change 2 消失了!!! 还有办法挽救消失的 change 2 吗? 我们可以查看 $ git reflog 里面最近做的所有 HEAD 的改动, 并选择想要挽救的 commit id:

$ git reflog
# 输出
49f05cc (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
7338690 HEAD@{1}: reset: moving to HEAD
7338690 HEAD@{2}: commit (amend): change 2
c911905 HEAD@{3}: commit: change 2
49f05cc (HEAD -> master) HEAD@{4}: commit: change 1
4e6aee2 HEAD@{5}: commit (initial): create 1.py


重复 reset 步骤就能回到 commit (amend): change 2 (id=904e1ba)这一步了

$ git reset --hard 7338690
#输出
HEAD is now at 7338690 change 2
$ git log --oneline
#输出
7338690 (HEAD -> master) change 2
49f05cc change 1
4e6aee2 create 1.py


我们又再次奇迹般的回到了 change 2.

Git教程——回到从前 (reset)相关推荐

  1. Git教程——回到从前 (checkout 针对单个文件)

    文章目录 1.前言 2.改写文件 checkout 1.前言 之前我们使用 reset 的时候是针对整个版本库, 回到版本库的某个过去. 不过如果我们只想回到某个文件的过去, 又该怎么办呢? 2.改写 ...

  2. 【Git】Git教程

    尊重原创:https://blog.csdn.net/fuqiuai/article/details/79495834 基本操作 1.安装git: sudo apt-get install git 安 ...

  3. 《廖雪峰 . Git 教程》学习总结

    基本上,Git就是以下面的命令顺序学习的.文中笔记是从廖雪峰老师的 Git教程 中总结出来的,方面查阅命令. 1.基础 git config --global user.name "Your ...

  4. Git教程学习总结(分享给热爱学习的你,团队的协作离不开你呀)

    目录 Git 教程 Git 安装配置 Git 工作流程 Git 工作区.暂存区和版本库 Git 创建仓库 Git 基本操作 Git 分支管理 Git 查看提交历史 git log git blame ...

  5. Git 教程 - Git 基本用法

    Git 是当前最流行的版本控制程序之一,文本包含了 Git 的一些基本用法 创建 git 仓库 初始化 git 仓库 mkdir project  # 创建项目目录  cd project  # 进入 ...

  6. Git教程-帮助开发人员更好的运用Git | 云效

    导读:Git教程-帮助开发人员更好的运用Git,Git 作为分布式版本控制工具,近年来越来越受欢迎,很多公司.开发人员开始使用 Git 来替代 SVN.本片文章重点介绍了关于云效对开发人员使用Git更 ...

  7. 廖雪峰的GIT教程-读书笔记

    文章目录 廖雪峰的GIT教程 什么是GIT 集中式vs分布式版本控制系统 分支管理 创建版本库 GIT的版本回退 工作区和暂存区 工作区(Working Directory) 版本库(Reposito ...

  8. 廖雪峰Git教程笔记与总结 -- Git简介、常用命令、分支管理

    本文主要用于记录阅读Git教程 - 廖雪峰的官方网站后的一些心得笔记,并且对git一些常用命令做一个整理总结. 本文要点分为:1.Git简介:2.Git常用命令:3.Git分支管理. 一.Git简介 ...

  9. 深入浅出Git教程(转载)

    目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式版本控制 1.5 ...

最新文章

  1. 【深度学习】U型的Transfomer网络(Swin-Unet)和Swin-Transformer分类
  2. Jquery 改变样式
  3. 机器学习入门--进阶资料和流程建议
  4. gview java_java - 如何在干净模式下运行eclipse? 如果我们这样做会发生什么?
  5. logstash redis kafka传输 haproxy日志
  6. java入栈_java中代码块的执行,也会有入栈的步骤吗?
  7. 苹果x翻新机序列号开头_Android翻新电话每隔X秒
  8. AM3352启动分析:
  9. flash 绘图API:绘制秀曲线图形
  10. html php连接mysql数据库连接,PHP如何连接MySQL数据库?附两种方法!
  11. Linux下Mongodb安装和启动配置
  12. 计算机视觉技术与应用综述
  13. 只需要10秒,使用PPT给证件照换底色
  14. linux中的 bin sh,Linux-#!/bin/sh理解
  15. 安卓获取手机唯一码工具类
  16. 使用Qt通过Post发送Json格式数据
  17. 根据一段时间区间,按月份拆分成多个时间段
  18. 雅佳5000音色中英文对照表 AKAI EWI5000
  19. 为什么现在开发这么累呢?
  20. stm32的点亮led的基础知识

热门文章

  1. Ubuntu 16.04服务器 配置
  2. windows配置mysql5.6免安装版
  3. keystroke java_Java KeyStroke.getCharacter方法代码示例
  4. 图片列表模板 html代码,图片列表模板
  5. CXF之jaxws:endpoint对spring bean的引用
  6. PHP32向右位移2位是多少,PHP的二进制位移操作
  7. python123第四周作业_科学计算和可视化
  8. spring boot 支持多少人在线_通过 spring-boot-starter-hbase 集成 HBase
  9. JavaWeb——servlet介绍
  10. 游戏服务器的架构设计(一点参考,实际价值似乎不大……)