Git推荐使用指南

2024-04-09 14:33:30
Git是什么? 分布式版本控制的软件 软件:安装到电脑上的工具 版本控制: 文件拷贝:论文 -> 版本通过文件来控制,多个文件,不同的标注来确定各个阶段的版本 本地版本控制:只有一个文件,但是通过本地控制软件可以追溯以前的所有版本(类似游戏存档),相比文件拷贝,视觉上不会存在多个文件过于冗杂,但实际上不能解决协同开发或者多台设备开发 集中式版本控制:多个设备可以通过一个中心来共同访问和操作开发的文件 PC1 -> CENTER -> FILES{version1, version2 ...} PC2 -> 代表软件:SVN 缺点:无法离线提交,失去连接后无法再本地进行版本开发 分布式版本控制:仓库(中心)只向本地提供一个版本,是一个文件的形式,当仓库挂掉或者断联,不影响本地对文件的修改 PC1{version1} -> HUB{version1, version2} PC2{version2} -> 本地提交的时候,先提交到本地的仓库,然后在推到中心,所以即使离线,仍可以上传代码 代表软件:git 为什么要做版本控制 防止线上代码出现问题,需要回滚,一行命令就可以解决 对于大量功能的项目,方便管理 下载安装Git 安装git的设备:本地计算机,中心无需安装,事实上,所谓的中心一般是由网站来执行,例如github、gitee Windows安装 下载网站 Git - 安装 Git (git-scm.com) 下载链接 https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/Git-2.44.0-64-bit.exe 安装完毕后鼠标右键桌面,会显示git bash here和git gui here两个选项,说明安装成功 查看安装版本git --version $ git --version git version 2.44.0.windows.1 Git做版本控制的步骤 即,让git管理文件夹(以dbhot为例) 1.进入要管理的文件夹 2.初始化 在对应的文件夹中,右键选择Git Bash Here 输入git init进行初始化 $ git init Initialized empty Git repository in C:/Users/X/Desktop/Study/libraryMIS/Git/dbhot/.git/ 执行后,文件夹下会出现一个.git的文件 3.管理 检测当前文件夹下文件的状态git status $ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) index.html advert.docx nothing added to commit but untracked files present (use "git add" to track) 添加到git的管理项目中 添加一个文件到管理git add 文件名 $ git add advert.docx 再检测文件夹下文件状态 $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: advert.docx Untracked files: (use "git add <file>..." to include in what will be committed) index.html 执行add的文件被标记为绿色,而未执行的仍为红色 一键管理当前文件夹的所有文件git add . $ git add . 4.生成版本 生成第一个版本 git commit -m '描述信息' $ git commit -m "v1" 如果提示 Author identity unknown *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'X@DESKTOP-CKCOG1F.(none)') 需要先配置用户 git config --global user.email "you@example.com" git config --global user.name "Your Name" 执行结果 $ git commit -m "v1" [master (root-commit) 8ce9c96] v1 2 files changed, 1 insertion(+) create mode 100644 advert.docx create mode 100644 index.html 运行git status $ git status On branch master nothing to commit, working tree clean 生成后续版本 修改文件的内容保存后,再运行git status $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: index.html no changes added to commit (use "git add" and/or "git commit -a") modified: index.html 表示这个文件被检测到修改 再执行git add .将所有未被管理的文件添加到管理中 再执行git commit -m "v2"生成第二个版本 查看版本历史 通过git log可以访问所有的版本记录 $ git log commit 028636097e57c62ea86e6fa7603c2fe11682804c (HEAD -> master) Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:53:28 2024 +0800 v2 commit 8ce9c967d86beca44488239d3681fb2ad6405e15 Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:44:10 2024 +0800 v1 总结 1.进入要管理的目录 2.git init 让git管理当前的文件夹 3.git status 检测当前目录下文件的状态 4.三种状态变化: 红色:新增的文件/修改了原来的旧文件 -> git add 文件名或者git add . 绿色:git以及管理起来了 -> git commit -m "描述信息" 生成版本 补充:个人的配置、创建文件、关闭分页器 信息配置:用户名、邮箱 生成版本时候需要记录对应修改者的用户名和邮箱 git config --global user.email "xxx@yy.com" git config --global user.name "zzz" 仅需执行一次即可 另外,创建一个文件,默认是未被管理的状态 git touch 文件名.文件扩展名 页面出现长内容,以(END)结尾,关闭分页器 -> 按下Q键即可 Git的三大区域 工作区、暂存区、版本库 工作区 已管理 | 新文件/修改后的文件 (自动检测) =>git add 提交到暂存区 暂存区 确定是否提交,也可以回滚 =>git commit 提交到版本库 版本库 生成最终版本 回滚 当提交一个版本的时候,查看版本信息时,作者上方commit后面的一串序列号即为版本号 commit 8ce9c967d86beca44488239d3681fb2ad6405e15 Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:44:10 2024 +0800 v1 版本号:8ce9c967d86beca44488239d3681fb2ad6405e15 回滚代码:git reset --hard 版本号 $ git reset --hard 028636097e57c62ea86e6fa7603c2fe11682804c HEAD is now at 0286360 v2 库中文件全部变为v2时候的状态,再执行git log的时候,不再显示v2之后的版本 $ git log commit 028636097e57c62ea86e6fa7603c2fe11682804c (HEAD -> master) Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:53:28 2024 +0800 v2 commit 8ce9c967d86beca44488239d3681fb2ad6405e15 Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:44:10 2024 +0800 v1 如何回滚至v2之后的状态? 查看版本变化的历史git reflog $ git reflog 0286360 (HEAD -> master) HEAD@{0}: reset: moving to 028636097e57c62ea86e6fa7603c2fe11682804c f601e35 HEAD@{1}: commit: v3 461e45e HEAD@{2}: commit: v3 0286360 (HEAD -> master) HEAD@{3}: commit: v2 8ce9c96 HEAD@{4}: commit (initial): v1 其中,各个版本的版本号即为最左侧的序列号,只需根据对应的版本号重新执行git reset --hard 版本号即可 $ git reset --hard f601e35 HEAD is now at f601e35 v3 命令总结&补充 git init git add git commit git log git reflog git reset --hard 版本号 ---------------------------------------- git checkout -- 文件名 撤回对该文件的所有修改(工作区:修改或新文件 -> 已经控制文件) git reset HEAD 文件名 将暂存区的文件撤回到工作区(已修改或新文件状态) 分支 git中,不同的版本之间,v2和v1之间并不是v2是在v1直接拷贝之上增加内容的关系,而是v2只保留了新增或者修改记录的内容(类似于快照) 原理:改变的文件会有一个指向未改变文件的指针,当生成版本的时候,只需要根据指针找到未改变代码,并添加上改变的内容即可 demo.txt| v0.1 <- p| modified| v0.2 <- ... <- p| modified| v0.9 因此可以存在多个版本,通过指针指向一个前驱版本 <-p| modified| v0.6 <- p1| modified| v0.61 ^ |_ p2| modified| v0.62 紧急修复处理思路 根据分支的概念,当在开发v0.6时候,v0.5出现紧急BUG,可以先创建一个基于v0.5的分支用于紧急修复BUG,然后可以基于v0.6继续开发 <-p| modified| v0.5 <- p| add new func| v0.61 <- p| unite| v0.6 (合并到主干线) (主干线 master) ^ | |_ p| fix BUG emergency| v0.51 <--| (分支 dev <名称可以自定义>) 紧急修复过程 查看目前所在的分支git branch $ git branch * master 创建一个分支git branch 分支名 $ git branch dev 查看自己所在的分支,目前还是在master(带有*的就是目前所在的) $ git branch dev * master 进入分支git chekout 分支名 $ git checkout dev Switched to branch 'dev' 查看自己所在的分支,即dev $ git branch * dev master 修改文件内容(即开始紧急修复BUG) -> 添加到暂存区 -> 提交到版本库 查看分支版本(HEAD -> dev) $ git log commit b878250bf310366006a6932704d8c656f8d5476a (HEAD -> dev) Author: gin49sz <1003690614@qq.com> Date: Sat Mar 9 20:51:00 2024 +0800 C4 修改完毕(BUG修复完毕),切换回mastergit checkout master $ git checkout master Switched to branch 'master' 创建bug分支 git branch bug git checkout bug git add . git commit -m "C5" 一般情况下,认为master为线上分支,即正在运行使用的分支,所以要将bug分支合并到master中 合并分支 第一步,切换回mastergit checkout master 第二步,合并bug分支git merge bug $ git merge bug Updating 7152ba0..27a986e Fast-forward index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 第三步,删除bug分支git branch -d bug $ git branch -d bug Deleted branch bug (was 27a986e). 第四步,回到开发分支git checkout dev 第五步,将开发的新功能合并到master,直接合并可能会引起冲突错误(在同一行添加或者修改的代码) $ git merge dev Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result. 手动选择选择保留的内容即可 第六步,提交合并内容 git add . git commit -m "C7" 命令总结 查看分支 git branch 创建分支 git branch 分支名称 切换分支 git checkout 分支名称 分支合并(可能会产生冲突) git merge 要合并的分支 注意:切换分支再合并 删除分支 git branch -d 分支名称 工作流 开发时候一般至少要有两个分支 dev分支:版本的更替都在dev分支上进行,负责开发功能 master分支:只保留正式版本 Git是什么? 分布式版本控制的软件 软件:安装到电脑上的工具 版本控制: 文件拷贝:论文 -> 版本通过文件来控制,多个文件,不同的标注来确定各个阶段的版本 本地版本控制:只有一个文件,但是通过本地控制软件可以追溯以前的所有版本(类似游戏存档),相比文件拷贝,视觉上不会存在多个文件过于冗杂,但实际上不能解决协同开发或者多台设备开发 集中式版本控制:多个设备可以通过一个中心来共同访问和操作开发的文件 PC1 -> CENTER -> FILES{version1, version2 ...} PC2 -> 代表软件:SVN 缺点:无法离线提交,失去连接后无法再本地进行版本开发 分布式版本控制:仓库(中心)只向本地提供一个版本,是一个文件的形式,当仓库挂掉或者断联,不影响本地对文件的修改 PC1{version1} -> HUB{version1, version2} PC2{version2} -> 本地提交的时候,先提交到本地的仓库,然后在推到中心,所以即使离线,仍可以上传代码 代表软件:git 为什么要做版本控制 防止线上代码出现问题,需要回滚,一行命令就可以解决 对于大量功能的项目,方便管理 下载安装Git 安装git的设备:本地计算机,中心无需安装,事实上,所谓的中心一般是由网站来执行,例如github、gitee Windows安装 下载网站 Git - 安装 Git (git-scm.com) 下载链接 https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/Git-2.44.0-64-bit.exe 安装完毕后鼠标右键桌面,会显示git bash here和git gui here两个选项,说明安装成功 查看安装版本git --version $ git --version git version 2.44.0.windows.1 Git做版本控制的步骤 即,让git管理文件夹(以dbhot为例) 1.进入要管理的文件夹 2.初始化 在对应的文件夹中,右键选择Git Bash Here 输入git init进行初始化 $ git init Initialized empty Git repository in C:/Users/X/Desktop/Study/libraryMIS/Git/dbhot/.git/ 执行后,文件夹下会出现一个.git的文件 3.管理 检测当前文件夹下文件的状态git status $ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) index.html advert.docx nothing added to commit but untracked files present (use "git add" to track) 添加到git的管理项目中 添加一个文件到管理git add 文件名 $ git add advert.docx 再检测文件夹下文件状态 $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: advert.docx Untracked files: (use "git add <file>..." to include in what will be committed) index.html 执行add的文件被标记为绿色,而未执行的仍为红色 一键管理当前文件夹的所有文件git add . $ git add . 4.生成版本 生成第一个版本 git commit -m '描述信息' $ git commit -m "v1" 如果提示 Author identity unknown *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'X@DESKTOP-CKCOG1F.(none)') 需要先配置用户 git config --global user.email "you@example.com" git config --global user.name "Your Name" 执行结果 $ git commit -m "v1" [master (root-commit) 8ce9c96] v1 2 files changed, 1 insertion(+) create mode 100644 advert.docx create mode 100644 index.html 运行git status $ git status On branch master nothing to commit, working tree clean 生成后续版本 修改文件的内容保存后,再运行git status $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: index.html no changes added to commit (use "git add" and/or "git commit -a") modified: index.html 表示这个文件被检测到修改 再执行git add .将所有未被管理的文件添加到管理中 再执行git commit -m "v2"生成第二个版本 查看版本历史 通过git log可以访问所有的版本记录 $ git log commit 028636097e57c62ea86e6fa7603c2fe11682804c (HEAD -> master) Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:53:28 2024 +0800 v2 commit 8ce9c967d86beca44488239d3681fb2ad6405e15 Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:44:10 2024 +0800 v1 总结 1.进入要管理的目录 2.git init 让git管理当前的文件夹 3.git status 检测当前目录下文件的状态 4.三种状态变化: 红色:新增的文件/修改了原来的旧文件 -> git add 文件名或者git add . 绿色:git以及管理起来了 -> git commit -m "描述信息" 生成版本 补充:个人的配置、创建文件、关闭分页器 信息配置:用户名、邮箱 生成版本时候需要记录对应修改者的用户名和邮箱 git config --global user.email "xxx@yy.com" git config --global user.name "zzz" 仅需执行一次即可 另外,创建一个文件,默认是未被管理的状态 git touch 文件名.文件扩展名 页面出现长内容,以(END)结尾,关闭分页器 -> 按下Q键即可 Git的三大区域 工作区、暂存区、版本库 工作区 已管理 | 新文件/修改后的文件 (自动检测) =>git add 提交到暂存区 暂存区 确定是否提交,也可以回滚 =>git commit 提交到版本库 版本库 生成最终版本 回滚 当提交一个版本的时候,查看版本信息时,作者上方commit后面的一串序列号即为版本号 commit 8ce9c967d86beca44488239d3681fb2ad6405e15 Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:44:10 2024 +0800 v1 版本号:8ce9c967d86beca44488239d3681fb2ad6405e15 回滚代码:git reset --hard 版本号 $ git reset --hard 028636097e57c62ea86e6fa7603c2fe11682804c HEAD is now at 0286360 v2 库中文件全部变为v2时候的状态,再执行git log的时候,不再显示v2之后的版本 $ git log commit 028636097e57c62ea86e6fa7603c2fe11682804c (HEAD -> master) Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:53:28 2024 +0800 v2 commit 8ce9c967d86beca44488239d3681fb2ad6405e15 Author: Gin49SZ <1003690614@qq.com> Date: Sat Mar 9 10:44:10 2024 +0800 v1 如何回滚至v2之后的状态? 查看版本变化的历史git reflog $ git reflog 0286360 (HEAD -> master) HEAD@{0}: reset: moving to 028636097e57c62ea86e6fa7603c2fe11682804c f601e35 HEAD@{1}: commit: v3 461e45e HEAD@{2}: commit: v3 0286360 (HEAD -> master) HEAD@{3}: commit: v2 8ce9c96 HEAD@{4}: commit (initial): v1 其中,各个版本的版本号即为最左侧的序列号,只需根据对应的版本号重新执行git reset --hard 版本号即可 $ git reset --hard f601e35 HEAD is now at f601e35 v3 命令总结&补充 git init git add git commit git log git reflog git reset --hard 版本号 ---------------------------------------- git checkout -- 文件名 撤回对该文件的所有修改(工作区:修改或新文件 -> 已经控制文件) git reset HEAD 文件名 将暂存区的文件撤回到工作区(已修改或新文件状态) 分支 git中,不同的版本之间,v2和v1之间并不是v2是在v1直接拷贝之上增加内容的关系,而是v2只保留了新增或者修改记录的内容(类似于快照) 原理:改变的文件会有一个指向未改变文件的指针,当生成版本的时候,只需要根据指针找到未改变代码,并添加上改变的内容即可 demo.txt| v0.1 <- p| modified| v0.2 <- ... <- p| modified| v0.9 因此可以存在多个版本,通过指针指向一个前驱版本 <-p| modified| v0.6 <- p1| modified| v0.61 ^ |_ p2| modified| v0.62 紧急修复处理思路 根据分支的概念,当在开发v0.6时候,v0.5出现紧急BUG,可以先创建一个基于v0.5的分支用于紧急修复BUG,然后可以基于v0.6继续开发 <-p| modified| v0.5 <- p| add new func| v0.61 <- p| unite| v0.6 (合并到主干线) (主干线 master) ^ | |_ p| fix BUG emergency| v0.51 <--| (分支 dev <名称可以自定义>) 紧急修复过程 查看目前所在的分支git branch $ git branch * master 创建一个分支git branch 分支名 $ git branch dev 查看自己所在的分支,目前还是在master(带有*的就是目前所在的) $ git branch dev * master 进入分支git chekout 分支名 $ git checkout dev Switched to branch 'dev' 查看自己所在的分支,即dev $ git branch * dev master 修改文件内容(即开始紧急修复BUG) -> 添加到暂存区 -> 提交到版本库 查看分支版本(HEAD -> dev) $ git log commit b878250bf310366006a6932704d8c656f8d5476a (HEAD -> dev) Author: gin49sz <1003690614@qq.com> Date: Sat Mar 9 20:51:00 2024 +0800 C4 修改完毕(BUG修复完毕),切换回mastergit checkout master $ git checkout master Switched to branch 'master' 创建bug分支 git branch bug git checkout bug git add . git commit -m "C5" 一般情况下,认为master为线上分支,即正在运行使用的分支,所以要将bug分支合并到master中 合并分支 第一步,切换回mastergit checkout master 第二步,合并bug分支git merge bug $ git merge bug Updating 7152ba0..27a986e Fast-forward index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 第三步,删除bug分支git branch -d bug $ git branch -d bug Deleted branch bug (was 27a986e). 第四步,回到开发分支git checkout dev 第五步,将开发的新功能合并到master,直接合并可能会引起冲突错误(在同一行添加或者修改的代码) $ git merge dev Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result. 手动选择选择保留的内容即可 第六步,提交合并内容 git add . git commit -m "C7" 命令总结 查看分支 git branch 创建分支 git branch 分支名称 切换分支 git checkout 分支名称 分支合并(可能会产生冲突) git merge 要合并的分支 注意:切换分支再合并 删除分支 git branch -d 分支名称 工作流 开发时候一般至少要有两个分支 dev分支:版本的更替都在dev分支上进行,负责开发功能 master分支:只保留正式版本
作者:小李
点赞1992
已输入3个字
全部评论
快来抢沙发