一、git简介
git的最新版本是2.0.2。推荐在Linux系统下使用命令行操作。git --version可查看当前的git的版本。
git与SVN,CVS等版本控制器相比的优点是不用登录服务器,即在离线状态下也可以使用git。
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)
初始化
git init (生成隐藏的.git文件夹,可用ls -A 查看)
2.克隆Github网站上的项目
git clone https://github.com/pythonhackers/pythonhackers.git
(会在当前目录下生成pythonhackers文件夹)
四、git常用命令
如上图:WD是working directory的简称,stage&history。我们的目标就是将在WD编辑的code.py同步到history。stage是history和WD的中间层。
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忽略掉带有~的文件,即一些备份文件。
git add code.py (WD -> stage) Undo:git checkout code.py (stage ->wd)
git commit -m 'update' (stage ->history) Undo:git reset code.py (history ->stage)
git commit -am 'second update' ( WD -> history) Undo:git checkout HEAD code.py (history -> WD)
git diff (查看stage & WD的代码差别)
git diff -staged (查看history & stage的代码差别)
gif diff HEAD (查看history & WD的代码差别)
Notice:git diff --stat可输出简要的diff信息。
移除文件和更改文件名
注意:git不认文件名,只认文件内容。即使文件更名,若内容一样,则认为不变。
git rm old.py
git rm --cached code.py (保留WD的code.py,删除stage中的code.py)
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分支下编码,因为你还没有十足的把握。这个时候你可以:
git branch tryidea
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
两种类型:
Fast-forward:只对tryidea分支的内容作了修改。
3-way merge:对master和tryidea都作了修改。
附上两张COMMIT对象的逻辑图:
完。