现在添加一个新的文件 t.c, 写一行 int a;

用 git add . 添加跟踪,当前状态

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: t.c

括号提示用 git reset HEAD ... 移除跟踪的文件,这和前面一文提到的 git rm --cached ... 是一样的作用,只是选项不一样都可以取消文件的跟踪,运行命令

$ git rm --cached t.c
rm 't.c'
$ git add .
$ git reset HEAD t.c
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
t.c
nothing added to commit but untracked files present (use "git add" to track)

这两个命令可以移除不需要跟踪的文件,而重新出现在工作区中,等待 add ,然而一个工程里会有很多不需要跟踪和记录的文件,比如:编译器自动生成的临时文件,文件很大,一些第三方的代码可以很方便的获取到等,怎么彻底地移除这些文件?

Git 提供了一个忽略文件,.gitignore 全名,在此文件中出现的文件不会被仓库记录,这个文件支持正则匹配,这里用个 windows 下 visual studio 工程的 .gitignore 文件(这个文件是在 GitHub 上新建远程仓库提供的范例,自己的可以按需要来写)

现在把 t.c 提交

$ git commit -a -m "add t.c"
[master 72daeee] add t.c
1 file changed, 1 insertion(+)
create mode 100644 t.c

然后在文件中添加一行 int b;, 查看此时的状态

$ 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: t.c
no changes added to commit (use "git add" and/or "git commit -a")

这时,我感到刚才的修改毫无意义,我怎么把刚才的修改撤消,!注意这是个危险的操作,它会修改你的源文件,执行这个命令前必须清楚你在做什么,你对这个文件的修改会被撤消,回到上次提交的状态,这里我, 确实不需要这次修改

$ git checkout  -- t.c
$ cat t.c
int a;

这样文件的修改就没有了,!注意 这是一个危险的操作

好吧! 我又反悔了,重新在 t.c 中加上一行 int b;,不过又不想再提交一次 update, 这样就多一次不怎么重要的提交,下面这个命令可以做到,先看下简单的提交历史

$ git log --pretty=format:"%h -- %cn -- %s"
72daeee -- H•K -- add t.c
9201c98 -- H•K -- update readme.md
2e07671 -- H•K -- first commit

接下来添加更改跟踪

$ git add .
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: t.c

然后再提交的时候加上选项 --amend ,这时 Git 会打开 vim 编辑上次的提交信息,像这样:



其实也不用修改什么直接按住 shift 键,连按两次 z,退出就好了,

$ git commit --amend
[master e335514] add t.c
1 file changed, 2 insertions(+)
create mode 100644 t.c

上次的提交就修改了,看下状态和历史:

$ git status
On branch master
nothing to commit, working directory clean
$ git show
commit e3355146dc3917d58ca1a8caeae53aadf5f451e8
Author: H•K <H-k_@outlook.com>
Date: Tue Sep 1 17:12:18 2015 +0800
add t.c
On branch master
Changes to be committed:
new file: t.c
Changes not staged for commit:
modified: t.c
diff --git a/t.c b/t.c
new file mode 100644
index 0000000..dc904e7
--- /dev/null
+++ b/t.c
@@ -0,0 +1,2 @@
+int a;
+int b;
$ git log --format="%h -- %cn -- %s"
e335514 -- H•K -- add t.c
9201c98 -- H•K -- update readme.md
2e07671 -- H•K -- first commit

git show 显示最近一次提交详情

可以看到提交没有明显变化,文件重新修改的内容已经记录了

Git 的撤消操作大多是针对仓库记录的信息,整理好提交的信息,便于对仓库的维护,尤其是大型的仓库。少数操作会修改文件,即可以撤消单个文件的修改,也可以撤消整个仓库记录的文件,撤消只是单纯用以前的文件覆盖当前的文件,在那之前的修改都会被还原,所以这些操作是危险的,执行前一定要想好。

Git 撤消的更多相关文章

  1. Git 撤消操作(分布式版本控制系统)

    1.覆盖提交 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了.此时,可以运行带有 --amend 选项的提交命令尝试重新提交. $ git commit --amend 或 # g ...

  2. Git 撤消操作

    修改最后一次提交 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用 --amend 选项重新提交: $ git commit --amend 此命令将 ...

  3. git 撤消修改

    第一步: 执行git reflog获取你自己的commit id(这里就是A1).当然你可以在eclipse的git插件中通过查看历史得到 第二步: 执行git reset –hard A1(这里的A ...

  4. SVN和Git的一些用法总结(转)

    转载请注明出处:http://www.codelast.com/ 以下都是比较基础的操作,高手们请绕道,不必浪费时间来看了. (A)SVN (1)查看日志提交的时候一般会写上注释,如果要查看提交日志, ...

  5. [转]Git 撤销操作

    二. Git撤消操作 12.1 修改最后一次提交 git commit --amend 1.新建一个文件 2.提交一个之前的更改 3.跟踪这个文件 4.跟前一次一起提交 提示你是否重新编辑提交说明,如 ...

  6. 转: SVN和Git的一些用法总结

    转:http://www.codelast.com/?p=5719 转载请注明出处:http://www.codelast.com/ 以下都是比较基础的操作,高手们请绕道,不必浪费时间来看了. (A) ...

  7. Git的撤消操作 - 重置, 签出 和 撤消(转载)

    From:http://gitbook.liuhui998.com/4_9.html http://ihower.tw/blog/archives/2622 相较于SVN这种commit就推送到远端伺 ...

  8. Git Book 中文版 - Git的撤消操作 - 重置, 签出 和 撤消

    Git Book 中文版 - Git的撤消操作 - 重置, 签出 和 撤消 Git的撤消操作 - 重置, 签出 和 撤消 Git提供了多种修复你开发过程中的错误的方法. 方法的选择取决于你的情况: 包 ...

  9. 2.4 Git 基础 - 撤消操作

    2.4 Git 基础 - 撤消操作 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失 ...

随机推荐

  1. 20161106PM-接口

    使用网址:http://apistore.baidu.com apikey:1f1d014aee0adeddbe33a6e1f55f7925 Composer GET http://apis.baid ...

  2. smarty模板引擎

    1.    使用smarty 1.1 项目引入 // 3, 连接数据库,提取相关数据 $title = "Smarty模板引擎"; $content = "Smarty模 ...

  3. 安装php-amqplib(RabbitMQ的phpAPI)

    历史经验告诉我们,装逼没有好下场. 总结一下之前composer安装php-amqplib包失败的原因: composer安装的时候需要指定PHP执行文件的位置: PHP安装路径:/usr/local ...

  4. Mifare系列5-存储结构(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38081521 Mifare S50把1K字节的容量分为16个扇区(Sector0 ...

  5. final finally finalize

    final  //如果不是final 的话,我可以在checkInt方法内部把i的值改变(有意或无意的,       //虽然不会改变实际调用处的值),特别是无意的,可能会引用一些难以发现的BUG   ...

  6. lightBox灯箱效果

    最近想做一个类似QQ空间相册,点击照片会出现一个遮罩层,然后显示照片,可以左右切换照片,上网查了,原来叫灯箱效果,于是自己也写了一个简单的灯箱效果,并进行了简单封装,封装得不是很完善,后面还需要改进, ...

  7. sql server 查询表结构

    --查询表结构start SELECT 序号 = a.colorder,字段名称 = a.name,字段描述 = f.value, 标识 then '√' else '' end, 主键 FROM s ...

  8. php+js进度读取条

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. 自动生成build.xml文件

    使用Eclipse 自动生成 Ant的Build.xml 配置文件,选择要生成Build.xml文件的项目,鼠标右键, Export-> General -> Ant Buildfiles ...

  10. centos 安装mongodb

    原文引用:http://blog.chinaunix.net/uid-24250828-id-3770298.html 官方网站: http://www.mongodb.org/ MongoDB 安裝 ...