Git 撤消
现在添加一个新的文件 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 撤消的更多相关文章
- Git 撤消操作(分布式版本控制系统)
1.覆盖提交 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了.此时,可以运行带有 --amend 选项的提交命令尝试重新提交. $ git commit --amend 或 # g ...
- Git 撤消操作
修改最后一次提交 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用 --amend 选项重新提交: $ git commit --amend 此命令将 ...
- git 撤消修改
第一步: 执行git reflog获取你自己的commit id(这里就是A1).当然你可以在eclipse的git插件中通过查看历史得到 第二步: 执行git reset –hard A1(这里的A ...
- SVN和Git的一些用法总结(转)
转载请注明出处:http://www.codelast.com/ 以下都是比较基础的操作,高手们请绕道,不必浪费时间来看了. (A)SVN (1)查看日志提交的时候一般会写上注释,如果要查看提交日志, ...
- [转]Git 撤销操作
二. Git撤消操作 12.1 修改最后一次提交 git commit --amend 1.新建一个文件 2.提交一个之前的更改 3.跟踪这个文件 4.跟前一次一起提交 提示你是否重新编辑提交说明,如 ...
- 转: SVN和Git的一些用法总结
转:http://www.codelast.com/?p=5719 转载请注明出处:http://www.codelast.com/ 以下都是比较基础的操作,高手们请绕道,不必浪费时间来看了. (A) ...
- Git的撤消操作 - 重置, 签出 和 撤消(转载)
From:http://gitbook.liuhui998.com/4_9.html http://ihower.tw/blog/archives/2622 相较于SVN这种commit就推送到远端伺 ...
- Git Book 中文版 - Git的撤消操作 - 重置, 签出 和 撤消
Git Book 中文版 - Git的撤消操作 - 重置, 签出 和 撤消 Git的撤消操作 - 重置, 签出 和 撤消 Git提供了多种修复你开发过程中的错误的方法. 方法的选择取决于你的情况: 包 ...
- 2.4 Git 基础 - 撤消操作
2.4 Git 基础 - 撤消操作 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失 ...
随机推荐
- Python,Jupyter Notebook,IPython快速安装教程
0.安装环境 Windows10,Python3.5.1,IPython,jupyter notebook,and other functionality 官方安装文档Linux版3.x 官方安装文档 ...
- Apache配置文件讲解
持续作用扩展自 HTTP/1.0 和 HTTP/1.1 的长连接特性.提供了长效的 HTTP 会话,用以在同 一个 TCP 连接中进行多次请求. 在某些情况下, 这样的方式会对包含大量图片的 ...
- python 初级1
List:Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来, ...
- Reactjs的Controller View模式
摘要:做一个可以利用props来控制和传递所有状态给其子组件的顶级组件是一件非常酷的事情 不要和“MVC”混淆了,只有能够控制和传递所有的“state”的顶层组件,我们才叫它"view co ...
- 22.mongodb副本集集群
软件版本64位: $ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.0.tgz mongo ...
- Fair Scheduler 队列设置经验总结
Fair Scheduler 队列设置经验总结 由于公司的hadoop集群的计算资源不是很充足,需要开启yarn资源队列的资源抢占.在使用过程中,才明白资源抢占的一些特点.在这里总结一下. 只有一个队 ...
- 工具网站gallery
jQuery各个版本齐全的api 在线编辑器codepen
- C语言程序设计进阶 第1周编程题
第1周编程题 查看帮助 返回 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数 ...
- python3 三级菜单
python版本3.5 功能: 1.程序执行显示一级菜单,输入内容进入二级菜单: 2.进入二级菜单后,输入二级菜单内容,进入三级菜单:输入b返回一级菜单: 3.进入三级菜单后,输入b返回二级菜单. # ...
- Hadoop在eclipse中的配置
在安装完linux下的hadoop框架,实现完所现有的wordCount程序,能够完美输出结果之后,我们开始来搭建在window下的eclipse的环境,进行相关程序的编写. 在网上有很多未编译版本, ...