前言:
git 仓库分本地代码和远程代码,本地代码分为两个区,一个是工作区,一个是暂存区。本地仓库,远程仓库。
.git用于版本控制
.gitgnore是忽略文件
一、基础工作
二、创建本地仓库
1、初始化仓库
git init 适用于本地仓库初始化,有完整的Git命令集,可以提交工作空间
的代码和文件。;
git init --bare 适用于远程仓库初始化,默认没有工作空间
bash
# 初始化仓库 带工作区
git init [项目名称]
# 初始化仓库 不带工作区
git init --bare
2、克隆存储库
# git_url 为你的仓库的远程地址
# [本地目录]非必填,不填写默认为当前目录
git clone <git_url> [本地目录]
# clone 远程仓库指定的分支
git clone <git_url> -b <分支名称>
三、git 基本操作
1、git status 检查本地发生变更的文件
git status
2、git add 准备本地文件提交至暂存区
# 提交指定文件,file_name为文件名
git add <file_name>
# 提交所有变更的文件
git add .
# 会将所有已经追踪的文件(包括修改、删除)添加到暂存区,但不会添加新文件。适合用来提交已修改或删除的文件。
git add -u
# 是 git add . 的更强大版本。它不仅会添加修改的文件,也会删除已被删除的文件并添加新文件。通常在更复杂的文件结构下使用。
git add -A
#允许逐个确认每一行改动是否添加到暂存区,适用于精确控制提交的内容。它提供交互式界面,便于选择要暂存的改动块。
git add -p
3、git commit 将文件添加至本地仓库
# 将所有暂存文件提交到本地仓库
git commit -m "commit message"
# 该命令直接将工作区文件提交至本地仓库,无需执行git add 命令
git commit -a
4、git reset 取消提交至暂存区操作
# 取消文件提交至暂存区的操作,保留文件更改
git reset <file_name>
# 将所有内容恢复到最后一次提交
git reset --hard
5、git diff 展示差异工作区和暂存区文件差异
# 比较暂存区和工作区的文件差异
# [file_name]为文件名,为非必填项,不填暂时所有
git diff [file_name]
# 显示暂存区和上一次提交(commit)的差异
git diff --cached [file]
git diff --staged [file]
#显示两次提交之间的差异
git diff [first-branch]...[second-branch]
# 查看已缓存的与未缓存的所有改动
git diff HEAD
#显示不同的摘要而非完整代码内容:
git diff --stat
6、git merge 分支合并操作
# 从远端仓库提取数据并尝试合并到当前分支
git merge
# 合并操作,历史提交记录智能累加,将<branch_name_A>分支的代码合并至当前分支
git merge <branch_name_A>
7、 git config 提交用户基础信息设置
# 设置提交者账号
git config --global user.name "name"
# 设置提交者邮箱
$ git config --global user.email "email"
# 配置http代理地址
git config --global <url>
#配置http ssl校验开关
git config --global http.sslverify false
#配置https代理
git config --global https.proxy 'https://xxx.com:8080'
#配置https ssl校验开关
git config --global https.sslverify false
# 删除全局设置
git config --global --unset <entry-name>
8、git branch 分支操作
# 列出所有分支
git branch
#列出所有本地分支和最新更新记录
git branch -v
#列出所有本地和远程分支
git branch -a
# 列出所有本地和远程分支及记录
git branch -av
# 查看本地所有分支和远程分支的绑定关系
git branch -vv
# 删除分支
git branch -d <branch_name>
9、git checkout 分支切换
# 切换至已有的分支
git checkout <branch_name>
# 创建并切换分支
git checkout -b <branch_name>
# 创建并关联远程分支并切换
git checkout -b <branch_name> origin/<origin_branch_name>
10、git remote 管理远程仓库
# 删除本地存在远程不存在的分支
git remote prune origin
# 列出当前仓库中已配置的远程仓库。
git remote
# 列出当前仓库中已配置的远程仓库,并显示它们的 URL。
git remote -v
# 添加一个新的远程仓库。指定一个远程仓库的名称和 URL,将其添加到当前仓库中。
git remote add <remote_name> <remote_url>
# 将已配置的远程仓库重命名。
git remote rename <old_name> <new_name>
# 从当前仓库中删除指定的远程仓库。
git remote remove <remote_name>
# 修改指定远程仓库的 URL。
git remote set-url <remote_name> <new_url>
# 显示指定远程仓库的详细信息,包括 URL 和跟踪分支。
git remote show <remote_name>
11、git tag 标记操作
# 添加标记
git tag <tagname>
# 你执行 git tag -a 命令时,Git 会打开你的编辑器,让你写一句标签注解
git tag -a v1.0
# 查看所有标记
git tag
# 推送标签至远程
git push origin <tagname>
# 推送所有标签至远程
git push origin --tags
# 删除标签
git tag -d <tagname>
# 删除远程标签
git push origin --delete <tagname>
# 查看标签信息
git show <tag_name>
..............................................................................................................................
使用场景:当项目达到重要阶段(如发布新版本)时,通过标签记录特定提交快照,便于追踪历史版本。例如,软件发布时标记 v1.0 标签,表示该版本为正式发布版本。
里程碑记录 : 开发过程中遇到重大变更或阶段性成果时,可创建标签(如 v1.0、v1.1),用于标识功能迭代或技术突破节点。
错误修正:当需要回退到历史版本修复问题时,可通过标签找到特定提交点,例如:
git checkout tags/v1.0
11、git stash 暂时保存没有提交的代码,当前分支回到修改前的内容
# 临时缓存本地修改代码,并且将当前分支代码回到之前的更改前的内容,切换其他分支修改完后切换回原来分支,拿取之前缓存的修改
git stash
git checkout B
git checkou A
git stash pop
# 存入
git stash
# 添加注释存入
git stash save '注释'
# 取
git stash pop
git stash apply(peek操作)
两者都会将当前分支的最后一次缓存的内容释放出来,但是apply操作下刚才的记录还存在list中,pop操作下刚才的记录不存在list中
# 删除堆栈顶部的更改
git stash drop
# 删除所有stash
git stash clear
# 查看
git stash list
#查看索引和详细信息
git stash show
12、git log 查看历史提交记录
# 显示当前分支的提交历史
git log
# 显示 branchA 上不在 branchB 上的提交
git log branchB..branchA
# 显示更改文件的提交,即使重命名
git log --follow [file]
13、git show 查看各类对象(提交、标签、树、Blob)详细信息,支持多种格式化选项展示具体内容。
查看提交详情:默认显示最近提交(HEAD)的元数据(作者、时间、提交信息)及差异内容。
对象类型适配:
标签:显示标签消息及引用对象。
树:显示目录结构(类似git ls-tree --name-only)。
Blob:直接输出文件原始内容。
常用选项与技巧:
--stat:显示文件修改统计(增删行数)。
--name-only:仅列出被修改的文件名。
--pretty=<格式>:指定日志格式(如oneline/short/email),默认medium
退出查看:按q键可立即退出git show的输出界面。
典型使用场景:
git show HEAD~2:查看上上次提交的详细信息。
git show v1.0 --stat:查看标签v1.0的变动文件统计。
git show abc123:README.md:查看指定提交中的文件内容。
14、git rm 删除文件
# 从工作目录中删除文件并暂存删除
git rm <filename>
# 从版本控制中删除文件但在本地保留文件
git rm --cached <filename>
15、git mv 重命名文件
# 更改文件名并准备提交
git mv <filename-orig> <filename-renamed>
16 、git fetch 将远端仓库更新至本地
# 在不指定分支时,默认是master
git fetch origin
# 拉取远程分支至本地并创建B分支
git fetch origin A:B
git fetch相比git pull,相当于是从远程获取最新版本到本地,但不会自动合并
git pull = git fetch + git merge
17、git pull 拉取当前分支下的远程代码并与本地自动合并
# 将远程仓库的分支代码拉取并合并至本地 (前提是本地分支有关联远程分支)
git pull
# 远程仓库名 默认都是origin,指定远程分支和本地分支
git pull origin 远程分支:本地分支
18、git push 将本地库中的代码提交至远程并合并
# 推送代码
git push <远程仓库名> <远程分支名>:<本地分支名>
# 如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
#如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:
git push --force origin master
#删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:
git push origin --delete master
19、git cherr-pick 选择特定提交并应用到当前分支
# commit 是你commit时候生成的id记录
git cherry-pick <commit>
应用场景:当一个文件被多次修改,多次commit时候,可以使用该命令只选中某一个提交版本的部分代码应用到当前分支,而不是整个
20、 git rebase 变基操作
让我们从大的方面开始:如果你在paul_branch上,并使用git rebase john_branch,Git 会去找 John 的分支和 Paul 的分支的共同祖先。然后把 Paul 分支的提交中引入的补丁,应用到 John 分支。
所以在这里,你用rebase把在一个分支,Paul 的分支上提交的修改,在另一个分支john_branch上重演(replay)。
!不同比对提醒:
1、 git 代码拉取 fetch 和pull的区别
fecth:拉取了远程分支,但是并不和本地工作区的代码合并,后期需要手动merge,可以使用 git diff origin/main(远程分支名) 命令,查看远程代码和本地的区别,在合并的时候可以更具需求选择性合并,避免出现大量合并冲突。
pull: 拉取了远程分支,并主动合并到本地工作区,若出现问题,需手动解决。是git fetch + git merge两条命令的结合
2、 分支合并操作
git 合并 merge 和rebase的区别
A:1-3-4
B:2-5
merge : A/B:任意一人merge,提交记录就成了 1-2-3-4-5
rebase: A : 线rebase,提交记录就成了 1-3-4-2'-5'
# 将一个分支上的更改移到另一个分支之上,保持提交历史线性
git rebase
# 从远端仓库提取数据并尝试合并到当前分支
git merge
# 合并操作,历史提交记录智能累加,将<branch_name_A>分支的代码合并至当前分支
git merge <branch_name_A>