git的代码管理区域
使用git管理项目,拥有三个区域,分别是工作区,暂存区,存储区
- 工作区:文件目录
- 暂存区:准备进行版本保存的文件列表
- 存储区:完成版本保存的文件列表
安装
上官网自行下载即可
安装完后第一件事设置自己的用户名和邮件地址,命令:
git config --global user.name "用户名或者个人工号"
git config --global user.email “邮箱地址”
查看所有全局配置信息
git config --list --global
查看指定全局配置信息
git config user.name
git config user.email
获取git仓库
获取git仓库两种方式:
- 将尚未进行版本控制的本地目录转为git仓库: git init
注释:如果自己有一个尚未进行版本控制的项目目录,想要用git来控制,需要执行以下两个步骤
- 在项目目录中,通过鼠标右键打开”git Bash“
- 执行git init 命令,将当前目录转化为git仓库
- git remote add origin 远程仓库的URL
- 将本地仓库的变更提交到本地仓库的主分支中,即本地仓库有修改,命令:git add . git commit -m “提交信息”
- 将本地仓库的主分支推送到远程仓库的主分支中,命令:git push -u origin master
注释:origin是刚刚添加的远程仓库地址的别名,-u参数表示设置本地的主分支跟踪远程仓库的主分支。如果要推送其他分支,需要将master替换成相应的分支名。
- 从其他服务器克隆一个已经存在的git仓库: git clone (https:地址)
- 如果遇到fatal: protocol ‘https’ is not supported的错误,解决方法:关闭git-bash客户端,重新打开,再次执行git clone url命令进行克隆操作,成功克隆。
git常用命令
- 下载github源码:git clone url
- 查看本地git仓库的状态,即看一下当前工作区、暂存区的文件是否有改动,是否与本地仓库的一致:git status
- 修改并提交到暂存区: git add [被修改的文件]—默认使用git add .来提交所有修改的文件
- 修改并提交到本地仓库:git commit -m [修改的注释]
注释:git add保存在暂存区 git commit保存在本地仓库 - 推送到远程仓库: git push
- 配置账号 git config --local usr.name “xxx” git config --local usr.email “xxx” —这样在github中可以看出个人贡献作者的相关信息(在某个项目中,如果不想使用git中设置的全局作者信息,我们可以在该项目中单独设置一个只用于该项目的作者信息)
.gitignore-忽略文件的版本跟踪
- 在项目根目录创建.gitignore文件
- 用文本编译器打开文件,进行配置:
–每项配置独占一行
–每行的内容可以是:文件/目录的名称、路径或者它们的模式匹配
模式匹配的规则
- 空行不匹配任何文件,因此常用作为分隔符,以便于阅读
- #用于注释,\用于转义
- *可以匹配任何字符(0或者多次),?只能匹配一次任何字符
.gitinnore只能忽略没有被追踪的文件,所以先纳入版本管理后写入.gitgnore是无效的
解决方法
先删除本地缓存,再加入.gitignore
- –git rm -r --cached
- –创建.gitignore文件内
从版本库中恢复文件
从版本库中恢复文件分为三种情况
- 已删除(或修改),未add
- 已删除(或修改),已add,未commit
- 已删除(或修改),已commit
检出命令,用于切换分支、恢复文件版本、创建新分支等操作。:git checkout
- 情况一:已删除(或修改),未add
从暂存区中恢复file_name的文件:git checkout file_name - 情况二:已删除(或修改),已add,未commit和已删除(或修改),已commit
查看仓库中的修改,以获得commit的id号 :git log
恢复文件:git checkout commit的id号 file_name
版本库建设中的分支管理
什么是分支?
分支可以理解为当前工作目录的一个副本
为什么要使用分支?
将项目划分为多条线,例如在开发分支(开发线)上进行修改,之后合并到主线(产品线)上,保证主线的稳定性
develop/dev分支用于开发,main/master分支用于产品
分支的常用命令
- 创建新的分支:git branch [新的分支名称]
- 重命名分支的名字:git branch -m [旧分支名称] [新分支名称]
- 删除分支:git branch -d [分支的名称] 其中-d用于删除已经合并过的分支,-D强制删除分支(不管是否合并过)
- 切换分支:git checkout [分支名称]
- 创建并切换分支:git checkout -b [新的分支名称]
- 分支查看:git branch
- 分支的合并:git merge [被合并分支的名称]
- 当使用git merge命令合并两个分支时,如果这两个分支中有相同的文件或行进行了不同的修改,就会导致冲突。此时,Git 无法自动合并这些修改,需要手动解决冲突。可以按照以下步骤进行:
- 执行git merge命令后,如果出现冲突,Git 会提示哪些文件存在冲突。
- 打开包含冲突的文件,在文件中可见类似如下格式的标记:
<<<<<<< HEAD:file.txt
// 当前分支中的修改内容
=======
// 要合并分支的修改内容
>>>>>>> branch-a:file.txt
- 根据需要选择要保留的更改,删除不需要的标记,并将整个文件保存并关闭。
- 使用git add命令将解决后的冲突标记为已解决。
- 最后再次执行git commit命令以完成合并提交。
注释:当Git发现某一块数据在两边的提交历史中都含有变更,它将无法自动对其进行合并。这种情况被称为版本冲突,此时Git需要人为介入调整才能继续进行合并。
分支的文章链接:https://blog.csdn.net/All_In_gzx_cc/article/details/125482617
本地库与远程库
- 在本地库中,对要保存的文件进行本地库关联
- –git init
- –git add .
- –git commit -m “**”
- 在gitee或者github中,创建与本地库文件名一样的远程库
- 本地库与远程库的关联
- 关联 远程库的名字指定为origin的命令: git remote add origin https://github.com/Gooddz1/git-test2.git
- 代码推送的命令:git push -u origin main
注释:将本地库的main分支推送到远程库origin中;-u:将本地分支上传并合并到远程分支,并记录为默认。所以再次提交的时候,只需要git push
一个本地库可以关联多个远程库,即可以关联github和gitee。值得注意的是
- 在关联的时候,远程库的名字:不能都设置为origin,可以设置为gitee
- 在推送的时候,要指定远程库名字和本地库分支git push gitee main
提交修正–提交commit的时候,覆盖上一个日记,避免日记过于冗余
git commit --amend -m "***"
git日记
- 限制显示日记的条数:git log -n(n:显示的条数)
- 简化日记的显示(只显示commit的id号和关键信息):git log --online
- 输出对文件更改内容的统计(对每次提交中的修改文件进行统计):git log --stat
- 输出文件修改的内容:git log --patch
注释:对于\No newline at end of file代表着文件的最后一行没有另起一行 - 日记的筛选:
- git log --after=“2023-01-01” (显示2023年1月1号往后的日记,不包含1月1号的日记)
- git log --before=“2022-09-01” (显示2022年9月1号往前的日记,包括9月1号的日记)
- git log --before=" ** " --after=" ** "
- git log --author=" ** " (根据提交的用户名或者邮箱来筛选,其中邮箱不需要填写全)
- git log --grep=" ** " (根据提交信息来筛选,提交的信息不需要全部填写完)
- git reflog (引用日记:记录了本地库中所有的提交信息,只能保留在本地,不能push到远程库中,且默认只能保存90天。例如对于amend提交修改,能通过git reflog来得到commit的id来退回到amend的代码版本)
远程库分支的添加、删除、推送等操作
- 查看本地库对应的远程库的信息,可以查看远程库的名称:git remote -v
- 查看本地和远程仓库的分支:git branch -a
注释:remotes/origin/HEAD -> origin/main表示该Git存储库以远程跟踪模式克隆自"origin",并且当前所在的分支是追踪远程主分支(main branch)。 - 将本地所有的分支推送到远程库:git push [远程库的名称] [分支名称1] [分支名称2]
注释:git push [远程库的名称] --all:将本地的所有分支都推送到远程库中
在远程库中,如何设置默认分支。
以github为列,打开代码的github网站,选择settings。再点击branches,在default branch中选择默认分支。
删除远程库中的分支(默认分支是不能删除的):
- 方法一:在代码的github网站中,在选择switch branches/tags中,点击view all branches。在新的页面中,手动删除不需要的分支。
- 方法二:git push [远程库的名称] -d [ 远程分支名称 ]
注释:方法一这种方法比较简单,但是会导致本地库中缓存的远程分支与实际远程分支不一致,推荐使用方法二
git-tag标签管理
git中tag
- 定义:就是对commit进行标记,相当于起别名。
- 目的:通过tag,当开发到一个阶段,为了凸显本次提交的重要性,可以为其打上标签。例如,标记为发布结点v1.0、v2.0等。
- 意义:标记一个相关的提交阶段,已备将来参考。标记发布结点,用来项目发布。
tag的创建命令:
- 为最新的commit打标签:git tag [标签信息]
- 指定commit打标签:git tag [标签信息] commit的id号
- 注释标签:指定commit打标签,并添加注释信息:git tag [标签信息] -a -m [注释信息]
tag的查看命令: - 查看所有commit中的标签:git tag
- 查看commit中详细的标签信息:git show [标签信息]
tag的推送远程库命令:
- 推送一个或者多个具有标签信息的commit命令:git push [远程库的名称] [标签信息1] [标签信息2]
- 推送所有标签到远端库的命令:git push [远程库的名称] --tags
注释:git push推送代码时,标签不会被推送,需要单独push标签
tag的删除标签:
- 删除本地的标签:git tag -d [标签信息]
- 删除远程标签:git push [远程库的名称] -d [标签信息1] [标签信息2]
版本发布releases
github仓库fork
fork:在github中快速复制别人的仓库,并实现通过PR(pull request)贡献到原始仓库
步骤:
- 在想要复制某人的仓库的github网址中,点击fork来快速复制并创建属于自己的仓库
- 在本地git clonne 自己仓库的地址
- 代码的修改,git add . git commit -m “**” git push
- 可通过PR将自己修改的代码贡献到原仓库
参考的链接: