您的位置:首页 > 其它

git 之 git diff 与 更改提交

2016-12-20 19:27 375 查看
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分支之前,你可以对它们进行重新排序、合并、删除、添加新提交。



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git diff reset