点我
点我
文章目录
  1. 撤销操作
  2. 1 撤销工作空间最近的修改
  3. 2 撤销暂存区最近的修改
  4. 3 撤销提交到本地仓库的修改
    1. 1.3.1 方案一 再新建一次提交
  • 3.3 方案三 修改最后一次提交
  • 4 总结
    1. 附言
  • 友情链接
  • git使用笔记(2)

    上一篇笔记,只写了些git的基础操作,这篇写一下稍微高阶一点的操作,实际项目的时候可能经常会用到.

    撤销操作

    撤销操作,我经常会用到,有时候写的代码没有考虑周全,或者有疏漏,需要重新提交什么的.

    1 撤销工作空间最近的修改

    应用场景:比如上次push以后的完整干净的目录,工作空间没有任何修改,暂存区也没有任何修改,如下图:
    上一次提交后干净的工作目录
    这时候,你手贱,改了一下其中的一个文件,但是这次更改是没有意义的.我们继续使用git status来查看
    修改一个文件后执行git status的结果
    我们现在想撤销这次修改.
    解决方法:现在这个修改只是工作区的修改,我们要撤销很简单执行

    1
    git checkout a.txt

    搞定

    2 撤销暂存区最近的修改

    应用场景:假如在上面说的那种情况下,你手贱改错了文件,而且你没有撤销,你还执行git add a.txt,将修改提交到暂存区了.具体情况如下图
    错误的修改被提交到了暂存区
    现在我们要从暂存区撤回那个修改
    解决办法:我们使用git reset HEAD a.txt,将文件从暂存区撤出来,又回到上面的工作空间被修改的状态,如图
    从暂存区撤回
    ps:上面的命令也可以用下面的命令,语法格式是git reset <path>,括号中填路径

    1
    git reset a.txt

    总的来说,git reset <path>就是git add <path>的反向操作

    3 撤销提交到本地仓库的修改

    应用场景:假如你在1.2还没有回头,一路手贱下去,将暂存区的修改commit到本地仓库了
    错误的修改被提交到本地仓库
    我们现在要从仓库撤销这次没用的提交
    解决方法:

    1.3.1 方案一 再新建一次提交

    我们可以新建一次提交,然后让所修改的文件回到之前的状态,执行

    1
    git revert HEAD

    含义很简单,逆转,这样你的log里面会多一次提交,然后文件也回到的之前的状态
    执行git revert 后的log

    #3.2 方案二 干净的撤销上一次commit
    上面的方案一对于一个强迫症来说,不能忍啊,本来就是一次错误的提交,为了弥补这个错误,我却还要多提交一次,完全不能忍受.
    方案二,我们使用git reset命令.我们执行

    1
    git reset HEAD^

    这个命令表示重置HEAD指针,我们要指向上一次提交(也就是取消最近的一次,HEAD表示当前指针,HEAD^是上一次,HEAD^^是上上次,HEAD^^^是上三次),git reset命令可以添加--mixed,--soft,--hard三种参数,--soft程度最轻,只会撤销提交,对当前暂存区和当前工作空间不会有任何更改,默认的参数是--mixed,他会将暂存区的文件撤销

    1
    2
    3
    4
    5
    git reset --soft :取消了commit  

    git reset --mixed(默认) :取消了commit ,取消了add

    git reset --hard :取消了commit ,取消了add,取消源文件修改

    3.3 方案三 修改最后一次提交

    首先强调,下面说的实在本地仓库的操作.
    应用场景:对于上面提到的错误的提交,我们还可以修改他的内容,删除我们错误的修改,将它恢复到原来的样子,我们可以使用

    1
    git commit --amend

    这个方法是将当前暂存区快照提交,也就是你后面的修改合在一起,然后再提交.最后查看log的时候,会只有一次提交,前面的一次提交就被删除,在log中只看到这次提交.
    用具体例子来说.

    1
    2
    3
    4
    5
    6
    git commit -m "这是第一次提交"
    #commit完,我们修改工作空间的内容,然后再执行
    git add b.txt
    git commit --amend
    #这条命令会弹出一个编辑窗口,你可以修改提交信息
    #假设我们将提交信息修改为"这是第二次提交"

    接着当我们使用git log来查看的时候,你只会看到提交信息是”这是第二次提交”.
    解决方法:
    我们先将文件内容恢复到上一次(当前是HEAD,上一次就是HEAD^)提交时候的样子,然后执行git commit --amend,看到如下错误提示,就是说这次文件没有任何修改(废话,我已经恢复正确的样子了,当然一模一样了),默认是不允许空提交的,你只有强制使用--allow-empty才行,或者执行方案二
    执行git commit --amend内容没有变化的错误提示

    4 总结

    盗图一张,总结上面说的内容
    工作空间,暂存区,本地仓库之间的关机和转换
    打完收工

    附言

    PS:现在再来解释开头说的,这是本地仓库的操作.
    因为,我们本地仓库执行了git commit后,所做的更改只会在本地,如果接着执行了git push那么,所做的更改就会被提交到git,在上面的例子中那么首先提交到github的就是"这是第一次提交".这时候,当你执行完git commit --amend的时候,本地仓库的上次提交会被删除,也就是不存在提示信息为"这是第一次提交",此时本地仓库完成了修改,你想提交到github,就会报错了.如图所示
    本地执行--amend操作后直接提交到github报错
    解决方法就是,Force
    没错,强制提交git push -f,这样他就会像本地一样,删除上一次提交,添加这一次提交

    友情链接

    1 修改提交信息
    2 如何撤销在git上的各种修改,好文
    3 git revert和git reset的区别
    4 git常用命令介绍,带效果图的

    支持一下
    扫一扫,试试看
    • 微信扫一扫
    • 支付宝扫一扫