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

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

简介

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

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

命令

作用

git checkout  <pathspec>

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

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

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

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

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

命令 作用
git checkout <branch>

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

不会detach head

git checkout [--detach] <commit>

git checkout --detach [<branch>]

恢复本地仓库某个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.回退到上个版本

git reset --hard HEAD^        回退到上个版本
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 

其他网址

git回滚到某个commit 上和 返回最新的版本git - 开始战斗 - 博客园

用git如何把单个文件回退到某一版本 - dzwaM - 博客园

git 所有撤销和回退命令_运维_大头大头编码不愁-CSDN博客

猜你喜欢

转载自blog.csdn.net/feiying0canglang/article/details/126398434