• git--恢复/撤销 相关命令--使用/实例


    原文网址:git--恢复/撤销 相关命令--使用/实例_IT利刃出鞘的博客-CSDN博客

    简介

            本文介绍git恢复和撤销相关的命令。

    检出(从暂存区恢复到工作区)

    命令

    作用

    git checkout  

    恢复暂存区的指定文件到工作区。

    项为“.”,则恢复暂存区的所有文件到工作区。

    用于撤销本地的修改。常用撤销命令:git checkout .

    解决“HEAD detached from”问题。命令:git checkout

    检出(从本地仓库恢复到暂存区和工作区)

    命令作用
    git checkout

    恢复本地仓库某个commit的文件到暂存区和工作区。

    不会detach head

    git checkout [--detach]

    git checkout --detach []

    恢复本地仓库某个commit的文件到暂存区和工作区。

    而且会detach head

    git checkout [tag_name]

    恢复本地仓库某个tag的文件到暂存区和工作区。

    重置(撤销git add/commit)

    命令

    作用

    git reset [file]

    重置暂存区的指定文件,但工作区不变。

    用于git add的撤销。常用: git reset head .

    git reset [mode] [commit]

    重置当前分支的HEAD为指定commit。此[commit]之后的[commit]会彻底删除

    commit:可不写,默认是HEAD。可写为HEAD^,表示上一次commit;HEAD~3:表示3次提交前。

    mode:可不写,默认是mixed。

    用于git commit的撤销。常用:git reset --soft HEAD^; git reset --soft [commit]

    用于本地代码回退。       常用:git reset --hard HEAD; git reset --hard [commit]

    git reset的mode

    mode

    作用

    --soft

    版本库改变。暂存区不变。工作区不变。  //HEAD指向给定提交

    --mixed

    版本库改变。暂存区改变。工作区不变。//重置暂存区到指定commit

    (git reset默认的模式)

    --hard

    版本库改变。暂存区改变。工作区改变。//三者全都同步到给定提交

    所有工作区追踪的文件的修改都丢弃(若远程已删除相关文件,则git push之后,本地文件也会直接被删掉!)。

    --merge

    重置暂存区到指定commit,更新工作区[commit]与当前HEAD不一样的地方,工作区与暂存区不一样的地方保持不变。

    --keep

    重置暂存区到指定commit,更新工作区[commit]与当前HEAD不一样的地方。如果[commit]与当前HEAD不一致的文件在本地有了修改,则取消操作。

    回滚(撤销git push)

    命令作用

    git revert [commit]

    重置当前分支的HEAD为指定commit。此[commit]之后的[commit]保持不变

    用于git push的撤销。常用:git revert [commit]; git commit xxx; git push

    git stash

    git stash pop

    暂时将未提交的变化移除,稍后再移入。

    git reset --hard的作用

    已commit的恢复

    1.找到之前提交的版本

    git reflog

    2.恢复到上一版本

    git reset --soft head^

    之后就可以git add;git commit等

    未commit但add过的恢复

    此时git reflog没有对应信息。

    1. 打印未commit的信息

    git fsck --lost-found 

    2.打印误删除的文件内容

    git show xxx

    xxx为上边打印出的dangling blob后边的一大长串字符串。

    3.打印commit和tree内容

    git cat-file -p xxx 

            xxx为上边打印出的dangling commit后边的一大长串字符串。执行完后打印commit和tree内容
            可把这个commit合并到我们的分支里。可通过reset merge rebase cherry-pick这些命令来合commit。

    4.列出tree下面的文件名和id的记录信息

    git ls-tree xxx 

    xxx为上边打印出的dangling commit后边的一大长串字符串。

    执行完后列出tree下面的文件名和id的记录信息,然后就可以根据blob的id来恢复文件了回滚到某个版本的命令

    将所有代码回滚到某个commit

    1.查看要回到的那个版本

    git log

    2.回退到上个版本

    1. git reset --hard HEAD^ 回退到上个版本
    2. git reset --hard commit_id 退到/进到 指定commit_id

    3.把回退的某个版本提交到远程

    git push origin HEAD --force

    回滚之后,又后悔了,想恢复到新的版本怎么办?用git reflog打印你的每一次操作记录。

    git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能查看已经删除了的commit记录,而且跟进结果可以回退到某一个修改。

    把单个文件回退到某一版本

    暂定此文件为a.jsp 

    1.查看a.jsp的更改记录

    到a.jsp所在目录:

    git  log a.jsp

    找到想要回退的版本号:例如 fcd2093

    2.回退文件版本

    git reset  fcd2093 a.jsp

    3.提交本次回退

    git commit -m "注释内容" 

    4.选中该文件

    git checkout a.jsp 

    5.push到远程目录

    git push 

     粉丝福利:有很多粉丝私信问我有没有Java的面试及PDF书籍等资料,我整理一下,包含:真实面试题汇总、简历模板、PDF书籍、PPT模板等。这些是我自己也在用的资料,面试题是面试官问到我的问题的整理,其他资料也是我自用的,真正实用、靠谱。资料可以从这里免费获取:资料地址

  • 相关阅读:
    Unity - ScriptableObject
    【block作为函数参数的应用案例之一 Objective-C语言】
    查询服务器上所有SQL SERVER数据库中是否包含某个字段,且该字段是否包含某个值
    NVIDIA JETSON AGX XAVIER DEVELOPER KIT刷机教程(各种踩雷篇)
    猿创征文| 动规了解
    Spring学习笔记5 GoF之工厂模式
    如果忘记了 iPhone 密码
    helm一键部署grafana
    【开题报告】基于JavaWeb的奢侈品选购平台的设计与实现
    PTA 7-25 整数的分类处理分数 20
  • 原文地址:https://blog.csdn.net/feiying0canglang/article/details/126398434