伏雨朝寒悉不胜,那能还傍杏花行。去年高摘斗轻盈。漫惹炉烟双袖紫,空将酒晕一衫青。人间何处问多情。 ———— 纳兰容若
Git:分布式、版本控制、软件
如何理解Git?
- 软件:需要安装到电脑上
版本控制(演进形态)
- 文件形态。最常见的方式是在同一个文件夹下存放多个不同命名的文件形式进行管理(比如多个word文件,多个视频文件等)
- 本地版本控制。本地只有一个文件,通过本地版本控制软件存到某个位置,通过该软件进行版本管理
- 集中式版本控制。中央服务器保存各个客户端的代码,代表软件:SVN。问题:各客户端与中央服务器之间的链接一旦断开或者中央服务器一旦宕机,代码无法正常提交。
- 分布式版本控制。集中式版本控制存在问题:客户端从中央服务器获取到的版本只能是其中一个版本,而分布式版本控制是在所有客户端都存放项目的所有历史版本。当存放代码的中央服务器宕机,不影响各客户端进行“本地”版本管理,并且当后续中央服务器重启或升级设备,可以将本地所有版本向中央服务器推送,不影响所有项目的完整性。
相关定义:git软件安装在各电脑客户端,中央服务器不安装,中央服务器理解成github等“代码仓库”。
QuickStart
- 进入需要使用git管理的“文件夹”
- 进行“初始化”。右键打开“git bash here”,命令框中键入
git init
,宣告使用git管理该文件夹,运行完毕后会自动生成“.git”文件夹,用于存放管理过程中所有配置、版本信息等内容,非常重要,不可删除。 - 检测文件状态。键入
git status
,检测当前文件夹下的文件及状态 - 告知git需要管理的内容。键入
git add [文件名]/[.]
,比如git add index.html
,向git告知管理“index.html”文件或全部文件(git add .
) - 生成版本。键入
git commit -m '第一个版本'
,自此,所有被管理文件已生成一个新版本。 - 对于所管理的文件进行的任何修改都会被git检测到,
git status
可以查看变动的文件,键入git add .
将所有变动文件提交到git进行管理,键入git commit -m '第二个版本'
,生成第二个版本。 - 查看版本。键入
git log
,可查看所有版本信息
最小化认识git
- 进入要管理的目录下
git init
进行git初始化git status
检测当前目录下文件状态文件状态
- 红色:新增的文件/修改了的文件 ==> 执行
git add [文件名]/.
让git帮助管理这些文件(.
代表需要让git管理所有变动的文件) - 绿色:git已经管理起来的文件 ==> 执行
git commit -m '描述信息'
让git生成一个全新版本
- 红色:新增的文件/修改了的文件 ==> 执行
!!!Git预配置
配置个人用户名及邮箱,在执行git commit
命令之前让git认识需要帮助“谁”进行版本管理。
如果不配置,会出现“报错”:
配置代码:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
分支
查看分支:git branch
创建分支:git branch [分支名]
切换分支:git checkout [分支名]
合并分支:git merge [要合并的分支名](该命令需要先切换到最终需要合并到的分支上键入)
删除分支:git branch -d [分支名]
- 分支与分支之间拥有代码隔离功能,随时跳到不同分支进行不同功能开发。
假如在新分支开发功能时发现主分支(master/main)出现bug需要立刻进行修复,则git checkout master/main
切换到主分支,然后git branch mix_bug
创建修复bug分支,git checkout mix_bug
切换到bug修复分支进行bug修复,此刻同时存在三个分支:master/main,dev,mix_bug分支。 - bug分支修复完毕,进行
git add .
提交暂存区,git commit -m mixed_bug
生成修复完毕bug的版本,最后合并分支到master/main分支上。 git checkout master/main
切换到主分支,git merge mix_bug
进行合并.
合并结束后,git branch -d [分支名]
删除bug分支- 当dev分支开发完毕后,需要再切换到master分支,然后将dev分支合并到master/main分支,但此时可能会产生冲突(conflicts),此时冲突会在编辑器中展现,需要手动修复双分支冲突部分,最后进行提交。
GitHub等远程仓库
GitHub和Git无关,GitHub是一个代码托管网站,Git是分布式版本控制软件
- 注册远程仓库
- 再远程仓库上创建仓库
- 给仓库起别名
git remote add datebase_name https://example.com/example.git
- 向远程仓库推送代码
git push -u database_name [分支名]
异地获取代码进行开发
- 克隆远程仓库代码
git clone [远程仓库地址]
- 切换开发分支进行开发
git branch [分支名]
git pull database_name [分支名]
以上命令可以理解成涵盖了一下两个命令
git fetch database_name [分支名]
git merge database_name/[分支名]
rebase(变基)
作用是让代码git提交记录变得简洁
功能:
将多次提交记录整合成一个记录
用法: git rebase -i [需要合并到的版本号] 从当前记录向前合并到所选版本号之间的所有记录 或 git rebase -i HEAD~[n] 从当前记录开始寻找前n条记录进行合并
小总结
添加远程连接
git remote add [别名] [远程仓库地址]
推送代码到远端仓库地址
git push [别名] [需要推送的分支]
到了另外一个地方下载代码(本地空,拉取全部代码)
git clone [远程仓库地址]
或者到了工作地拉取代码(本地有代码,拉取最新代码)
git pull [别名] [需要拉取的分支] 等同于以下两条代码 git fetch [别名] [需要拉取的分支] git merge [别名]/[需要拉取的分支]
rebase变基(保持代码提交的整洁性)
git rebase [分支名]
查看提交log
git log --graph --pretty=format="%h %s"(格式化log,展示每次提交的hash值以及提交说明)