Git 是一个免费、开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。
Git 最初是由 Linus Torvalds 设计开发的,用于管理 Linux 内核开发。
Git 管理文件系统主要分为三个层次
# config的三个作用域
# 缺省(留空)等同于local
git config --local # local 只对某个仓库有效
git config --global # global 对登录用户所有仓库有效
git config --system # system 对系统所有登录的用户有效,基本不用
# 常用配置方式
git config --global user.name 'your_name'
git config --global user.email 'your_email@domain.com'
# 如果你已经初始化过用户名和邮箱,现在想修改,那么使用下面的命令
git config --global --replace-all user.name "输入你的用户名"
git config --global --replace-all user.email "输入你的邮箱"注:优先级 local > global > system,也就是说当对一个仓库同时设置了 global 和 local 那么采用 local 配置的信息。
有时候我们也会查看 Git 配置信息等,使用如下命令可以查看相应层次的配置信息
# 显示 config 的配置 加--list
git config --list --local # 这个只能在 git 仓库中使用
git config --list --global
git config --list --systemgit config --unset --local user.name
git config --unset --global user.nameGit 在线代码托管的仓库平台,常用的有两种,一个是 GitHub,一个是 Gitee。
国内用户选择 Gitee,注册登录账号。
Git 有两种方式来进行初始化
git clone
你已经有一个远程的 Git 版本库,只需要在本地克隆一份
git clone <远程仓库地址>git init 和 git remote
git init 命令进行初始化
git remote add 命令来增加一个远程服务器端
# cd 项目代码所在的文件夹
git init
# 添加远程库地址
git remote add origin <远程仓库地址>
# 修改远程地址
git remote set-url origin <远程仓库地址>
# 删除远程地址
git remote rm origingit add:将所有改动的文件(新增和有变动的)放在暂存区,由 git 进行管理。
git add readme.md # 将 readme.md 文件添加到暂存区
git add . # 将当前工作目录的所有文件添加到暂存区
git add -u # 把修改之后的文件(这些文件已经被管理起来了)一次性提交到暂存区git commit:提交当前工作空间的修改内容,提交的时候必须用 -m 来输入一条提交信息。
git commit -m 'first commit' # -m 指定 commit 的信息
git commit # 这时候会跳出一个文本输入界面,让你输入更多的 commit 信息
# 修改代码提交信息
git commit --amendgit status:查看工作区和暂存区文件的状态
git status
-- 红色:新增的文件/修改的文件 => git add .
-- 绿色:已添加到暂存区 => git commit -m '描述信息'git reset:从暂存区回撤
git reset HEAD -- 文件名 // 撤回特定文件
git reset HEAD -- . // 撤回暂存区所有的内容
# 回滚历史版本
git reset --hard 版本号
# 查看提交历史记录
git reflog
# 回滚到指定记录
git reset --hard 版本号git mv:将 git 管理的文件进行重命名
git mv readme readme.md # 使用git的方式对文件进行重命名git rm:从 git 管理的文件删除某个已管理的文件,同时把修改的情况添加到暂存区
git log:查看历史日志
git pull:从版本库(既可以是远程的也可以是本地的)将代码更新到本地。
# 将 origin 这个版本库的代码更新到本地的 master 主分支
git pull origin master
# 强制拉取没有关联的分支
git pull origin master --allow-unrelated-historiesgit push:将本地 commit 的代码更新到远程版本库中
# 将本地的代码更新到名为 origin 的远程版本库中
git push origin master
git push origin <分支名称>
# 强制推送
git push origin master --force
# 强制推送
git push origin HEAD --forceGit 的三个区域
Git 的 3 个区域,分别是工作目录、暂存区、版本历史。
为什么要有暂存区,通过工作目录直接提交到本地仓库不就OK了!那么暂存区存在有什么作用,存在的意义是什么?
每一个功能应该单独做成一次提交,这样可以保证提交历史的清晰。否则,当你想要回滚历史的时候,你会无所适从,根本分不清每个版本包含了哪些功能,修复了哪些 bug,而暂存区的作用就是为了,可以选择提交,比如你在开发 B 功能的时候,发现 A 功能还存在 Bug,这时候就需要先修复 A 中的 Bug,然后先提交修复的 A 中的 Bug,然后再提交 B 功能开发的文件。这样就可以提高提交版本历史记录的清晰,方便回滚。
分支就相当于一个独立的开发空间,比如前端和后端开发,前端开发可以建立一个分支,后端开发也可以建立一个分支,但是彼此在不同工作空间里面工作的时候是互不影响的,当需要集成的时候又可以把他们集成到一个公共的分支上面去。
git branch 查看分支情况、创建分支、删除分支
git branch -v # 查看本地分支的详细情况
git branch -a # 查看所有分支,包括远端分支,但没有过于详细的信息
git branch -av # 查看所有分支情况
# 创建一个新的分支,基于 hash_value 的这个 commit 创建一个新的分支,hash_value 可以省略,那么默认是基于当前分支的最后一个 commit 创建。
git branch branch_name hash_value
# 删掉某个分支
git branch -d branch_name
git branch -D branch_name # 这个分支已经有了一些 commitgit checkout 切换分支或者创建分支
# 切换分支
git checkout branch_name
# 切换回主分支
git checkout master
# 创建一个新的分支并切换过去
# git_id可以是hash_value,也可以是某个分支的名字(分支的名字其实就指向了某个 commit)
git checkout -b branch_name git_id
git checkout -b temp 9ef147d
git checkout -b temp2 master
# 创建空分支
git checkout --orphan branch_name
# 清空目录
git rm -rf .
git rm --cached -r .
# 合并分支,将指定分支合并到当前分支,切换分支后再合并
git merge 分支名称
# 在合并改动之前,你可以使用如下命令预览差异:
git diff <source_branch> <target_branch>切换分支,必须在 .git 的同级目录下执行
在实际生产开发的过程中,如果每个人都随意的创建分支,随意的提交commit,必将导致整个 git 仓库非常的混乱,不易于团队协作。
Vincent Driessen 同学为了解决这个问题提出了A Successful Git Branching Model,最后形成了业内普遍采用的git 工作流程,大家都在约定的流程内使用 git,使得团队协作效率大大提高。
Git Flow 的常用分支
git flow 的具体使用细节
分支的命名规范 + 大家约定俗成的东西
1. 主分支 - master
=> 创建 git 仓库的时候就会生成的
=> 不接受任何代码上传
=> 只接收 dev 分支合并的内容
=> 只存储每一个迭代版本中经过测试合格的版本
2. 主开发分支 - dev / developmen / deve
=> 初始化项目以后, 就会直接从 master 上开辟的分支
=> 不接受任何代码上传
=> 只接收 主功能分支 合并的内容
=> 存储再开发过程中的每一个阶段内容
3. 主功能分支 - feature-xxx
=> 直接从 dev 分支上开辟出来的分支
=> 进行各个功能的开发
=> 开发完毕以后吧代码合并到 dev 分支上
=> 接收文件上传
4. 功能 bug 解决分支 - feature-xxx-fix-xxx
=> 再项目运行过程中, 出现 bug 进行修复的分支
=> 都是从 功能分支 上开辟出来的
=> 修改完毕以后合并到 功能分支上
=> 再由功能分支合并到 dev 分支上
5. 紧急 bug 解决 - hot-fix-xxx
=> 直接从 master 上开辟
=> 进行紧急的 bug 修复
=> 修复完毕以后, 直接合并到 master 上git 忽略文件:在我们开发过程中,如果有一些文件并不希望被git所管理,可以新建一个 .gitignore 文件,在里面书写你不希望 git 帮你管理得文件或者文件夹。
说明文件:对当前仓库内容得描述和说明解释。
上传到远端仓库时,readme 中的内容会按照 Markdown 的格式显示在仓库的首页。