二. 同一个文件的差异查看
用git status可以查看到文件的当前状态,如果要查看当前文件到底有多少内容没stage的或者stage的文件跟本地版本库最近一次提交的差异,可以用git diff来看
1. git diff
查看文件与stage的差异。比如已经stage了一个文件,然后又修改了它。用git diff可以查看到修改的内容部分。如果一个文件已经stage,之后并无修改,那么git diff的结果是没有任何差异。
2. git diff -cache(或者git version 1.6.1之后用git diff --staged )
查看stage文件与版本库最近一次提交的差异。
问题:如何查看版本库里不同版本之间的差异?
答案:用git log.比如可以用git log -p -2来查看最近两个版本之间的内容差异。详见下面四.查看版本。
三.删除和过滤文件
1.从版本库上删除文件,本地也不保留该文件
git rm <文件>,然后 git commit <文件>
这个操作会删除版本中该文件,且删除本地该文件。
如果只是删除本地文件,则git status会显示该文件的删除未stage。这不是我们想看到的,因为版本库依然在track该文件的状态。
附:如果文件修改了未commit的话,需要git rm -f来强制删除。
gir rm <文件> 中的文件可以用pattern来表示,比如\*.log, \*~ (\是转义字符)
问题1:如果本来想git rm,但是不小心rm了文件,应该怎么办呢?
我的答案:还未尝试,但是我觉得可以再执行git rm;如果有远程版本库的话,则先git pull,再git rm。
问题2:如果修改了文件名字,该怎样提交呢?
答案:git rm <老文件名>
再git add <新文件名>
再提交。
注: 对于文件重命名,可以直接用 git mv <旧文件名> <新文件名> 再commit即可。
问题3:本地误删了的文件,如何从本地版本库中找回?或者想回滚到之前的某个文件怎样做?
2.从版本库上删除文件,但本地保留
这是当不小心将不该track的文件提交了之后的处理办法。
git rm --cached <文件>
3.版本库上没有该文件,但本地保留
这种情况下版本会提示有文件untracked。如果我们不想让该文件untracked的状态老是被提示(我本来就不想它tracked,比如一些log文件,class文件,本地的配置文件等),可以让它们被ignore。
做法是: 在.gitignore文件里添加想要不被track的文件。
四.查看版本
版本管理工具最重要的功能不就是能提供不同版本给人查看和备份的作用吗?下面看如何查看版本。
命令:git log
不带参的时候,仅仅按时间倒序的顺序显示不同版本文件,内容包括SHA checksum,作者和comment。
最常用的参数:
-p:显示diff,具体内容的改变。
-<number>:显示最近几个版本。比如 -2 显示最近两个版本。
-stat:显示统计数据,哪些文件增减了多少行。
--pretty:显示格式为想要的样子,比如 --pretty=oneline是每个版本只显示一行,包括SHA和comment。
比如 --pretty="%h - %an, %ar : %s".以下是一些样式的选项:
git show <SHA-1>可以显示该commit的详细信息。<SHA-1>是commit的时候生成的checksum,可以输入完整的,也可以是前面一部分,一般说来8到10位就够了,即short SHA。
【使用范例】:
先用git log --abbrev-commit --pretty=oneline来显示所有的commit,每个commit显示为一行,用的是shot SHA-1.
再用git show <SHA>来查看你关心的那个commit。
--graph 和--pretty一起用,可以显示branch图形
查看log很适合用图形化工具,命令:gitk