git 撤销修改

摘要:
自然,你不会犯错。由于错误被及时发现,因此很容易纠正。您可以删除最后一行并手动将文件恢复到以前的版本。当我们使用HEAD时,它意味着最新版本。使用gitstatus检查临时存储区域是否干净,工作区是否已修改:[root@node1git]#Gitstatus#Onbranchmaster#Changesnotstagedforcommit:###modified:readme。txt#nochangesaddtocommit摘要场景1:当您更改工作区中文件的内容并希望直接放弃工作区中的更改时,请使用命令gitcheckout--file。场景3:如果您想在向版本库提交了不适当的修改后取消提交,请参阅关于版本回滚的章节,但前提是它不会被推送到远程库。

自然,你是不会犯错的。不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行:

[root@node1 git]# cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN

在你准备提交前,一杯咖啡起了作用,你猛然发现了“stupid boss”可能会让你丢掉这个月的奖金!

既然错误发现得很及时,就可以很容易地纠正它。你可以删掉最后一行,手动把文件恢复到上一个版本的状态。如果用git status查看一下:

[root@node1 git]# git statu
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

你可以发现,Git会告诉你,git checkout -- file可以丢弃工作区的修改:

[root@node1 git]# git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态

总之,就是让这个文件回到最近一次git commitgit add时的状态

查看readme.txt 的文件内容

[root@node1 git]# cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of fiels.

文件内容果然复原了

git checkout -- file命令中的 -- 很重要,没有 -- ,就变成了 “切换到另一个分支” 的命令

现在假定是凌晨3点,你不但写了一些胡话,还git add到暂存区了

[root@node1 git]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    modified:   readme.txt

Git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

[root@node1 git]# git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

再用git status查看一下,现在暂存区是干净的,工作区有修改:

[root@node1 git]# git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

小结

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

免责声明:文章转载自《git 撤销修改》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇session应用:git 管理修改下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

版本控制工具

一、版本控制工具应具备的功能 1.协同修改 2. 数据备份 3. 版本管理 4. 权限控制 5. 历史记录 6. 分支管理 二、版本控制工具 1.集中式版本控制工具:SVN 2. 分布式版本控制工具:Git 三、Git优势 大部分操作在本地完成,不需要联网 完整性保证 尽可能添加数据而不是删除或修改数据 分支操作非常快捷流畅...

git 操作几个命令

 git clone ssh://lijianfeng@192.168.1.246:29418/GMGameSDK压栈:git stash查状态:git status切换到要修改的提交:git rebase -i HEAD~3提交完成后的修改:git commit -a --amend确认提交:git rebase --continue提交修改的代码到服务器...

Git的一些基本概念

Git的一些基本概念 设置自己的用户名和邮箱git config –global user.name "Your Name"git config –global user.email "you@example.com" 修改到提交之间有一个缓存区 提交到缓存区git add .当前所有修改提交到缓存区,也可以单独指定 git diff --cach...

IDEA的第一个JavaEE项目&amp;集成Tomcat、Jrebel、Git插件

创建第一个JavaEE项目 Next之后选择项目存储位置之后点击Finish即可。 新建的项目需要新建两个文件夹classes和lib 集成Tomcat Tomcat自行到官网下载       JRebel集成   集成Git 随后进入到项目目录,鼠标右键点击Git Bush Here(应该是这个名字),然后一次使用in...

git本地库中配置多个sshkey

一般来说正常情况下本地库中配置一个sshkey就可以适应开发了,但是生活中总会有那么一点点的小惊喜。由于公司业务的发展,现在需要本地库中再配置一个sshkey,下面记录下配置的全过程: 生成并添加第一个sshkey: 输入以上命令就会在本地根目录下生成一个sshkey,默认的名字是id_rsa和id_rsa.pub。如果不需要添加密码一直enter就可以了...

svn或者git拉取更新代码启动项目ConflictingBeanDefinitionException异常解决(Maven工程)

   更新项目代码后启动项目之后报ConflictingBeanDefinitionException异常如:     org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'rabbitConfig'...