Git概述
-
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
-
Git 与 SVN 区别
- Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
- Git 与 SVN 区别点:
- Git 是分布式的,SVN 不是(开发人员具有远程和本地Git仓库)
- Git 把内容按元数据方式存储,而 SVN 是按文件
- Git 分支和 SVN 的分支不同
- Git 没有一个全局的版本号,而 SVN 有
- Git 的内容完整性要优于 SVN
-
SVN是集中式版本控制系统(远程服务器)
- 缺点
- 服务器单点故障
- 容错性差
- 缺点
-
Git的工作流程
- 从远程仓库中克隆代码到本地仓库
- 从本地仓库中checkout代码然后进行代码修改
- 在提交前先将代码提交到暂存区
- 提交到本地仓库,本地仓库中保存修改的各个历史版本
- 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库
Git常用命令
- 环境配置 :
- 设置用户信息
- git config --global user.name " "
- git config --email user.email " "
- 查看配置信息
- git config --list
- git config user.name
- 通过上面的命令设置的信息会保存在~/.gitconfig文件中
- 设置用户信息
- 获取git仓库
- 在本地初始化一个仓库 : git init
- 从远程仓库克隆 : git clone URL
- Git的工作区,暂存区,版本库
- 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
- 暂存区:叫 stage 或 index.一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index).
- 工作区:包含.git文件夹的目录,主要用于存放开发代码
-
Git工作目录下文件的两种状态
- untracked 未跟踪 (未被纳入版本控制)
- tracked已跟踪 (被纳入版本控制)
- Unmodified 未修改状态
- Modified 已修改状态
- Staged 已暂存状态
- git status 查看文件状态
- git status -s 使输出信息更加简洁
-
本地仓库 :
- git add 文件名称 (将未跟踪的文件添加到暂存区)
- git reset HEAD 文件名称 (将暂存区的文件重新变成未跟踪状态)
- git rm “文件名称” (删除文件,默认进入暂存区)
- git commit -m “日志信息” (提交到本地版本库)
- git log (查看日志记录)
- 将文件添加至忽略列表
- 一般有一些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表,可以在工作目录中创建一个名为.gitignore的文件,列出要忽略的文件模式
- 一般有一些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表,可以在工作目录中创建一个名为.gitignore的文件,列出要忽略的文件模式
-
远程仓库的操作
- 查看远程仓库 :
- git remote (-v)
- git remote show origin
- origin : 是克隆的远程仓库的默认名字
- 添加远程仓库
- git remote add < shortname > < url> (添加一个新的远程Git仓库,同时指定一个可以引用的简写)
- 可以添加多个远程仓库关联
- 移除无效的远程仓库:(只是从本地移除远程仓库的记录,并不会真正影响到远程仓库)
- git remove rm 远程仓库的默认名字
- 从远程仓库中抓取与拉取
- git fetch origin master (是从远程仓库获取最新版本到本地仓库,不会自动merge)
- git merge origin/master (合并文件)
- git pull origin master (从远程仓库获取最新的版本并merge到本地仓库)
- 如果本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错,解决问题,可以在git pull 命令候加入参数 --allow-unrelated-histories
- 推送到远程仓库
- git push [ remote-name ] [ branch-name ]
- 查看远程仓库 :
-
Git分支
- 查看分支
- 列出所有本地分支 : git branch
- 列出所有远程分支 : git branch -r
- 列出所有本地分支和远程分支 : git branch -a
- 创建分支
- git branch 分支名称
- 切换分支
- git checkout 分支名称
- 推送至远程仓库分支
- git push 远程仓库的默认名称 分支名称
- 合并分支
- git merge 分支名称
- 如果在两个不同的分支,对同一个文件的统一部份进行了不同的修改,Git就没有办法合并他们,同时会提示文件冲突,此时需要我们打开冲突的文件并进行手动修复冲突内容,最后执行 [ git add 文件名字 ] 命令来标识冲突已解决
- 删除分支
- 删除本地分支 : git branch -d 分支名称
- 如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的参数改为 -D
- 删除远程分支 : git push origin -d 分支名称
- 删除本地分支 : git branch -d 分支名称
- 查看分支
-
Git标签
- Git可以给历史中的某一个提交打上标签,以示重要,会使用这个功能来标记发布结点(v1.0,v1.2等),标签指的是某个分支某个特定时间点的状态,通过标签,可以很方便的切换到标记时的状态
- 列出已有的标签
- git tag (列出所有tag)
- git show [tag] (查看tag的信息)
- 创建新的标签
- git tag [tagname]
- 将标签推送至远程仓库
- git push [ remote ][ tag ]
- 检出标签 : 新建一个分支,指向某个tag
- git checkout -b [ branch ] [ tag ]
- 删除标签
- git tag -d [ tag ] : (删除本地tag)
- git push origin :refs/tags/[ tag ] (删除远程tag)