git 之 git diff 与 更改提交

来源:互联网 发布:在线数据采集器 编辑:程序博客网 时间:2024/05/04 12:43

1.git diff 的 各种

$ 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分支之前,你可以对它们进行重新排序、合并、删除、添加新提交。
git reset选项

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
0 0