版本控制工具分类:集中式版本控制(SVN)和分布式版本控制(git)。
git的核心思想:1.分布式 各个repo都具有完整的镜像 2.快照 git每次记录的都是完整的repo信息 3.状态区 4.分支
创建git仓库
1.git init 将一个目录快速设置成Git的代码仓库。
2.git clone 用于clone一个远程仓库到本地。
提交修改
每当开发完成一定的功能后,就需要将完成的代码提交到仓库,进行版本的一次提交。
add&&commit
git statue 查看仓库状态变化,git add <file>的方式添加版本控制(添加到了缓存区),在通过git commit指令提交到代码仓库。
通过git log查看提交记录。或是用git shortlog。
追加修改
若commit后发现有错误,可以随时进行修改。用git commit -amend实现。
查看代码仓库状态
通过git status可以告诉开发者当前仓库中所有的文件的版本追溯,当前哪一个文件进行了修改。还可以通过git diff指令查看发生变化的文件的具体变化。git diff还可以比较提交节点间的差异。 如git diff HEAD比较早前版本的差异。diff工具通常功能更加强大,如Medl,beyond compare等。
追溯历史版本(通过alias给指令设置别名以取代原先的复杂指令)
git log 查看所有历史提交记录
git blame 追溯一个指定文件的历史修改记录
工作区和缓存区
Git通常是工作在三个区域,工作区,缓存区和历史区。工作区即开发和修改代码的区域,历史区保存各版本的区域,暂存区则是git的核心,add语句就是将修改记录保存到暂存区,暂存区保存在.git文件下的index的文件夹中。开发者所做的代码提交记录都保存在这里。commit将缓存区的内容提交到仓库。(git管理的是修改的内容,而不是文件)
git回退
checkout&&reset
git checkout是用于还原一个代码仓库中的文件。修改文件之后,执行add之前,如果执行checkout指令,则会抛弃当前本地的所有修改,恢复到上次最后提交的版本。若已经执行了add,则会将文件恢复到执行add操作后的最初状态,即恢复add之后的修改,add之前的修改没有办法处理。故checkout是用版本库里的版本替换工作区的版本。用git reset HEAD <file>将一个文件移出缓存区。若已经执行了commit,则用git reset <last commit SHA> <file>执行回退,git reset的原理是重置掉提交记录,但不修改本地的工作区,从而进行新的提交。(SHA即commit ID)
回退版本
git中HEAD表示当前版本,用HEAD^,HEAD^^等表示之前的版本,往上一百个版本,则写成HEAD~100。
如;git reset --head HEAD^。(这里也可以用commit ID代替HEAD^)
操作历史(git reflog)
git 文件操作
git 提供了类似Linux的文件管理的基本指令,常见的操作有删除和暂存文件。
git rm
与shell的rm删除指令相比,执行git rm指令,然后再更新时可以省去git add指令。