目录
一.概述
1.优点
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种
项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作
流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
2.何为版本控制
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,
方便版本切换。
3.为什么需要版本控制
个人开发过渡到团队协作。
集中式版本控制工具
CVS、SVN(Subversion)、VSS…… 集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码
仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用
其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次
对整个文件仓库的完整备份。
4.工作机制
5.代码托管中心
代码托管中心是为 Git 项目提供远程仓库的服务平台,帮助开发者更好地管理和协作。常见的代码托管平台包括:
-
GitHub: GitHub 是全球最流行的代码托管平台之一,支持 Git 版本控制系统。它提供项目的托管服务,支持协作、代码审查、问题跟踪和 CI/CD 集成等功能。GitHub 还支持开源项目管理,很多知名的开源项目都托管在 GitHub 上。
-
GitLab: GitLab 是另一个流行的代码托管平台,除了提供 Git 仓库管理,还提供 CI/CD、DevOps 集成等完整的解决方案。GitLab 提供社区版(开源)和企业版,开发者也可以自行托管 GitLab 服务(局域网)。
-
Bitbucket: Bitbucket 是 Atlassian 旗下的代码托管平台,支持 Git 和 Mercurial 版本控制系统。Bitbucket 和 Jira、Confluence 等工具紧密集成,适合团队项目管理和协作。
-
Gitee(码云): Gitee 是国内流行的代码托管平台,由开源中国提供服务。它与 GitHub 类似,提供仓库托管、协作、代码审查等功能,同时具有良好的本地化服务支持。
二.git的使用
1.设置用户签名
基本语法
git config --global user.name 用户名
git config --global user.email 邮箱
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看
到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。
2.初始化本地库
git init
注git的命令是基于linux的
3.查看本地库状态
git status
4.提交文件到远程库
git add 文件名
git status
git commit -m "注释" 文件名
注:当文件修改以及add时候git status发生改变
5.历史版本
git reflog 查看版本信息
git log 查看版本详细信息
git reset --hard 版本号 版本穿梭
切换版本之后内容也随之改变
Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示。
三.Git 分支操作
- 开始:从项目的初始状态开始。
- 创建新分支:使用
git checkout -b new-branch
创建并切换到新分支。 - 在新分支上开发:进行代码更改和开发。
- 添加更改:使用
git add .
将更改暂存。 - 提交更改:使用
git commit -m "提交信息"
进行提交。 - 切换到主分支:通过
git checkout main
切回主分支。 - 更新主分支:使用
git pull
获取远程主分支的最新更改。 - 合并新分支:使用
git merge new-branch
合并新分支的更改。 - 处理冲突:如果有冲突,解决冲突后继续合并。
- 推送更新:通过
git push
将合并后的更改推送到远程仓库。 - 结束:完成分支操作。
1.什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时
候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。(分支底层其实也是指针的引用)
2.分支的好处
1. 隔离开发
分支允许你在不同的上下文中工作,而不会干扰主分支或其他分支的代码。每个分支可以独立进行开发、测试和修改。
2. 并行开发
团队成员可以同时在不同的分支上工作,进行并行开发。这减少了团队成员之间的冲突,提高了工作效率。
3. 实验新功能
可以在新的分支上实验新功能或进行大规模的改动,而不影响主代码库。如果实验成功,可以将其合并到主分支;如果失败,可以轻松删除分支而不会留下任何痕迹。
4. 代码审查
通过创建分支,可以将功能开发完毕后的代码提交到代码审查流程中。团队成员可以在合并到主分支之前,查看和评论新代码,确保代码质量。
5. 版本控制
使用分支可以有效管理版本,例如,维护生产环境的稳定性,开发新版本,或修复旧版本的bug,而不会影响其他版本。
6. 简化合并
分支可以将特定的功能、修复或改进集中在一个地方,这使得合并操作更加简单和清晰。使用合并请求(Pull Request)或合并请求流程,可以确保更改经过审查后再合并。
7. 避免主分支混乱
主分支通常是稳定的生产版本,使用分支可以防止直接在主分支上进行频繁的提交和更改,保持主分支的整洁。
8. 容易回滚
如果某个分支上的更改不再需要或者引入了问题,可以方便地删除分支或回滚到先前的提交,减少了风险。
9. 灵活性
分支提供了灵活的开发模型,可以根据团队的需求,快速调整开发策略和工作流程。
总结
使用 Git 分支可以提高团队的开发效率,保持代码的整洁与稳定性,同时为功能的实验和开发提供安全的环境。
3.分支的操作
1. git branch
-
功能:列出所有本地分支,或创建、删除分支。
-
查看本地分支:
git branch
解释:列出所有本地分支,当前所在分支前会有一个
*
号标识。 -
创建新分支:
git branch new-branch
解释:创建名为
new-branch
的新分支,但不会切换到该分支。 -
删除分支
git branch -d branch-name
解释:删除
branch-name
分支(如果分支没有被合并,可能会提示错误,可以使用-D
强制删除)。
-
2. git checkout
-
功能:切换到指定分支,或基于某个分支创建并切换到新分支。
-
切换到已有分支:
git checkout branch-name
解释:切换到
branch-name
分支。 -
创建并切换到新分支:
git checkout -b new-branch
解释:基于当前分支创建并切换到
new-branch
。
-
3. git merge
-
功能:将指定分支的更改合并到当前分支。
-
合并分支:
git merge branch-name
解释:将
branch-name
分支的更改合并到当前分支。 -
解决冲突后完成合并:
git add . git commit
解释:在合并过程中如有冲突,手动解决冲突后使用
git add
暂存解决冲突的文件,接着使用git commit
完成合并。
-
4. git rebase
-
功能:将一个分支的更改应用在另一个分支的基础之上,保持线性提交历史。
-
基于另一个分支重置提交历史:
git rebase branch-name
解释:将当前分支的提交应用在
branch-name
分支的基础上,从而重写当前分支的提交历史。 -
解决冲突后继续变基:
git rebase --continue
解释:在变基过程中遇到冲突并解决后,使用此命令继续变基。
-
5. git pull
-
功能:从远程仓库拉取并合并最新的更改到当前分支。
git pull
解释:从远程仓库拉取最新更改,并将其合并到当前分支。
4.产生冲突
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替
我们决定使用哪一个。必须人为决定新代码内容。
1. 查看冲突标记
在 Git 冲突中,会看到如下标记:
<<<<<<< HEAD
# 当前分支的代码(例如:分支A)
return a + b # 简单加法
=======
# 来自合并分支的代码(例如:分支B)
return a + b + 10 # 带有偏移量的加法
>>>>>>> branchB
2. 决定处理方式
根据项目的实际需求,你有三种选择:
选项 1: 保留 HEAD
分支(当前分支)的代码
删除标记和冲突部分中合并分支的代码,仅保留 HEAD
分支的内容:
def calculate_sum(a, b): return a + b # 保留当前分支的简单加法
选项 2: 保留合并分支(branchB
)的代码
删除标记和 HEAD
的代码,只保留合并分支的内容:
def calculate_sum(a, b): return a + b + 10 # 保留带有偏移量的加法
选项 3: 结合两者进行修改
你可以手动编辑代码,将两者结合或根据需求进行调整。例如:
def calculate_sum(a, b): return (a + b) * 2 + 10 # 自定义修改,结合两者的逻辑
3. 保存文件并完成合并
编辑完成后,保存文件,并使用以下命令解决冲突:
git add <冲突文件> git commit
这将完成冲突解决并生成新的合并提交。
4. 推送更改
如果是在本地解决的冲突,最后你还需要将合并后的更改推送到远程仓库:
git push
总结
在合并冲突中,你需要手动修改代码,选择适合项目需求的方案,或者将两者结合。然后使用 git add
和 git commit
解决冲突,最后将更改推送到远程仓库。