git 之 git diff 与 更改提交
2016-12-20 19:27
375 查看
1.git diff 的 各种
比较工作目录和索引区(缓存区)的差异,由于我们在对文件进行编辑的时候,一般是在工作目录中编辑并且保存。而索引区和版本库的文件内容是不改变的。借此,我们可以与索引区的文件进行比较,查看我们修改了社么。
比较工作目录和给定提交的文件的差异,commit常用HEAD代替。
显示索引区和版本库的文件差异,如果省略掉commit,Git则会默认为HEAD.
任意指定两个提交,这条命令会显示它们之间的差异。如:
上面的命令式用来比较当前版本与上个版本的不同。
2.更改提交(小心使用)
作为一般原则,只要没有其他开发人员(也包括自己)已经获得你的版本库的副本,你就可以自由的修改和完善版本库提交历史记录。更直白的说,只要没有人有版本库中的某个分支的副本,你就可以修改该分支。
打个比方:
假如前一段时间,你提交了四个文件有A、B、C、D在master这个分支上,这些提交已经被其他人获得了,就出现“已发布的历史记录”。假设你后面又进一步做开发,在相同的分支上产生了4个新的文件W、X、Y、Z,但是是尚未发布的新提交。在此时,你是不可以去动A、B、C、D这四个文件,但你是可以修改W、X、Y、Z在你重新发布master分支之前,你可以对它们进行重新排序、合并、删除、添加新提交。
1.回退到上个版本中
彻底撤销最近的提交。引用回退到前一次,而且工作目录和索引区(暂存区)都会回退到上一次提交的状态。自上一次以来的提交全部丢失。
【那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset –hard HEAD~100 即可】
2.某个文件(如foo.c)意外地暂存到了索引
第一句和第三句是为更好的了解文件是否存在;为了避免提交foo.c,对foo.c使用git reset HEAD 可以解释为:就foo.c文件而言,让我的索引看起来就如同和HEAD一样没有foo.c的存在。
3.某个文件意外地提交到了索引区和版本库
工作目录不改变,但是索引区会回退到上一次提交之前,版本区也会回退一次。上面的这个命令可以省略–mixed直接写成git reset HEAD^。
4.某个文件意外地提交到了版本库
工作目录和索引区不改变,但是版本库向前回退一次。当对最新的提交说明或者提交的更改不满意时,撤销最新的提交以便重新提交。
版本库的引用变化历史记录
$ git diff
比较工作目录和索引区(缓存区)的差异,由于我们在对文件进行编辑的时候,一般是在工作目录中编辑并且保存。而索引区和版本库的文件内容是不改变的。借此,我们可以与索引区的文件进行比较,查看我们修改了社么。
$ git diff commit
比较工作目录和给定提交的文件的差异,commit常用HEAD代替。
$ git diff --cached commit
显示索引区和版本库的文件差异,如果省略掉commit,Git则会默认为HEAD.
$ git diff commit1 commit2
任意指定两个提交,这条命令会显示它们之间的差异。如:
$ git diff HEAD^ HEAD
上面的命令式用来比较当前版本与上个版本的不同。
2.更改提交(小心使用)
作为一般原则,只要没有其他开发人员(也包括自己)已经获得你的版本库的副本,你就可以自由的修改和完善版本库提交历史记录。更直白的说,只要没有人有版本库中的某个分支的副本,你就可以修改该分支。
打个比方:
假如前一段时间,你提交了四个文件有A、B、C、D在master这个分支上,这些提交已经被其他人获得了,就出现“已发布的历史记录”。假设你后面又进一步做开发,在相同的分支上产生了4个新的文件W、X、Y、Z,但是是尚未发布的新提交。在此时,你是不可以去动A、B、C、D这四个文件,但你是可以修改W、X、Y、Z在你重新发布master分支之前,你可以对它们进行重新排序、合并、删除、添加新提交。
1.回退到上个版本中
$ git reset --hard HEAD^
彻底撤销最近的提交。引用回退到前一次,而且工作目录和索引区(暂存区)都会回退到上一次提交的状态。自上一次以来的提交全部丢失。
【那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset –hard HEAD~100 即可】
2.某个文件(如foo.c)意外地暂存到了索引
$ git ls-files $ git reset HEAD foo.c $ git ls-files
第一句和第三句是为更好的了解文件是否存在;为了避免提交foo.c,对foo.c使用git reset HEAD 可以解释为:就foo.c文件而言,让我的索引看起来就如同和HEAD一样没有foo.c的存在。
3.某个文件意外地提交到了索引区和版本库
$ git reset --mixed HEAD^
工作目录不改变,但是索引区会回退到上一次提交之前,版本区也会回退一次。上面的这个命令可以省略–mixed直接写成git reset HEAD^。
4.某个文件意外地提交到了版本库
$ git reset --soft HEAD^
工作目录和索引区不改变,但是版本库向前回退一次。当对最新的提交说明或者提交的更改不满意时,撤销最新的提交以便重新提交。
版本库的引用变化历史记录
$ git reflog
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- git更新已經刪除的文件
- 快速使用Git管理"码云"或者"Github"
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- Spring Boot 开发微服务
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- git终极指南:在实际开发中的应用
- 6 个托管 git 仓库的地方
- 重置默认样式 css reset第1/2页
- Git 教程之标签详解
- Git 教程之基本操作详解
- 表单项的name命名为submit、reset引起的问题
- Git 教程之工作区、暂存区和版本库详解
- 对于Form表单reset方法的新认识
- Git 教程之创建仓库详解
- Git远程操作详解
- Git 教程之远程仓库详解
- Git 教程之安装配置详解
- 一天一个shell命令 linux文本操作系列-diff命令详解