查看修改
指令 | 作用 |
---|---|
git diff <file> | 查看工作区中某文件的修改。 |
git diff --cached
<file> 或 git diff staged <file> |
显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件的增删改 |
git diff HEAD -- <file> | 查看工作区文件(没有add到暂存区)和版本库最后一次commit之间的区别 |
git diff HEAD~X -- <file> | 查看最近一次提交的版本与往过去时间线前数X 个的版本之间的差别 |
git diff <branch1> <branch2> | 比较两个分支最后一次commit的内容的差别 |
- 对
git diff <file>
指令:当工作区有改动、暂存区为空时,比较的是工作区和最后一次commit提交;当工作区有改动、暂存区不为空时,比较的是工作区和暂存区。
重命名指令
指令 | 作用 |
---|---|
git mv <name1> <name2> | 将名为name1 的文件重命名为name2 |
- 使用
git mv
指令后,工作区和暂存区的文件名都被修改。以git mv file1.txt file2.txt
为例,它其实相当于三条指令——mv file1.txt file2.txt
、git rm file1.txt
、git add file2.txt
撤销指令
指令 | 作用 |
---|---|
git checkout -- <file> | 将工作区中该文件的修改撤销,该文件此时应没有提交到暂存区 |
git checkout HEAD -- <file> | 将工作区、暂存区和HEAD的提交保持一致 |
git reset HEAD <file> | 将暂存区和HEAD的提交保持一致(达到取消暂存的效果) |
git reset --hard HEAD | 将工作区、暂存区和HEAD的提交保持一致 |
git commit --amend | 如果提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了, 可以用该命令来重新提交将暂存区中的文件提交,并覆盖上一次提交信息。 |
- 需要注意的是
git checkout -- <file>
指令应该是从先从缓存区中拉取版本还原,如果没有再到版本库中拉取还原。用廖神的话来说就是——"总之,将这个文件回到最近一次git commit
或者git add
时的状态" git checkout HEAD -- <file>
和git reset --hard HEAD <file>
作用相似,都是可以使"工作区、暂存区和HEAD的提交保持一致"。但是两者并不完全一样:- 首先,
git checkout HEAD -- <file>
可以指定文件,但是git reset -- hard HEAD
指令会作用于所有的文件。 - 其次,如果使用
git checkout HEAD -- .
时,不会对没有commit的新增文件起作用;但如果我们使用的是git reset --head HEAD
,因为新增文件没有commit,即在版本库中找不到,所以执行该命令后未commmit新文件会消失(相比git checkouit HEAD -- .
更加彻底)。具体示例可参考这篇博客。
- 首先,
删除指令
指令 | 作用 |
---|---|
git rm <file> | 工作区和暂存区的该文件都会被删除。 再使用 git commit 就可以将该文件从版本库中删除 |
git rm --cached <file> | 从暂存区删去该文件,而工作区不删除。 此时使用 git commit 可以将该文件从版本库中删除,但工作区不会被删 |
git clean <file> -f | 删除工作区中没有被追踪的文件 |
版本回退
在版本回退操作之前,我们可以通过git log
指令来查看提交历史记录,进而确定自己想要回退的版本。(加入--pretty=oneline
参数后可以让输出信息更加简洁。)确定了想回退的版本后,可以使用下面三个指令中的一个进行回滚——
指令 | 作用 |
---|---|
git reset --hard HEAD^ | 回退到上一个版本,^ 的个数表示回滚的次数 |
git reset --hard HEAD~100 | 回滚100次,~ 后的数字表示回滚的次数 |
git reset --hard <hashcode> | 回滚到<hashcode> 表示的版本 |
如果想要重返未来,则需要先使用git reflog
来查看历次commit
和reset
的记录,找到对应版本的hashcode
,再使用git reset --hard [hashcode]
进行重返。
执行回退指令之后,不仅HEAD指针发生了变化,而且工作区和暂存区也都和指定版本保持一致,类似于
git reset --hard HEAD <file>
指令