一、git简介
git不仅仅是个版本控制系统,同时它也是个内容管理系统,工作管理系统等。
1.git和svn的区别:
- git是分布式的,svn不是,这也是git与其他非分布式的版本控制系统的核心区别;
- git把内容按元数据的方式存储,而svn是按照文件;
- git分支和svn的分支不同,在svn中,一个分支其实就是一个目录;
- git没有一个全局的版本号,而svn有;
- git的内容完整性要优于svn。
2.git的工作流程:
- 克隆git资源作为工作目录;
- 在克隆的资源上添加或修改文件;
- 若其他人修改了内容,可以更新资源;
- 在提交前查看修改;
- 提交修改;
-
在修改完成后,若发现了错误,可以撤回提交,修改后可以提交。
git流程图.png
二、git基本概念解读
- 工作区:本机能看到的目录;
- 暂存区:一般存放在“.git”目录下的index文件中;
- 版本库:在隐藏目录“.git”中,不属于工作区,而是git的版本库。
三、git基本操作
1.创建仓库
使用git init命令初始化一个git仓库,git init是使用git 的第一个命令;
git init <directory>
初始化后,会在<directory>目录下出现一个名为.git的目录,所有git需要的数据和资源都存放在这个目录中。
2.克隆已有项目
从现有git仓库中拷贝项目,执行完成命令后,会将需要克隆的项目克隆到指定的目录下;
git clone <repo> <directory>
会在<directory>目录下创建一个目录,其中包含一个.git目录,用于保存下载下来的所有版本记录。
3.添加文件
git add .
可以将文件添加到暂存区中,使用git add .
可以将当前项目中的所有文件都添加到暂存区;使用git add <fileName>
可以只添加指定的文件。
4.查看项目状态
git status
git status
命令用于显示工作区和暂存区的状态。可以查看未被git管理的文件,已被管理、被修改但未被提交的文件。
5.查看具体的改动
git diff
git diff
命令是用来查看执行git status的结果的详细信息。显示已经写入缓存区与已修改但尚未写入缓存的改动的区别。
6.提交
git commit -m '注释'
使用git add
命令是将内容写入缓存区,而执行git commit
是将缓存区内容添加到仓库中。
6.取消已缓存的内容
git reset HEAD
用于取消已缓存的内容,执行命令后,再git commit
,不会将该文件提交。
简而言之就是,执行git reset HEAD
取消之前git add
添加的文件,不希望该文件包含在下一次提交到缓存区的快照中。
7.删除文件
git rm <fileName>
如果只是简单的从工作目录中删除文件,在运行git status
时会有
Changes not staged for commit
的提示。
若想从git中移除文件,就必须从已跟踪文件清单中移除,然后再提交。
8.移动或重命名
git mv
git mv
命令是用来移动、重命名一个文件、目录、软连接。
四、分支管理
使用分支意味着开发人员可以从开发主线上分离开来,可以在不影响主线的同时继续开发工作。
1.创建分支
git branch <branchName>
2.列出分支
git branch
3.切换分支
git checkout <branchName>
当切换分支时,git会用该分支最后提交的快照替换工作目录的内容。
4.删除分支
git branch -d <branchName>
5.合并分支
git merge <branchName>
可以使用git merge
命令,将其他分支合并到当前分支中。
6.合并冲突
在进行合并操作时,不仅仅是进行简单的文件添加与移除操作,同时也会进行合并修改。
当合并冲突出现时,需要我们手动去修改它,然后可以使用git add
命令告诉git冲突已经解决。
7.查看提交历史
git log
8.打标签
git tag
当项目开发到一定阶段,希望发布一个“1.0”版本,我们可以使用git tag
命令给最新一次提交打上标签。
五、远程仓库
git虽然不像svn那样有中心服务器,但是如果想分享代码或与其他开发人员合作开发,就需要将代码数据放到一台其他开发人员能够连接的服务器上。
1.添加远程库
git remote add [name] [url]
2.查看远程库
git remote
3.提取远程库
git fetch
git merge
从远程仓库下载新分支或数据,执行完该命令后还需要执行git merge
命令,将远程仓库的数据合并到当前分支。
4.推送到远程仓库
git push
5.删除远程仓库
git remote rm [name]
网友评论