本文是通过学习《Pro Git》--作者Scott Chacon 后所做的整理和思考笔记。
一.GIT管理下的文件周期
2.在git的管理下的状态是tracked状态,包括unmodified,modified和staged三种状态。

stage之后的文件可以用git commit <文件> 来提交文件或 git reset HEAD <文件> 来取消stage状态。
用git status可以查看到文件的当前状态,如果要查看当前文件到底有多少内容没stage的或者stage的文件跟本地版本库最近一次提交的差异,可以用git diff来看
查看文件与stage的差异。比如已经stage了一个文件,然后又修改了它。用git diff可以查看到修改的内容部分。如果一个文件已经stage,之后并无修改,那么git diff的结果是没有任何差异。
查看stage文件与版本库最近一次提交的差异。
5.当一个文件已经stage后,如果再做修改,此时的状态是部分stage,部分modified。如果commit的话,会提交已经stage的那部分。
6.git add有多种功能,可以将untracked的文件track,可以将modified的文件stage,还可以将merge时conflict后来修改好的文件再次stage。
问题:为什么要有一个stage的状态?修改了文件要stage再commit不是很麻烦吗?
我的答案:commit是一次对所有stage过的文件的提交,没有针对某一个文件的commit。
一般说来,一次commit是完成一个版本的snapshot,可以修改一个文件就stage,也可以修改完了很多文件一起stage。stage就像一个箱子,把要commit的内容都装上去。然后对装箱的内容做commit操作。
如果修改好的文件可以直接提交,可以用git commit -a来自动stage,即对全部修改自动装箱提交。
二. 同一个文件的差异查看
1. git diff
2. git diff -cache(或者git version 1.6.1之后用git diff --staged )
问题:如何查看版本库里不同版本之间的差异?
答案:用git log.比如可以用git log -p -2来查看最近两个版本之间的内容差异。详见下面 四.查看版本。
三.删除和过滤文件
1.从版本库上删除文件,本地也不保留该文件
2.从版本库上删除文件,但本地保留
3.版本库上没有该文件,但本地保留
做法是:
在.gitignore文件里添加想要不被track的文件。
四.查看版本
【使用范例】:
先用git log --abbrev-commit --pretty=oneline来显示所有的commit,每个commit显示为一行,用的是shot SHA-1.
再用git show <SHA>来查看你关心的那个commit。
五.回滚操作
问题:如何回滚版本库里的文件?
网上参考答案:
------------------------------------------BEGIN---------------------------------------------------
git reset是指将当前head的内容重置,不会留log信息。
- git reset HEAD filename
从暂存区中移除文件 - git reset –hard HEAD~3
会将最新的3次提交全部重置,就像没有提交过一样。 - git reset –hard
commit (38679ed709fd0a3767b79b93 d0fba5bb8dd235f8) 回退到 38679ed709fd0a3767b79b93 d0fba5bb8dd235f8 版本
根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:
- git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
- git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
- git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
--------------------------------------------END---------------------------------------------------
六.远程版本库
当远程版本库有分支时,你可以选择添加某一个分支
git remote add <别名> <分支URL>
例如 git add pb git://github.com/paulbone/ticgit.git
现在再git remote -v就可以看到origin和pb两个branch了,其中origin是default的。
六.分支的建立与rebase
七.远程分支