一、git简介

git的最新版本是2.0.2。推荐在Linux系统下使用命令行操作。git --version可查看当前的git的版本。

git与SVN,CVS等版本控制器相比的优点是不用登录服务器,即在离线状态下也可以使用git。

资源:http://gitref.org/


git与GitHub:

git是一种版本控制系统。跟svn、cvs是同级的概念。
github是一个网站,给用户提供git服务。这样你就不用自己部署git系统,直接用注册个账号,用他们提供的git服务就可以。

二、安装和配置

安装:sudo apt-get install git

配置:两种方式

1.命令行

git config --global user.name=yourname

git config --global user.email=youremail

git config --global color.ui=true

2.编辑~/.gitconfig 文件

git config --list可查看配置内容


三、创建repository(简称repo)

  1. 初始化

git init (生成隐藏的.git文件夹,可用ls -A 查看)

2.克隆Github网站上的项目

git clone https://github.com/pythonhackers/pythonhackers.git

(会在当前目录下生成pythonhackers文件夹)


四、git常用命令

git版本控制器轻易上手_版本控制如上图:WD是working directory的简称,stage&history。我们的目标就是将在WD编辑的code.py同步到history。stage是history和WD的中间层。

  1. git status [-s]

    执行git status -s命令后会生成:

例如:A  test1.py

       M test2.py

出现A列标志说明stage和history中的test1.py版本不一致,出现M列标志说明WD和stage的test2.py版本不一致。


执行echo '*~' >.gitignore 可使git忽略掉带有~的文件,即一些备份文件。 

  1. git add code.py (WD -> stage)    Undo:git checkout code.py (stage ->wd)

  2. git commit -m 'update' (stage ->history)   Undo:git reset code.py (history ->stage)

  3. git commit -am 'second update' ( WD -> history)   Undo:git checkout HEAD code.py (history -> WD)


  1. git diff (查看stage & WD的代码差别)

  2. git diff -staged (查看history & stage的代码差别)

  3. gif diff HEAD (查看history & WD的代码差别)

Notice:git diff --stat可输出简要的diff信息。


移除文件和更改文件名

注意:git不认文件名,只认文件内容。即使文件更名,若内容一样,则认为不变。

  1. git rm old.py

  2. git rm --cached code.py (保留WD的code.py,删除stage中的code.py)

  3. git mv old.txt old.doc(若内容一样,则还是认为不变)

即等同于以下命令:

git rm --cached old.txt

mv old.txt old.doc

git add old.doc 

Notice:git会自动推断文件内容是否改变,不会将文件名和文件内容绑定。


情境:当你正在修改code.py代码时,有人过来告诉你你之前的code.py有个Bug,怎么办?我已经正在修改code.py了,但是这些代码还没有进行测试,需要回到原来的code.py进行更改重新上线。这个时候,你可以用到

git stash (收拾一下当前桌面,回退到原来的状态,等修复后,再把这个桌面拿出来继续code)

git stash list

git stash pop


上面我们提到的history其实是一个commit对象,可通过一段40字节的哈希码访问。

git log (--oneline) 输出repository的日志。

强大的命令:git cat-file [-t,-p] [哈希码或对象]

-t 输出类型:有commit,tree,blog类型

-p 输出文件内容。

如git cat-file -t HEAD (HEAD~*) (*是一个正整数)


git rev-parse HEAD 输出HEAD的哈希40字节码。

git rev-parse HEAD/master (当只有一个branch的时候,HEAD是等价于master的)

另外还有HEAD~4^{tree},HEAD~4:code.py (路径从根目录出发,即.git所在的目录)

cat-file -p 等于 show

上述内容均属于tree-ish部分。


创建另一个分支:如果你有一个新的想法,但你不想在当前的master分支下编码,因为你还没有十足的把握。这个时候你可以:

  1. git branch tryidea

  2. git branch 可查看当前项目的所有分支:如

* master

  tryidea

3.通过git checkout tryidea切换到tryidea分支:再运行git branch:会有:

  master

* tryidea

也可在创建时直接git branch -b tryidea,即新建的同时切换到tryidea。

删除分支:git branch -d tryidea (前提是你已经把tryidea分支的内容merge到master分支下了)


git merge tryidea 

两种类型:

  1. Fast-forward:只对tryidea分支的内容作了修改。

  2. 3-way merge:对master和tryidea都作了修改。


附上两张COMMIT对象的逻辑图:

git版本控制器轻易上手_git_02

git版本控制器轻易上手_版本控制_03

完。