Git 常用回滚撤销命令总结

Git 一个开源的分布式版本控制系统,最常用于代码开发过程中版本控制

这里简单总结记录一下git常用命令,最主要是由于某些原因提交错误要进行回滚撤销操作。

目录

  • Git 相关概念
    • 1 工作区
    • 2 暂存区
    • 3 本地版本库
    • 4 远程版本库
    • 5 HEAD 和 origin
      • HEAD
      • origin
  • 版本回滚撤销
    • 场景1 工作区文件还没有add到暂存区
    • 场景2 已经add到暂存区但没有commit
    • 场景3 已经commit到本地仓库但没有push到远程仓库
    • 场景3 已经push到远程仓库
    • git reflog
    • 场景4 已经push到远程仓库,但只想撤销某一次的提交

Git 相关概念

1 工作区

你电脑上的本地目录,该目录中存放着将要或者已经被Git所管理的项目文件

2 暂存区

英文叫 stageindex。一般存放在工作区 .git 目录下的 index 二进制文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

3 本地版本库

工作区有一个隐藏目录 .git,这个是 Git 的版本库。

4 远程版本库

一般服务器上(如:Github或者自己搭建的Gitlab)会存在一个项目文件的版本库,服务器上的版本库就叫远程版本库。

 git pull 命令
从远程的版本库clone 拉取文件到本地版本库

 git push 命令
从本地版本库推送更新的文件到远程版本库,达到本地和远程文件一致

Git 常用回滚撤销命令总结_第1张图片

5 HEAD 和 origin

一般采用 git log 命令查看如下内容:
Git 常用回滚撤销命令总结_第2张图片
这里面的 HEAD origin是什么意思?

HEAD

可以将 HEAD 看做当前工作区文件所属的是哪一个分支

origin

指的就是远程仓库

上面图中 git log 后的第一条信息:

commit a3bc6e672da90112565e76b50474e2b09ab99a99 (HEAD -> master, origin/master, origin/HEAD)

表示 当前本地电脑上的文件归属 master 分支(HEAD -> master), 本次commit后也推送到了远程master上

版本回滚撤销

场景1 工作区文件还没有add到暂存区

使用 git status 查看当前工作区状态
Git 常用回滚撤销命令总结_第3张图片

$ git checkout -- aaa.txt  # 丢弃文件 aaa.txt的修改

$ git checkout -- .        # 丢弃全部没有提交的文件的修改

注意:
该命令将丢弃文件的全部修改,回到和远程服务器上版本一致

场景2 已经add到暂存区但没有commit

Git 常用回滚撤销命令总结_第4张图片

$ git reset HEAD  aaa.txt    # 取消暂存,将文件重置回场景1

$ git reset HEAD .          #  取消刚刚add的所有文件的暂存,将文件重置回场景1

该命令不会丢弃文件的修改,如果你还想丢弃这两个文件的全部修改,参考 场景1的方法

场景3 已经commit到本地仓库但没有push到远程仓库

Git 常用回滚撤销命令总结_第5张图片
使用 git log 命令可以发现,当前本地版本库的版本要高于远程版本,也就是说已经commit了但没有push,此时可以采用下面的命令回滚本地仓库。

$ git reset --hard   # 回到其中你想要的某个版

可以使用 git log 命令查看每一次提交的信息

注意:例如上图,commit_id 应该是 “测试提交1”的commitId

场景3 已经push到远程仓库

$ git reset --hard   # 回到其中你想要的某个版

$ git push origin HEAD --force # 强制提交远程 此时本地远程仓库版本一致,一并回退到  

git reflog

针对场景3 :

如果此时又返回刚刚的回退版本操作,想还是恢复刚刚的操作怎么办?
采用 git reflog 查看所有的git操作命令日志
Git 常用回滚撤销命令总结_第6张图片
看到 HEAD@{0} HEAD@{1} HEAD@{2} HEAD@{3} … 了吗,

当前版本是 HEAD@{0},其实之前 HEAD@{1}是最新的版本的,我们想**前滚**到 HEAD@{1}这个commit_id 上怎么做?

还是和场景3的做法一致!

$ git reset --hard c45051284d211114cdce1499e635bc8252e0bbba  # 强制前滚到 "测试提交2" 那一次提交操作

$ git push origin HEAD --force # 强制提交远程 此时本地远程仓库版本一致,一并恢复到  

场景4 已经push到远程仓库,但只想撤销某一次的提交

例如下面的情况,我想撤销 “测试提交3” 这一次的全部文件修改,怎么弄?
Git 常用回滚撤销命令总结_第7张图片

采用 git revert 命令进行撤销提交操作

通过revert命令反做一个版本的提交,git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。

git revert -n c45051284d211114cdce1499e635bc8252e0bbba   # 撤销 “测试提交3” 那一次的提交,不影响“测试提交4”的提交 ,-n 是--no-commit 如果不带这个参数会自动提交一条commit

git revert 之后,反做的操作已经add到了暂存区,可以进行本地文件修改操作,然后再次做commit操作和push操作。


THANKS OVER .

你可能感兴趣的:(git,git,撤销,重置,回滚,前滚)