git的使用(四)

8.撤销修改

$ 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.                    #把在工作区readme.txt文件中增加了一行

查看工作区readme.txt文档状态和修改内容是否正确

$ git status                                              #查看文件状态
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 diff readme.txt                                   #查看文件内容是否是自己需要的diff --git a/readme.txt b/readme.txtindex d5e8dad..921e20a 100644--- a/readme.txt+++ b/readme.txt@@ -1,4 +1,5 @@ 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.+Git tracks changes of files.+My stupid boss still prefers SVN.                       #发现这一内容是不能提交的(对boss不满,boss会记住的,你懂的

怎么才能撤销刚才对readme的修改呢?(这个问题还有个答案就是:直接更改文件内容就行,比较添加了什么,就删除什么。)

或者万一已经将第一次修改的文件提交到了中转站(暂存区),然后又第二次修改了文件,怎么办呢?

看!有提示(use "git checkout -- <file>..." to discard changes in working directory)。注意!!!

其中“--” 很重要,不能遗漏。

-----------------------------------------------------------------------------------------------------

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

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

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

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

------------------------------------------------------------------------------------------------------

[实践出真知]

$ 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.                    #这是刚才添加的一行  未提交到暂存区(中转站)

(由于未add到暂存区)删除这一行有两种方式:手动vim删除,还有一种就是下面这种使用 git checkout -- <file>

$ git checkout -- readme.txt              #撤销更改,即撤销添加的My stupid boss still prefers SVN. 这一行

$ 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.

再来实践,如果第一次修改后已经提交,再次修改文本文件,需要撤销第二次的修改:

$ 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.                  #这是刚才添加的一行 

$ git statusOn branch masterChanges 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 add readme.txt                                 #

解决了工作区中的撤销修改,再来看看图中暂存区的撤销修改:

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

[ 实践出真知]

$ git status                                        #查看当前状态
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)        #提示:如果要将暂存区的文本版本回退到工作区,使用git reset HEAD <file>

        modified:   readme.txt                       #第一次修改文本并add到暂存区

由于第一次修改并add到了暂存区,现在需要回退到工作区:

$ git reset HEAD readme.txt                         #将暂存区的文本版本回退到工作区  即回退到add之前的状态,add之前的状态是进行的第一次修改
Unstaged changes after reset:
M       readme.txt

$ git status                                         #查看文本版本状态已经恢复到了工作区中,停留在第一次修改的位置
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

$ git diff                                            #验证是不是停留在了第一次修改的位置。第一次修改添加了一行信息:My stupid boss still prefers SVN.diff --git a/readme.txt b/readme.txtindex d5e8dad..a60e297 100644--- a/readme.txt+++ b/readme.txt@@ -2,3 +2,4 @@ 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.+My stupid boss still prefers SVN

撤销第一次的修改应该用哪个方法呢???如果还不清楚,就再从头看一遍此文章。

下面是答案:

$ git checkout -- readme.txt             #撤销第一次的修改

$ git status                             #文本文件的版本已经恢复到最开始的版本,工作区干净,暂存区也是干净的
On branch master
nothing to commit, working directory clean

$ 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.

时间: 2024-11-06 10:45:59

git的使用(四)的相关文章

Git实战(四)状态转换

上次的Git实战(三)环境搭建博文,我们大致讲解了一下git的环境安装,今天我们讲解一下Git的状态转换. 学习版本控制工具,对工具进行版本控制之间的状态转换非常重要.毕竟Git只是一个工具,如果不了解工具的每一步操作都是为什么,那么学习Git也就没有多大意义了. Git初始化 在学习Git状态转换之前,我们先来认识一下Git的初始化,即在本地创建一个Git版本库.与SVN在服务器上创建唯一的版本库不同,Git版本库可以随客户端需要自由在客户端创建,其个数和位置不受任何限制.git初始化命令,如

Git现实(四)状态转换

前Git实战(三)环境搭建博文.我们大致解说了一下git的环境安装.今天我们解说一下Git的状态转换. 学习版本号控制工具.对工具进行版本号控制之间的状态转换很重要. 毕竟Git仅仅是一个工具,假设不了解工具的每一步操作都是为什么,那么学习Git也就没有多大意义了. Git初始化 在学习Git状态转换之前,我们先来认识一下Git的初始化,即在本地创建一个Git版本号库.与SVN在server上创建唯一的版本号库不同,Git版本号库能够随client须要自由在client创建.其个数和位置不受不论

Git 有以下四种方法来存取远端的Git服务器

摘要:Git 有以下四种方法来存取远端的Git服务器 Git 有以下四种方法来存取远端的Git服务器: SSH 安全性最佳 git clone [email protected]:ihower/sandbox.git HTTP/HTTPS 速度最差,但能突破防火墙限制 git clone https://[email protected]/ihower/sandbox.git Git protocol 速度最快,但缺认证机制(因此只能做成只读) git clone git://github.co

小丁带你走进git的世界四-重写历史记录

一.git对象文件创建 开篇先补充一个知识点,就是比如我建立一个文件之后,使用git add就会生成一个git对象,但是git对象生成后可以在.git/objects里面对应,首先我们来初始化一个仓库git init. $ git init 然后我们来创建两个文件文件名分别为a和b. $ touch a b 将a文件添加到暂存区,然后再将b添加到暂存区,我们会想到这时候有两个git对象产生,但是git对象对应.git/objects文件. $ git add . $ find .git/obje

Git历险记(四)——索引与提交的幕后故事

我想如果看过<Git历险记>的前面三篇文章的朋友可能已经知道怎么用git add,git commit这两个命令了:知道它们一个是把文件暂存到索引中为下一次提交做准备,一个创建新的提交(commit).但是它们台前幕后的一些有趣的细节大家不一定知晓,请允许我一一道来. Git 索引是一个在你的工作目录(working tree)和项目仓库间的暂存区域(staging area).有了它, 你可以把许多内容的修改一起提交(commit). 如果你创建了一个提交(commit),那么提交的一般是暂

Git 系列(四):在 Git 中进行版本回退

在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中的一个片段,由一个被称为 HEAD 的 标记来确定(如磁带录音机或录音播放器的播放头).要在你的 Git 时间线上前后移动 HEAD ,需要使用 git checkout 命令. git checkout 命令的使用方式有两种.最常见的用途是从一个以前的提交中恢复文件,你也可以整个倒回磁带,切换到另一个分支. 恢复一

Git使用列表(四)

最近,由于自己的一个项目,导致自己的关于自己的要使用Git的很多的命令,突然发现自己的git的还有许多不知道的东西 不过,在这个工作的过程中,也发现自己的一些很大的缺陷,就是自己题目理解力有限,明明就是很好理解的,自己就是 要去问别人,其实没有这个必要,下次一定要先自己看看,到底需不需要,再去决定问不问别人.闲话不多说了,我们先看 这期的Git的一些的命令吧. 1.当我们如果要练习Git的一些操作的时候,我们都希望自己动手写一些命令吧,这个时候,我们既可以在GitHub上面建立一个 仓库,然后实

每天学点Git -- 笔记(四)

现在,我们考虑一种情况,当你修改了文件,但是此时你想撤销它,怎么办?下面,我们用代码试验一下: (1)在readme.txt中添加新的一行: $ 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

Git之(四)分支管理

当我们初始化Git仓库的时候,Git会默认创建一个名为master的主分支.在实际工作中,主分支要求是一个稳定.健壮.安全的主线,一般不允许在主分支上直接进行开发,而是拉取一个新的分支,开发.测试完成后,再将分支合并到主分支上. 使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间. Git 的分支模型可称为"必杀技特性",而正是因为该特性将 Git 从版本控

Git教程学习(四)

12. 分支管理场景 多人协同工作时,你在优化代码X,需要较长时间才能完成,未完成之前会影响整体代码的使用.于是写完的代码不能提交到版本库,提交就会影响别人使用整体的代码.不提交你就失去了git的版本管理功能. 于是需要分支,为你正在修改的代码建立分支,别人看不到.而你在自己的分支上工作,最后完成再合并到原来的分支 13. 创建与合并分支 13.1. 场景 在Git中,版本控制是靠指针.每个分支都有一个专用的指针.同时有一个HEAD指针指向主版本.实现的时候HEAD指针实际上是指向分支指针的,再