git学习笔记

初始化

初始化设置用户名和邮箱

git config --global user.name "zjq" #设置用户名
git config --global user.email email@mail.com #设置邮箱
git config --global credential.helper store #存储,后续无需再设置

创建仓库

git init <project-name> #创建一个新的本地仓库(省略project-name则在当前目录创建)
git clone <url> #下载一个远程仓库

三个工作区域

工作区(Working Directory):.git所在的目录,实际操作的目录
暂存区(Staging Area/Index):中间区域,用于临时存放即将提交的修改内容
本地仓库(Local Repository):git存储代码和版本信息的主要位置
image

四种文件状态

未跟踪(Untrack):新创建的,尚未被git管理起来的文件
未修改(Unmodified):被git管理起来,但文件内容没有发生变化
已修改(Modified):已修改的文件,但未添加到暂存区里面
已暂存(Staged):修改后且添加到暂存区的文件
image

添加和提交文件

git status # 查看仓库的状态
git add <filename> # 添加到暂存区
可以使用通配符,如git add *.txt
也可以使用目录,如git add .
git commit # 提交到本地仓库,注意:只会提交暂存区的文件
git log # 查看仓库提交历史记录,可以用--oneline查看简洁提交

reset回退版本 三种模式

soft:保留工作区和暂存区内容
hard:不保留工作区和暂存区内容
mixed:保留工作区内容,不保留暂存区内容
image

git diff查看差异

image

git rm删除文件

方式1:rm删除工作区文件,再删除暂存区内容

rm file #删除本地工作区文件
git add --all file #更新暂存区

方式2:使用git命令直接删除工作区和暂存区

git rm <file> #把文件从工作区和暂存区同时删除,
#要删除的文件是没有修改过的,就是说和当前版本库文件的内容相同。

git rm --cached <file> #把文件从暂存区删除,但保留在当前工作区中

git rm -r * #递归删除某个子目录下的所有子目录和文件

git ls-files 查看仓库中的文件

删除后切记要commit

.gitignore文件

应该忽略哪些文件

image

ignore文件匹配规则

image

示例

# 忽略所有的.a文件
*.a
# 但跟踪所有的lib.a文件
!lib.a
# 只忽略当前目录下的TODO文件,而不忽略subdir/TODO
/TODO
# 忽略任何目录下名为build的文件
build/
# 忽略doc/notes.txt,但不忽略doc/server/arch.txt
doc/*.txt
# 忽略doc/目录及其子目录下的.pdf文件
doc/**/*.pdf

提示:GitHub上提供了各种语言的gitignore的文件模板,可以修改后使用

远程仓库 Github/Gitee

配置远程仓库

生成ssh密钥

cd
cd .ssh
# 生成ssh密钥
ssh-keygen -t rsa -b 4096
# 将.pub公钥文件内容复制到远程仓库账户的密钥配置中

克隆仓库

git clone <repo-address>

向远程仓库提交内容

git push <remote> <branch>

从远程仓库拉取更新内容

git pull <remote>

关联本地仓库和远程仓库

# step1.添加远程仓库
git remote add <远程仓库名> <远程仓库地址>
# step2.提交到远程仓库
git push -u <远程仓库名> <分支名>
# 查看远程仓库
git remote -v
# 拉取远程仓库内容
git pull <远程仓库名> <远程分支名>:<本地分支名>
# 远程与本地分支名相同可省略

分支

# 查看分支列表
git branch 

# 创建分支
git branch branch-name

# 切换分支
git switch branch-name

# 合并分支
git merge branch-name

# 删除分支
git branch -d branch-name # 删除已合并的分支
git branch -D branch-name # 删除未合并的分支

合并分支时的冲突处理

merge

两个分支未修改同一个文件的同一处位置:Git自动合并
两个分支修改了同一个文件的同一处位置:产生冲突

# step1.手工修改冲突文件,合并冲突内容
# step2.添加暂存区
git add file
# step3.提交修改
git commit -m "message"
# 中止合并:当不想继续执行合并操作时可以使用下面的命令来中止合并过程
git merge --abort

Rebase

每个分支都有一个HEAD指针指向最新的提交,Rebase操作会找到两个分支的最近公共祖先结点,将git当前所在分支从最近公共祖先结点到HEAD指针嫁接到另一个分支的HEAD指针之后
image

二者对比

Merge不会破坏原分支的提交记录,方便回溯和查看;但会产生额外的提交结点,分支图较为复杂。
Rebase不会新增额外的提交记录,形成线性历史,比较直观和干净;但会改变提交历史,改变了当前分支branch out的节点,避免在共享分支时使用

分支管理和工作流模型

GitFlow模型

主线/基线分支 主要分支

包含了项目最新稳定版本的代码,应随时保证主线分支代码是可发布的,会被部署到生产环境中,不允许直接修改,只能通过合并分支

问题修复分支

从主线分支分离出来,用于解决线上bug问题,修复完成后合并回main分支
命名规则:hotfix-#issueid-desc

开发分支 主要分支

从主线分支分离出来,包含项目最新开发版本的代码,用于开发和测试

功能分支

从开发分支分离出来,包含项目最近开发的新功能,用于开发新功能

Github Flow模型

image

posted @ 2024-04-18 22:10  安河桥北i  阅读(5)  评论(0编辑  收藏  举报