Git 基础 - 回滚撤销commit

1 ###################################################################[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git dog
* db69602 (HEAD -> dev) add test_reset.md
* fab7157 dev修改READM.md
* 217fef2 (origin/master, origin/HEAD, master) Update README.md,添加日期
* a565481 (origin/dev) Update README.md
*   19cfeea 第一次将远程dev分支代码合并到master分支Merge branch ‘dev‘
|\
| * b1777d8 commit merge_excel_utils
| * ee37473 manage utils
| * 0b6e16c commit files
* | 441940f 添加项目说明
|/
* 0f1f9d7 Initial Commit

[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git reset dev^ #撤销上一次commit
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git dog
* fab7157 (HEAD -> dev) dev修改READM.md
* 217fef2 (origin/master, origin/HEAD, master) Update README.md,添加日期
* a565481 (origin/dev) Update README.md
*   19cfeea 第一次将远程dev分支代码合并到master分支Merge branch ‘dev‘
|\
| * b1777d8 commit merge_excel_utils
| * ee37473 manage utils
| * 0b6e16c commit files
* | 441940f 添加项目说明
|/
* 0f1f9d7 Initial Commit

2 #########################################################################
分三次commit 分别commit test_reset1.md、test_reset2.md、test_reset3.md 到暂存区

[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git dog
* 7622464 (HEAD -> dev) test_reset3.md
* 56afa1e test_reset2.md
* 4797045 add test_reset1.md
* fab7157 dev修改READM.md
* 217fef2 (origin/master, origin/HEAD, master) Update README.md,添加日期
* a565481 (origin/dev) Update README.md
*   19cfeea 第一次将远程dev分支代码合并到master分支Merge branch ‘dev‘
|\
| * b1777d8 commit merge_excel_utils
| * ee37473 manage utils
| * 0b6e16c commit files
* | 441940f 添加项目说明
|/
* 0f1f9d7 Initial Commit
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git reset dev^^^ #撤销最近三次的commit【或git rest dev~5】
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git dog
* fab7157 (HEAD -> dev) dev修改READM.md
* 217fef2 (origin/master, origin/HEAD, master) Update README.md,添加日期
* a565481 (origin/dev) Update README.md
*   19cfeea 第一次将远程dev分支代码合并到master分支Merge branch ‘dev‘
|\
| * b1777d8 commit merge_excel_utils
| * ee37473 manage utils
| * 0b6e16c commit files
* | 441940f 添加项目说明
|/
* 0f1f9d7 Initial Commit

--hard
工作目录和暂存区的文件都会丢弃
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git dog
* 3a7c43c (HEAD -> dev) add  test_reset1.md,test_reset2.md,test_reset3.md #最近的一次commit
* 217fef2 (origin/master, origin/HEAD, master) Update README.md,添加日期 #尝试回退到该版本
| * 4e893c1 (origin/dev) add  test_reset1.md,test_reset2.md,test_reset3.md
|/
* a565481 Update README.md
*   19cfeea 第一次将远程dev分支代码合并到master分支Merge branch ‘dev‘
|\
| * b1777d8 commit merge_excel_utils
| * ee37473 manage utils
| * 0b6e16c commit files
* | 441940f 添加项目说明
|/
* 0f1f9d7 Initial Commit
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git reset --hard 217fef2 #hard模式回退
HEAD is now at 217fef2 Update README.md,添加日期
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git st #工作区 和 暂存区都是空的
On branch dev
Your branch and ‘origin/dev‘ have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

nothing to commit, working tree clean
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ ll # 三个文件 test_reset1.md,test_reset2.md,test_reset3.md 在工作区被删除
total 24
drwxr-xr-x  10 walker  staff   320B  2  2 22:10 .
drwxr-xr-x   9 walker  staff   288B  2  2 22:03 ..
-rw-r--r--   1 walker  staff   6.0K  2  2 20:16 .DS_Store
drwxr-xr-x  15 walker  staff   480B  2  2 22:10 .git
-rw-r--r--   1 walker  staff    73B  2  2 22:10 README.md
-rw-r--r--   1 walker  staff     0B  2  2 13:08 __init__.py
drwxr-xr-x   7 walker  staff   224B  2  2 13:08 __pycache__
drwxr-xr-x   9 walker  staff   288B  2  2 13:08 data
drwxr-xr-x   6 walker  staff   192B  2  2 13:08 merge
drwxr-xr-x   8 walker  staff   256B  2  2 13:08 utils
--mixed丢掉暂存区文件,但是不会丢弃工作目录的文件【默认是这种模式】
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git dog
* 4e893c1 (HEAD -> dev, origin/dev) add  test_reset1.md,test_reset2.md,test_reset3.md #最新的一次提交
| * 217fef2 (origin/master, origin/HEAD, master) Update README.md,添加日期 #测试回退到该版本
|/
* a565481 Update README.md
*   19cfeea 第一次将远程dev分支代码合并到master分支Merge branch ‘dev‘
|\
| * b1777d8 commit merge_excel_utils
| * ee37473 manage utils
| * 0b6e16c commit files
* | 441940f 添加项目说明
|/
* 0f1f9d7 Initial Commit
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git reset 217fef2 #默认--mixed 模式
Unstaged changes after reset:
M    README.md
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git st #reset之后,暂存区中的文件也被删除
On branch dev
Your branch and ‘origin/dev‘ have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

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

Untracked files:
  (use "git add <file>..." to include in what will be committed) # 但是工作目录中的文件还存在

    test_reset1.md
    test_reset2.md
    test_reset3.md

no changes added to commit (use "git add" and/or "git commit -a")
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ ll #工作目标中的文件还存在
total 48
drwxr-xr-x  13 walker  staff   416B  2  2 22:02 .
drwxr-xr-x   9 walker  staff   288B  2  2 22:03 ..
-rw-r--r--   1 walker  staff   6.0K  2  2 20:16 .DS_Store
drwxr-xr-x  15 walker  staff   480B  2  2 22:05 .git
-rw-r--r--   1 walker  staff    54B  2  2 22:00 README.md
-rw-r--r--   1 walker  staff     0B  2  2 13:08 __init__.py
drwxr-xr-x   7 walker  staff   224B  2  2 13:08 __pycache__
drwxr-xr-x   9 walker  staff   288B  2  2 13:08 data
drwxr-xr-x   6 walker  staff   192B  2  2 13:08 merge
-rw-r--r--   1 walker  staff    15B  2  2 19:57 test_reset1.md
-rw-r--r--   1 walker  staff    15B  2  2 19:57 test_reset2.md
-rw-r--r--   1 walker  staff    15B  2  2 19:57 test_reset3.md
drwxr-xr-x   8 walker  staff   256B  2  2 13:08 utils
--soft工作目录和暂存区的文件都不会丢弃
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git dog
* f9069ec (HEAD -> dev) add  test_reset1.md,test_reset2.md,test_reset3.md #本地dev分支最近一次提交
* 217fef2 (origin/master, origin/HEAD, master) Update README.md,添加日期 #尝试回退到该版本
| * 4e893c1 (origin/dev) add  test_reset1.md,test_reset2.md,test_reset3.md
|/
* a565481 Update README.md
*   19cfeea 第一次将远程dev分支代码合并到master分支Merge branch ‘dev‘
|\
| * b1777d8 commit merge_excel_utils
| * ee37473 manage utils
| * 0b6e16c commit files
* | 441940f 添加项目说明
|/
* 0f1f9d7 Initial Commit
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git reset --soft 217fef2 #回退到该版本
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git st # 暂存区中的文件还存在
On branch dev
Your branch and ‘origin/dev‘ have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   test_reset1.md
    new file:   test_reset2.md
    new file:   test_reset3.md

[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ ll #工作目录中的文件也还存在
total 48
drwxr-xr-x  13 walker  staff   416B  2  2 22:14 .
drwxr-xr-x   6 walker  staff   192B  2  2 22:14 ..
-rw-r--r--   1 walker  staff   6.0K  2  2 20:16 .DS_Store
drwxr-xr-x  15 walker  staff   480B  2  2 22:15 .git
-rw-r--r--   1 walker  staff    73B  2  2 22:10 README.md
-rw-r--r--   1 walker  staff     0B  2  2 13:08 __init__.py
drwxr-xr-x   7 walker  staff   224B  2  2 13:08 __pycache__
drwxr-xr-x   9 walker  staff   288B  2  2 13:08 data
drwxr-xr-x   6 walker  staff   192B  2  2 13:08 merge
-rw-r--r--   1 walker  staff    15B  2  2 19:57 test_reset1.md
-rw-r--r--   1 walker  staff    15B  2  2 19:57 test_reset2.md
-rw-r--r--   1 walker  staff    15B  2  2 19:57 test_reset3.md
drwxr-xr-x   8 walker  staff   256B  2  2 13:08 utils

执行完git reset --hard 之后被丢失的  test_reset1.md,test_reset2.md,test_reset3.md 三个文件如何找回:

[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git reflog
217fef2 (HEAD -> dev, origin/master, origin/HEAD, master) [email protected]{0}: reset: moving to 217fef2 #上一次reset
8176e66 [email protected]{1}: commit: add test_reset1.md,test_reset2.md,test_reset3.md #上一次添加三个文件,回退到该版本即可
217fef2 (HEAD -> dev, origin/master, origin/HEAD, master) [email protected]{2}: reset: moving to 217fef2
f9069ec [email protected]{3}: commit: add test_reset1.md,test_reset2.md,test_reset3.md
217fef2 (HEAD -> dev, origin/master, origin/HEAD, master) [email protected]{4}: reset: moving to 217fef2
3a7c43c [email protected]{5}: commit: add test_reset1.md,test_reset2.md,test_reset3.md
217fef2 (HEAD -> dev, origin/master, origin/HEAD, master) [email protected]{6}: reset: moving to 217fef2
4e893c1 (origin/dev) [email protected]{7}: commit: add test_reset1.md,test_reset2.md,test_reset3.md
a565481 [email protected]{8}: reset: moving to a565481
217fef2 (HEAD -> dev, origin/master, origin/HEAD, master) [email protected]{9}: reset: moving to 217fef2

[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ git reset --hard 8176e66
HEAD is now at 8176e66 add  test_reset1.md,test_reset2.md,test_reset3.md
[@wooluwalkerdeMacBook-Pro:wenjian (dev)]$ ll # 工作区中的三个文件还存在
total 48
drwxr-xr-x  13 walker  staff   416B  2  2 22:27 .
drwxr-xr-x   6 walker  staff   192B  2  2 22:14 ..
-rw-r--r--   1 walker  staff   6.0K  2  2 20:16 .DS_Store
drwxr-xr-x  15 walker  staff   480B  2  2 22:27 .git
-rw-r--r--   1 walker  staff    73B  2  2 22:10 README.md
-rw-r--r--   1 walker  staff     0B  2  2 13:08 __init__.py
drwxr-xr-x   7 walker  staff   224B  2  2 13:08 __pycache__
drwxr-xr-x   9 walker  staff   288B  2  2 13:08 data
drwxr-xr-x   6 walker  staff   192B  2  2 13:08 merge
-rw-r--r--   1 walker  staff    15B  2  2 22:27 test_reset1.md
-rw-r--r--   1 walker  staff    15B  2  2 22:27 test_reset2.md
-rw-r--r--   1 walker  staff    15B  2  2 22:27 test_reset3.md
drwxr-xr-x   8 walker  staff   256B  2  2 13:08 utils

原文地址:https://www.cnblogs.com/wooluwalker/p/12254050.html

时间: 2024-08-27 17:05:28

Git 基础 - 回滚撤销commit的相关文章

Git误操作 git reset强制回滚 恢复commit方法

参考: 找回Git中丢失的Commit Git误操作 git reset强制回滚 恢复commit方法 使用Git时,常有误操作,在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时Commmit记录也消失了. 此时解决方法是通过git reflog来查看先前记录并恢复: git reflog会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的时候,这些操作会

git本地代码回滚

git本地操作有时会有误删误改并提交的时候,此时可以通过回滚获得之前的特定版本 1. 查看log 输入  git log  查看commit记录 [xxxxxxx]$ git log 结果大致如下(根据实际的commit操作不同,显示结果也会有所不同) commit 7d72d974a9ed718dc1f50194879d4409a9f5db4b (origin/qxw) Merge: 99f3694 789a222 Author: taochengye <[email protected]>

git代码回滚:Reset、Checkout、Revert的选择

代码回滚:Reset.Checkout.Revert的选择 Zhongyi Tong edited this page on Dec 8, 2015 · 5 revisions Pages 19 Home 2.1 快速指南 2.2 创建代码仓库 2.3 保存你的更改 2.4 检查仓库状态 2.5 检出之前的提交 2.6 回滚错误的修改 2.7 重写项目历史 3.2 保持同步 3.3 创建Pull Request 3.4 使用分支 3.5 常见工作流比较 4.1 图解Git命令 5.1 代码合并:

Android Studio如何回滚已经commit的代码

对于commit(不是push)的代码如何回滚,这块对于刚转到git的开发者还是比较陌生的.今天我来说下这块的内容: 按照惯例,先上图,下图是还没有commit任何代码的push界面,这个时候是没有commit任何内容的: 然后我修改了string.xml的内容,并且执行了commit操作: 接下来就要说如何进行revert commit了,通过选中工程,点击右键,在弹出的列表中选择Git-->Repository-->Reset HEAD...,有些人可能会说我右键弹出来的列表中没有发现有G

#4.Git版本回滚

实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么.版本控制系统肯定有某个命令可以告诉我们历史记录, >1.在Git中,我们用git log命令查看: >2.如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数: 每提交一个新版本,实际上Git就会把它们自动串成一条时间线.如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线. >3.如何回退到上一个版本或指定版本 Git必须知道当前版本是哪个版本

git版本回滚

先说今天遇到的问题,看到一个config.php的配置文件一直在修改的状态下,但是和远程的config.php是不一致的,我不需要提交它,但是看它在 modified的状态下,很不爽,想删除它,git   rm  config.php,然后git push了下,结果不仅把本地的config.php干掉了,把远程的config.php也给干掉了,,原来这个git rm有这样的功效,而且我 删除的不只是这一个文件,还有n个文件. 想到要回滚到最近的一次提交.做这个工作前,提醒下,在本地直接把代码备份

git 强制回滚【覆盖】远程 源码库

场景: 1.代码中没有删除密钥信息就提交到gitlab或者github 上了 2.想要删除gitlab或者github 上已经提交的源码和记录,避免其他人通过gitlab控制台看到密钥信息 操作: 1.通过 git log   确定需要回滚到 某个提交的 commit id 2.git reset --soft commit_id   //--soft 只回滚提交,不会删除提交记录,辛苦编写的代码功能还依然存在:--hard 则把提交记录和已经辛苦编写的代码彻底回滚删除 3.强制提交,覆盖远程g

git代码回滚

有时候我们用git提交代码后发生了错误,代码冲突了啊等等,我们需要将代码回到以前的某个版本 git代码回退有两种办法 一.git reset(推荐): 它是将最新的commit删除,用以前的某个版本的代码替代最新的代码,这里我们测试下 这里有很多的commit,我现在想将代码退回到第三个commit的时候,如果是用git命令,在项目的根目录就是有.git隐藏文件的目录,右击打开黑窗口 git reset --hard d83053a1a3ad6e169300b70a1f38b8b3d13d857

Git 基础教程 之 撤销修改

Git跟踪并管理的是修改,而非文件.每次修改,如果不用git add到暂存区,那就不会加入到commit中, 要么全部改完后,再add → commit :要么改一点,就add → commit. 撤销修改 场景1:当你该乱工作区某个文件内容,想直接丢弃修改是,用命令:       git checkout -- readme.txt PS: git diff HEAD -- readme.txt比较版本库和工作区文件的区别 场景2:当你不仅改乱了工作区某个文件的内容,还添加到了暂存区,想丢弃修