使用Git退回撤销命令
2017-01-11 本文已影响2000人
dayang
修改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文件从未修改状态变为已修改状态
BoutiqueBean从未修改状态变为已修改状态.jpg
3. 回退对BoutiqueBean.java的修改
后面加了.表示对当前目录的文件
git checkout .
BoutiqueBean回退刚才的修改.jpg
回退之后的文件状态
回退之后的文件状态.jpg
4. 对BoutiqueBean.java的文件进行第二次修改,并将已修改状态文件添加到暂存区域
在BoutiqueBean.java文件中title那行添加6个9;
将已修改状态的处于工作区域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
文件有两种状态:
一个是未提交到git仓库的处于git暂存区域的暂存状态的文件
另外一个是刚刚修改过的处于git工作目录的修改状态的文件
7. 执行checkout命令,那么回退的是那个红色没有提交到暂存区域的处于工作目录为修改状态的文件
变为6个9.jpg文件状态变为一个,剩下那个在暂存区域里的暂存状态
文件状态变为一个.jpg
三、以test_Git项目为例,进行reset HEAD命令的案例分析;
接上面的案例的步骤继续,BoutiqueBean.java文件状态只剩下一种暂存状态,处于暂存目录
1. 取消暂存状态,文件的内容没有退回第二次修改的状态
文件内容没有退回到原来的变化.jpg文件的状态从已暂存状态变为已修改状态,文件从暂存区域到了工作目录
git reset HEAD
git status
取消文件已暂存状态.jpg
2. 使用checkout命令,把处于工作目录的已修改文件退回到
也就是将第二次修改的文件退回到未修改状态
工作目录和暂存区域都没有文件可以被操作
文件被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没有指向本地的分支
- 在AndroidStudio里也没有两个bean类,versionControl里可以看到HEAD指向
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仓库出了分支错误.jpg推送失败,因为当前本地的分支版本落后于gitHub上的分支版本,两个分支不在一起
origin master可以跟本地master平级或者在本地的下面,但是不能分叉
此时在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中可以看到版本的变化,以及本地分支的指向
本地分支的指向.jpg4、提交给gitHub,那么github的升级这次提交就被撤销了
git push -u origin master