关于Git:
Git 是一种分布式的版本控制工具,其作用如下:
- 备份工程,存档防止因为意外情况
- 记录修改历史,记录修改的时间和位置,错误回复,版本回滚
- 在多端同步自己提交的代码
Git 与 SVN的区别:
这里就说一下最主要的区别:Git是分布式的,SVN是集中式的。
SVN的版本库只有一个(什么是版本库?),就在其中央服务上。开发人员干活的时候,就先从中央服务器下载最新的项目版本,然后进行操作,完成后就再把本地的项目代码推送回中央服务器,这样做的前提是你必须联网!
Git没有这样一个中央服务器,每个开发人员电脑上都有一个独立的版本库。进行开发的时候,代码可以在个人电脑上任意修改,然后提交,这样在断网的情况下也能完成工作了。但是,这样出现的问题就是,如何实现多人协同开发?最初的做法应该是,各个开发人员之间相互推送修改,比如A修改了一个项目中的test.c文件,那当他要将修改后的版本,同步给其他团队成员时,他可能需要将修改推送给每个成员。这样做至少来说会很低效,当团队比较大的时候,开发效率明显就不行了。所以,后来分布式版本控制系统通常也有一台“中央服务器”,但是这个服务器只是用来方便大家“交换”修改罢了,其定位和SVN的中央服务器是不同的,我们称它为代码托管网站,像现在的github和git@OSC。
Git常用命令和简介:
版本修改与提交:
- git diff filename —— 检查文件filename相较于之前做了哪些修改,在用add命令添加到暂存区前才能看到变化
- git add filename —— 将文件filename添加到暂存区
,将filename替换成-A后,这个命令是将工作区所有文件加入到暂存区,但是不建议加这个参数 - git status —— 显示目录中的文件修改与提交情况
- git commit -m “description” —— 提交存在于暂存区的内容保存到版本库中
版本回滚和前滚:
- git log —— 显示从最近到最远的版本提交日志,每份日志上会有commit-id、作者、时间以及提交时的描述
- git reset –hard commit-id —— 使用这个可以回到,commit-id这次提交后的版本
- git reflog —— 显示你每一次的命令,且提供当时的commit-id,利用这条命令,我们可以获得回滚前的commit-id,然后使用前面的reset命令回到未来
分支管理:
- git branch newbranch —— 创建名为newbranch的分支
- git checkout curbranch —— 转移到名为curbranch的分支下
- git checkout -b curbranch —— 创建并转移到名为curbranch的分支下
- git merge anotherbranch —— 将当前分支与名为anotherbranch的分支合并
- git branch -d curbranch —— 删除名为curbranch的分支
关于分支的合并:
假如两个合并的分支,其文件内容没有在同一行都进行了修改,那么Git能够完美的帮你完成合并;但是如果,在同一行都进行了修改,那Git会提示合并出现了冲突,在冲突的地方Git会进行标记,这时就需要人工处理一下了。
Git远程操作:
- git clone address newname —— 克隆地址为address的远程版本库到本地,并命名为newname(可选)
- git remote -v —— 查看远程版本主机名和地址
- git remote show hostname —— 显示主机名为hostname的远程版本主机的详细信息
- git remote add hostname address —— 添加主机名为hostname,地址为address的远程主机
- git remote rm hostname —— 删除主机名为hostname的远程主机
- git fetch hostname branch —— 从主机名为hostname的远程主机上名为branch(可选)的分支上取回更新,不指定分支就取回所有分支更新
- git pull hostname remotebranch:localbranch —— 取回远程主机remotebranch分支与本地分支localbranch合并,pull后面都是可选的
- git push hostname remotebranch:localbranch —— 将本地分支localbranch的更新,推送到远程主机分支remotebranch,push后面都是可选的
一些Git使用建议:
- 多用客户端和工具,少用命令行,除非是在Linux服务器上直接开发
(永远记住我们学习使用工具的目的是,为了使用工具提升工作效率而不是工具本身) - 每次提交前,diff自己的代码,以免提交错误代码
- 下班回家前,整理好自己的暂存区,以免遗忘而造成错误,也有好的工作环境,提交后也多了份备份
- 并行的项目,使用分支开发,不同模块开发可能有关联,以免互撤后退
- 遇到冲突是,搞明白冲突的原因,千万别随意丢弃别人的代码
- 产品发布后,记得打一个tag,方便将来拉分支修bug