1、版本控制(vcs):记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。

1)本地版本控制系统:

    1.1 直接复制整个项目目录,然后加上时间戳。

    1.2 通过基础文件和增量(补丁)计算每个版本。

2)集中化版本控制系统(svn):

    2.1 不同系统上协同工作。

    2.2 中央仓库单点故障。

3)分布式版本控制系统(git):

    3.1 客户端并不只是提取最新版本的文件快照,而是把代码仓库完整地镜像下来。

    3.2 不存在单点故障问题。

2、git起源于linux内核开源提交。

2)svn 关注文件增量,git 关注文件整体。

    1.1 为了提高效率,对于没有修改的文件,git只保存一个上次快照的链接(例如软链)。

    1.2 几乎所有操作都是本地执行。

    1.3 git通过计算文件内容或者目录结构的sha1值来判定文件是否有修改。

3、git clone

git clone --bare

git config --global

git init

工作目录,缓存区,git仓库。

.git目录

git add 

git commit -m "some message"

1)在工作目录初始化仓库

2)从现有仓库克隆

git status 查看文件状态

.gitignore文件

git diff 修改之后还没暂存的详情。

git diff --cached 暂存的和上次提交的差异。

git commit -a -m "some message" :add 和 commit一起搞了。

git rm之后在commit就可以不再跟踪了。

git rm --cached 仅删除缓存区里的文件,工作区的文件没有删除。

git mv重命名文件。

git log 查看提交历史。

git log -p

git log --stat

gitk : git log 的图形化工具。

git commit --amend 重新提交。

git reset HEAD :反add。

git checkout -- : 放弃文件修改。

git remote :查看远程仓库。 -v列出详情。

git remote add :添加远程仓库

git fetch :从远程仓库抓取数据到本地。

git pull :从远程仓库拉取数据到本地,并且自动合并。

git push origin master :克隆操作会自动默认使用master 和origin名字。

git remote show : 查看远程仓库信息。

git remote rm :移除远程仓库。

git tag :标签。



在git中提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存区内容快照的指针,包含本次提交的作者等相关附属信息,包含零个或多个指向该提交对象的父对象指针:首次提交是没有直接祖先的,普通提交有一个祖先,由两个或多个分支合并产生的提交则有多个祖先。


快照被保存为blob对象。


分支其实就是从某个提交对象往回看的历史。


git branch :创建分支。

HEAD : 当前分支的别名。

git checkout :分支切换。


由于 Git 中的分支实际上仅是一个包含所指对象校验和(40 个字符长度 SHA-1 字串)的文件,所以创建和销毁一个分支就变得非常廉价。说白了,新建一个分支就是向一个文件写入 41 个字节(外加一个换行符)那么简单,当然也就很快了。


git checkout -b :新建并切换到新分支。


git merge :分支合并。


git branch -d :删除分支。


同一个文件的同一个部分,产生冲突。


任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。


git branch -v :查看各个分支最后的提交对象。


*表示当前所在的分支。


git branch --merged :查看已经合并到当前分支的分支。(其实可以删掉了)


git branch --no-merged :查看还未合并到当前分支的分支。


合并分支会自动生成一个新的提交对象。


直接从尾部开始的分支在合并时,会提示fast forward,即直接移动指针。


远程仓库名/分支名。


远程分支无法修改。


自动合并是:两个分支的最新提交对象已经共同祖先,三方合并。