Git学习 - 3【版本回退及操作回退】-廖老师博客学习

本文深入解析Git版本控制系统的核心操作,包括如何查看提交历史、版本回退与前进、撤销修改及文件删除等关键流程。通过具体示例,阐述了如何利用git log、git reset、git checkout等命令进行版本管理和代码恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

处理版本回退

1,有哪些版本,查看日志看我们都做了哪些提交

git log

commitId : commit xxxxxxxxxxxxxxxxx每次提交生成的唯一代码
author : xxxxxxx 谁提交的
Date :xxxxxxxxxxx 提交日期
在这里插入图片描述
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数,参数--abbrev-commit 可以缩短commitId
在这里插入图片描述

2、版本的回退 前进

git reset --hard  commitId

回退 :
还记得上边 git status中的注释吗?

(use "git reset HEAD <file>..." to unstage)  
# 从缓存区重置回工作区

  HEAD表示当前版本,当一个文件修改到暂存区还没提交时,可以执行 git reset HEAD xxxxx将该文件在暂存区的内容重置为最新的版本,相当于将修改的退回给工作区,清空暂存区提交的内容。

  回退到上一个版本 git reset --hard HEAD^

[root@sf160114 learnGit]# git reset --hard HEAD^
HEAD is now at e215485 只提交redeme。txt的第三次修改

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

git reset --hard HEAD~N   回退N个版本
git reset --hard 49adedd 回退到版本49adedd
  此时,再查看日志就找不到最新的那条日志了,因为所有的版本已经回退了。
在这里插入图片描述
前进 :
  当我们回退了版本后,后悔了,想把版本恢复回去要怎么办呢??

  git reset --hard  commitId

commitId:可以为完整的40位,也可以是不冲突的前边一部分即可

  Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是改变HEAD的指向:
在这里插入图片描述
  可是当我们的回退版本后已经看不到最新的版本的日志了,我们想把HEAD指针指向之前的新版本该怎么办呢?
git reflog 可以看到之前的所有的版本 我们要前进的版本为 0b89000
在这里插入图片描述

[root@sf160114 learnGit]# git reset --hard 0b89000
HEAD is now at 0b89000 只提交ys.txt的第三次提交

现在总结一下:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 前进回退前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
    在这里插入图片描述
    提交只会提交暂存区域的修改,工作区域的不会提交!!

操作回退

 撤销修改内容

1,修改尚未提交到暂存区 (丢弃工作区修改)
   git checkout -- 文件名   将工作区内容还原
  一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
  总之,就是让这个文件回到最近一次git commit或git add时的状态

2,修改已提交到暂存区,但未提交到版本库(丢弃暂存区修改)
   git reset HEAD <file>
  把暂存区的修改撤销掉(unstage),重新放回工作区,可以再次丢弃暂存区修改

3,修改已提交到版本库,但未推送到远程版本库
回退版本:git reset -- hard commitId

4,修改已推送到远程版本库
   鸡鸡!!!

 文件删除与撤销删除

1, 当你要删除某一个文件的时候,执行

	git   rm  xxxxx
该操作将同时删除版本库和本地工作区域的文件xxxxx

该删除操作将同时提交到暂存区
[root@sf160114 learnGit]# git rm test.txt
rm 'test.txt'
[root@sf160114 learnGit]# git status
# On branch master
# Changes to be committed:  rm完之后改变就已经进入暂存区可用于提交了
#   (use "git reset HEAD <file>..." to unstage)
#
#	deleted:    test.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	`

  我们上边提到,提交到暂存区的修改,可以使用git reset HEAD test.txt撤销回工作区,然后再从工作区撤销回原始状态。

[root@sf160114 learnGit]# git rm ys.txt
rm 'ys.txt'
[root@sf160114 learnGit]# git status
# 删除之后直接到了暂存区,用于提交
# On branch feature1
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	deleted:    ys.txt
#
[root@sf160114 learnGit]# git reset HEAD ys.txt
Unstaged changes after reset:
D	ys.txt
[root@sf160114 learnGit]# git status
# 已撤销回工作区
# On branch feature1
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	deleted:    ys.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@sf160114 learnGit]# git checkout -- ys.txt
[root@sf160114 learnGit]# git status
# On branch feature1
nothing to commit, working directory clean

  也可以直接找到最后一次提交的commitId,直接将其重置为最后一次提交的状态。

[root@sf160114 learnGit]# git rm ys.txt
rm 'ys.txt'
[root@sf160114 learnGit]# ls
`  readme.txt
[root@sf160114 learnGit]# git log --pretty=oneline --abbrev-commit
574d922 x
3116d0c AND simple
1421390 删除一个测试文件
192e348 提交一个测试文件
0b89000 只提交ys.txt的第三次提交
e215485 只提交redeme。txt的第三次修改
ef5ff6c 提交两个文件的修改
49aded3 添加第二个文件
3a755eb wrote a readme file
[root@sf160114 learnGit]# git status
# On branch feature1
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	deleted:    ys.txt
#
[root@sf160114 learnGit]# git reset --hard 574d922
HEAD is now at 574d922 x
[root@sf160114 learnGit]# git status
# On branch feature1
nothing to commit, working directory clean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值