Git_版本管理-版本控制
Git--本地和远程
本地--工作区 暂存区 仓库区
Working Directory 已修改(modified) working tree clean 或者 Untracked files:
Stage 已暂存(staged) unstage 查看命令:git ls-files
Repository 已提交说明(committed)
动作: 加入--提交-推送发布 更新 撤销
回退 (回退的命令有两个:reset 和 checkout)
分支Branch :本地分支 远程分支 创建分支 切分支 合并分支 删除分支
仓库: repository 本地仓库 远程仓库
基本命令
origin 是当你运行 git clone 时默认的远程仓库名字
git reset HEAD README.md # 取消暂存
git checkout -- README.md # 撤消之前所做的修改--慎重用
撤消合并 还原提交 git revert
分支整合: merge 或者 rebase
合并或者变基
git fetch + git merge == git pull
git fetch + git rebase == git pull --rebase
git merge == 选择合并 来保持分支同步 提交历史是 记录实际发生过什么
git rebase == 选择变基 来保持分支同步 提交历史是 项目过程中发生的事
rebase的过程中,也许会出现冲突(conflict). 在这种情况,
Git会停止rebase并会让你去解决 冲突;在解决完冲突后,
用"git-add"命令去更新这些内容的索引(index),
然后,你无需执行 git-commit,只要执行:$ git rebase --continue 这样git会继续应用(apply)余下的补丁
解决冲突的方式
GitHub、Bitbucket 和码云(Gitee.com)选择 Pull Request 作为这项功能的名称
GitLab 和 Gitorious 选择 merge Request 作为这项功能的名称
git rebase :分支合并
rebase 做了什么操作呢?
首先,git 会把 feature1 分支里面的每个 commit 取消掉;
其次,把上面的操作临时保存成 patch 文件,存在 .git/rebase 目录下;
然后,把 feature1 分支更新到最新的 master 分支;
最后,把上面保存的 patch 文件应用到 feature1 分支上;
分支策略:
功能分支
位置分支
bug和hotfix
应用层面: 热修复(HotFix)是指在不重新发布整个应用程序的情况下,通过更新修复应用程序中的 bug 或者引入新功能
动态地加载补丁(Patch),以解决应用程序的问题或者改进功能
git 的分支管理层面: 热修复(hotfix)是一种用于处理紧急bug修复的分支管理策略
补丁
以 引入的变更即提交 这样的概念为中心的,
这样一系列的提交,就是一系列的补丁
Git补丁是指将一个或多个提交(commit)的差异(diff)保存为补丁文件(通常以`.patch`为后缀)
进行变基和拣选
变基。 它会提取该提交的补丁,之后尝试将其重新应用到当前分支上
git commit git diff git format-patch git apply
git cherry-pick
patch文件 补丁
只包含了变更的部分,因此文件体积很小,便于传输、存储
构建patch
选择对应的commit做format-patch
git format-patch <commit-hash>
应用patch
git am 和git apply命令是在git中用来应用patch文件的两种常见方式
git am 将patch文件中的修改内容应用到代码库并且创建一个新的提交
git apply 将patch文件中的代码变更,应用到当前的代码库中
git cherry-pick
git cherry-pick 命令用来获得在单个提交中引入的变更 ,就是将指定的提交(commit)应用于其他分支
git revert 命令本质上就是一个逆向的 git cherry-pick 操作
git rebase 命令基本是是一个自动化的 cherry-pick 命令
发布补丁和存档文件
Git 还可以通过命令 git send-email 直接已电子邮件的方式发送补丁
Git 还可以通过打包文件(bundles)共享提交历史
从某个指定版本创建一个存档文件(archive)git archive
分支
git branch
git checkout dev
目标分支目前存在的情况,即切换到它,那么您可以使用这个 checkout 命令,git checkout dev
目标分支目前不存在的情况,并且您想创建一个新分支并立即切换到它,git checkout -b <name_of_the_branch>
Git 2.23起,你也可以使用新的git switch 命令来创建并切换分支.两种情况
git switch dev
git switch -c <name_of_the_branch>
git fetch 命令获取远程分支
git branch --set-upstream-to origin/远程分支名 本地分支名
Git分支策略-分支模型
常见的分支策略有以下三种:GitFlow、GitHubFlow 以及 GitLabFlow
GitHub、Bitbucket 和码云(Gitee.com)选择 Pull Request 作为这项功能的名称
GitLab 和 Gitorious 选择 merge Request 作为这项功能的名称
Git-flow
Git分支模型(master/hotfix/develop/feature/release)
两种核心分支:
主分支(Master):代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本
开发主分支(Develop):这个分支是我们是我们的主开发分支
三种临时分支
功能(feature)分支
预发布(release)分支
修补bug(hotfix)分支
GitHubFlow
托管在GitHub上时
通常只有一个Master分支是固定的,
而且GitHubFlow中的Master分支通常是受保护的,只有特定权限的人才可以向Master分支合入代码。
在GitHubFlow中,新功能开发或修复Bug需要从Master分支拉取一个新分支,在这个新分支上进行代码提交;
功能开发完成,开发者创建 Pull Request(简称PR),
通知源仓库开发者进行代码修改review,确认无误后,
将由源仓库开发人员将代码合入Master分支
GitLabFlow
托管在 GitLab 上时
GitLabFlow 增加了对预生产环境和生产环境的管理
GitLabFlow中的Merge Request是将一个分支合入到另一个分支的请求,
通过Merge Request可以对比合入分支和被合入分支的差异,也可以做代码的Review
Review代码并通过合并请求
场景
需要切换分支但又不想丢失当前更改?存储可让您保存工作而不提交,让您稍后返回
git stash
git stash pop
合并多个commit提交 压缩提交可让您将多个提交合并为一个,以获得更整洁的历史记录。
git rebase -i HEAD~<number-of-commits>
本地分支和远程分支 Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)
//已有本地分支 和远程创建关联 然后拉取 git pull
git branch --set-upstream-to origin/远程分支名 本地分支名
git remote 命令用于创建远程分支
Git背后的数据结构
config 文件包含项目特有的配置选项
info 目录包含一个全局性排除(global exclude)文件, 用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns
refs 目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针
objects 目录存储所有数据内
HEAD 文件指向目前被检出的分支;index 文件保存暂存区信息
Git 的核心部分是一个简单的键值对数据库(key-value data store)
三个 blob 对象(保存着文件快照)、
一个 树 对象(记录着目录结构和 blob 对象索引)
一个 提交 对象(包含着指向前述树对象的指针和所有提交信息)
创建新分支的呢?即创建了一个可以移动的新的指针 一个名为 HEAD 的特殊指针--》HEAD 指向当前所在的分支
远程仓库和本地仓库
1.远程仓库
git remote -v
git remote set-url origin https://test/test.git
git remote add origin https://test/test.git
2.本地仓库 git init ## 隐藏的.git目录-是git的版本库 ndex 文件.git/index
git status
跟踪--版本标记--提交本地仓库
untracked 下一步 git add 或者不处理
modified --tracked 下一步 git add
工作区域: modified new file deleted 创建-修改-删除 (增删改)
staged 表示已经被加入到暂存区了,但是还没有被提交到本地库
git rm --cached <file>
git checkout -- <file> 会做替换
commited 本地仓库 --Git中处理已提交但未推送
nothing to commit,working directory clean
git reset
git push origin branch——name
git revert
查看历史操作--git log
查看工作区和暂存区之间的差异 git diff
撤销-回退-暂存-返回
版本回退: 版本回退--用commitID
版本撤销
撤销修改: git checkout --
场景: 回退到特定版本--丢弃后续提交
创建新提交撤销指定版本-保留其后的变更
本地分支和远程分支
git branch
git branch -r
git branch -a
## 本地分支和远程分支建立关联
git branch --set-upstream-to=origin/dev dev
版本
标记 HEAD指针指向当前分支

浙公网安备 33010602011771号