美文网首页GitGit
使用Git退回撤销命令

使用Git退回撤销命令

作者: dayang | 来源:发表于2017-01-11 21:15 被阅读2000次

    修改Git的远程GitHub地址

    git remote origin set-url URL
    

    一、 介绍需要用到的命令

    • git checkout
      是撤销当前文件的修改,将文件回退到上次提交的状态;将没有暂存的工作区域的内容,撤销回来;
    • git reset HEAD
      是当前的目录文件还原至上次提交的状态,会将暂存的文件回退到未跟踪状态,将暂存区的内容移除;
    • git clean -df
      是讲未跟踪的文件删除清理,配合git reset HEAD使用,删除本地版本;
    • git revert [commit id]
      反转,对gitHub上的提交版本进行更改,如果一次提交是添加3个文件,那么反转就是减去3个文件

    二、以test_Git项目为例,进行checkout命令的案例分析;

    1.项目初始状态

    一共有三次版本提交:

    • 第一次:项目初步建立
    • 第二次:添加一个splash.xml文件
    • 第三次:添加了两个bean类:Boutique类和CartBean类
      项目初始阶段AndroidStudio.jpg
      commit id 很重要后面需要
      打印git log
      项目初始gitLog.jpg

    2.对BoutiqueBean.java进行文件的第一次更改

    在BoutiqueBean.java文件中title那行加了5个9

    BoutiqueBean文件修改.jpg
    此时BoutiqueBean文件从未修改状态变为已修改状态
    BoutiqueBean从未修改状态变为已修改状态.jpg

    3. 回退对BoutiqueBean.java的修改

    后面加了.表示对当前目录的文件

    git checkout .
    
    BoutiqueBean回退刚才的修改.jpg
    回退之后的文件状态
    回退之后的文件状态.jpg

    4. 对BoutiqueBean.java的文件进行第二次修改,并将已修改状态文件添加到暂存区域

    在BoutiqueBean.java文件中title那行添加6个9;

    BoutiqueBean再次修改.jpg
    将已修改状态的处于工作区域BoutiqueBean文件添加到暂存区,文件从已修改状态变为暂存态
    git status 
    git add .
    git status
    
    BoutiqueBean已修改状态变为暂存状态.jpg

    5.此时使用checkout退回,发现文件并没有回到原来没有被修改的状态

    BoutiqueBean没有回到修改状态.jpg
    文件没有回到原来的未修改的状态,仍在暂存区域,处暂存状态
    git checkout .
    
    git_checkout文件没有回到原来的状态.jpg

    6. 对BoutiqueBean.java文件进行第三次修改,此时文件有两种状态

    在BoutiqueBean.java文件中title那行将6个9改为3个9

    BoutiqueBean第三次修改.jpg
    文件有两种状态:

    一个是未提交到git仓库的处于git暂存区域的暂存状态的文件
    另外一个是刚刚修改过的处于git工作目录的修改状态的文件

    文件的两种状态.jpg

    7. 执行checkout命令,那么回退的是那个红色没有提交到暂存区域的处于工作目录为修改状态的文件

    变为6个9.jpg
    文件状态变为一个,剩下那个在暂存区域里的暂存状态
    文件状态变为一个.jpg

    三、以test_Git项目为例,进行reset HEAD命令的案例分析;

    接上面的案例的步骤继续,BoutiqueBean.java文件状态只剩下一种暂存状态,处于暂存目录

    1. 取消暂存状态,文件的内容没有退回第二次修改的状态
    文件内容没有退回到原来的变化.jpg
    文件的状态从已暂存状态变为已修改状态,文件从暂存区域到了工作目录
    git reset HEAD
    git status
    
    取消文件已暂存状态.jpg
    2. 使用checkout命令,把处于工作目录的已修改文件退回到

    也就是将第二次修改的文件退回到未修改状态

    文件第二次修改已退回.jpg
    工作目录和暂存区域都没有文件可以被操作
    文件被checkout退回.jpg

    四、进行已经提交到GitHub文件回退案例;

    1.退回第二个提交版本-添加splash.xml文件的版本
    • 查看此时在GitHub上提交的三个版本,并将第二个版的commitId复制,用于命令
      复制添加splash.xml的commitId.jpg
    • 执行checkout命令
    git checkout f4e57fe12e43f02a9409c025c9c8285a36d0461a
    
    让项目退回第二个版本添加splash.xml.jpg
    • 执行git log,我们发现第三个版本添加bean已经不存在
    git log
    
    已经只有两个版本.jpg
    • 执行git status,我们发现代码处于第二个提交版本
    git status
    
    gitStatus当前代码位于第二个版本.jpg
    • 当前HEAD没有指向本地的分支
    没有指向本地分支.jpg
    • 在AndroidStudio里也没有两个bean类,versionControl里可以看到HEAD指向
    项目没有Bean类.jpg versionControl工具HEAD指向第二版本.jpg
    2.从第二个版本在再回到项目master分支,即最终的那个添加bean版本
    git checkout master
    git log
    
    回到master.jpg

    两个bean类又出现在了AndroidStudio里面

    AndroidStudio项目里面.jpg

    五、进行撤销本地版本案例

    1、删除本地第三个版本
    • git reset HEAD命令 处于第三个版本,想要回到第二个版本,需要加上^
    git reset HEAD^
    
    resetHEAD命令撤回第二个版本.jpg
    • 此时查看文件状态,会发现第三个版本的文件已经变为未跟踪文件,它已经不再暂存区域了
    git status
    
    退回第二个版本的状态.jpg
    • 处于master分支
    git branch
    
    处于master分支上.jpg
    • AndroidStudio中versionControl的HEAD显示,两个bean类文件处于红色
      本地分支master处于第二个版本
      撤销第三个版本的versioncontrol.jpg
    • 删除本地第三个版本
    git clean -df
    
    删除本地第三个版本.jpg
    • 此时git文件的状态
      此时git文件的状态.jpg
    2、在此时的本地分支指向添加文件并提交给gitHub远程仓库,执行撤销此次提交
    git status
    git add ,
    git commit -m "add bean"
    git push origin master
    

    推送失败,因为当前本地的分支版本落后于gitHub上的分支版本,两个分支不在一起
    origin master可以跟本地master平级或者在本地的下面,但是不能分叉

    推送gitHub仓库出了分支错误.jpg
    此时在AndroidStudio里面的版本分支的路径发生了变化
    本地的分支已经指向了我们第四次版本,远程仓库指向之前的第三次版本;
    分支路径发生了变化.jpg
    • 有生成提交id
    git log
    
    提交log.jpg
    撤销此次错误提交,回到添加splash.xml版本
    git reset HEAD^
    git status
    git clean -df
    git status
    
    撤销了错误文件提交.jpg
    3、回到gitHub上的分支,本地的分支的版本已经没有添加bean了
    git status
    git pull
    
    回到gitHub的分支.jpg
    此时第三个版本添加bean又回来了
    git log
    
    gitLog.jpg

    六、将gitHub上的提交反转,理解为撤销

    1、拿到项目提交的Log,找到要撤销的提交的id
    git log
    
    此时的Log.jpg
    2、撤销升级这个提交,回到了第三个版本添加bean
    git revert ec03f259e82c26cda76866878e8f188c50878aa2
    
    生成了一个提交页面,退出保存
    :wq
    
    git revert升级.png
    3、在AndroidStudio中可以看到版本的变化,以及本地分支的指向
    本地分支的指向.jpg
    4、提交给gitHub,那么github的升级这次提交就被撤销了
    git push -u origin master
    

    相关文章

      网友评论

        本文标题:使用Git退回撤销命令

        本文链接:https://www.haomeiwen.com/subject/prdkbttx.html