git是一款免费且开源的分布式版本控制系统,适用于敏捷高效地管理从小型到大型的项目。它能够迅速有效地处理不同规模项目的版本管理。
分布式与集中式版本控制系统的主要区别在于,开发者可以在本地提交代码。通过克隆(git clone),开发者可以将完整的Git仓库复制到本地机器上。
要学习Git,可以搜索以下资源:
- Git简明指南
- Git完整命令手册PDF版
- Git教程
- Git图形化操作插件:小乌龟
从一般开发者的角度来看,Git的功能特性包括:
- 从服务器克隆完整的Git仓库(包括代码和版本信息)到本地机器。
- 根据不同的开发目的,在本地机器上创建分支并修改代码。
- 在自己创建的本地分支上提交代码。
- 在本地机器上合并分支。
- 从服务器获取最新版本的代码,并与自己的主分支合并。
- 生成补丁(patch)并发送给主开发者。
- 查看主开发者的反馈。如果主开发者发现一般开发者之间有冲突(可以合作解决的冲突),会要求他们先解决冲突,然后再由其中一人提交。如果没有冲突或主开发者可以自己解决,则通过。
- 开发者之间可以通过pull命令解决冲突,解决后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不参与代码开发)来看,Git的功能包括:
- 通过邮件或其他方式查看一般开发者的提交状态。
- 应用补丁,解决冲突(可以自己解决或要求开发者之间解决后重新提交),并决定哪些补丁对开源项目有用。
- 将结果提交到公共服务器,并通知所有开发人员。
Git的优点包括:
- 适合分布式开发,强调个体。
- 公共服务器的压力和数据量不会太大。
- 速度快且灵活。
- 开发者之间可以轻松解决冲突。
- 支持离线工作。
Git的缺点包括:
- 中文资料较少。
- 学习周期较长。
- 不符合常规思维。
- 代码保密性差,一旦开发者克隆完整库,所有代码和版本信息就可能被公开。
Git安装配置说明:本文仅介绍基础部分,详细操作请参考文首提供的链接。
在使用Git之前,需要先安装Git。Git支持在Linux/Unix、Solaris、Mac和Windows平台上运行。
在Windows平台上安装Git非常简单,通过msysGit项目提供的安装包即可。可以在GitHub页面下载exe安装文件并运行:
安装完成后,可以使用命令行的Git工具(自带ssh客户端),还可以使用图形界面的Git项目管理工具。
在开始菜单中找到"Git"-"Git Bash",会弹出Git命令窗口,你可以在该窗口进行Git操作。
Git的工作流程:
通过
git init命令,可以将当前目录变成Git可以管理的仓库:
$ git init Initialized empty Git repository in /Users/michael/learngit/.git/
在Windows系统上,为了避免各种问题,请确保目录名(包括父目录)不包含中文。
使用
git clone命令可以将Git仓库拷贝到本地,以便查看项目或进行修改。如果你需要与他人合作一个项目,或者想查看代码,可以克隆该项目。执行命令:
git clone [url]
其中,[url]是你想要复制的项目地址。
使用
git add命令可以将文件添加到仓库:
$ git add readme.txt
执行此命令后没有输出。
第二步,使用
git commit命令将文件提交到仓库:
$ git commit -m "wrote a readme file" [master (root-commit) cb926e7] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt
git commit命令中的
-m参数后面是本次提交的说明,可以输入任意内容。
使用
git status命令可以查看自上次提交后是否有修改。演示该命令时可以加上
-s参数以获得简短的输出结果。如果不加该参数,将会详细输出内容:
$ git status On branch master Initial commit Changes to be committed:

git diff命令用于查看difference,显示的格式是Unix通用的diff格式。
执行
git diff命令可以查看
git status结果的详细信息。
git diff命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。
git diff有两个主要应用场景:
- 查看尚未缓存的改动:
git diff
- 查看已缓存的改动:
git diff --cached
- 查看已缓存的与未缓存的所有改动:
git diff HEAD
- 显示摘要而非整个diff:
git diff --stat

git status命令显示自上次提交后更改或写入缓存的改动,而
git diff命令则逐行显示这些改动的具体内容。
接下来我们来看一下
git diff --cached的执行效果:
使用
git add命令将想要快照的内容写入缓存区,执行
git commit命令将缓存区内容添加到仓库中。
Git为每个提交记录你的姓名和电子邮件地址,因此第一步需要配置用户名和电子邮件地址:
$ git config --global user.name "xxxxxxxx" $ git config --global user.email xxx@xxxxx.com
如果你觉得
git add提交缓存的流程过于繁琐,Git允许你使用
-a选项跳过这一步。命令格式如下:
git commit -a
使用
git rm命令可以将条目从缓存区中移除,这与
git reset HEAD将条目取消缓存不同。"取消缓存"意味着将缓存区恢复到我们做出修改之前的状态。
默认情况下,
git rm file会将文件从缓存区和硬盘(工作目录)中删除。如果你想在工作目录中保留该文件,可以使用
git rm --cached:
Git常用命令总结:
- 从远程仓库克隆到本地分支:
git clone 远程地址
- 在本地创建新分支:
git branch 分支名称
(分支名称通常格式为feature-实现的功能) - 切换分支:
git checkout 分支名
- 删除分支:
git branch -D 分支名
- 查看当前项目中代码状态:
git status
和git status .
(后者表示当前项目所有文件,注意最后有一个点“.”) - 添加文件:
git add 文件目录/文件名
和git add .
(后者表示当前目录下所有文件提交到暂存区,注意最后有一个点“.”) - 提交到本地分支:
git commit -m "标签注解"
- 提交到远程分支:
git push origin 远程分支名
- 从远程仓库拉取代码到本地分支:
git pull origin 分支名
;如果有冲突,可以用git status
查看有冲突的文件。pull=fetch+merge
,fetch
是将远程代码拉下来,merge
是合并进去。 - 取消上次修改:
git reset .











