Git使用

文章目录

study链接

Git是什么

Git是一个分布式版本控制系统,工作原理如图:

上图展示了 Git 四个核心区域(工作区、暂存区、本地仓库、远程仓库)之间的数据流转关系,箭头和动作对应 Git 命令:

  • Workspace(工作区):本地编辑代码的工作目录,即能直接看到、修改文件的地方;
  • Index/Stage(暂存区):临时存放 "待提交变更" 的中间区域,是工作区和本地仓库的 过渡层;
  • Repository(本地仓库):本地存储完整版本历史的数据库,记录所有提交、分支等信息;
  • Remote(远程仓库):服务器上的共享仓库,比如 GitHub/GitLab,用于多人协作同步。

这里git pull实际上相当与git fetch+git merge,讲远程仓库内容拉取到本地仓库,再执行git merge将远程跟踪分支的内容合并到当前本地分支。图中给出的本地库到工作区的箭头操作是checkout,原因是:

  • 这里的checkout一般指检出某一个指定的历史版本或切换分支,以覆盖工作区的内容,常用于切换到某个分支,或者回滚历史版本
  • 而merge操作会合并两个分支的提交历史,将差异整合到当前分支,一般用于同步远程分支,或者整合功能到主分支

reset指令

修改提交历史

新建git仓库

平台创建仓库

远程平台创建仓库,如gitlab、gitee或者github等,以gitlab为例:

本地克隆

shell 复制代码
git clone 远程仓库地址
# 如git clone clone git@gitlab.com:Skye-Zhang/leon_daily.git

一般项目会有多个分支,克隆之后会在本地创建一个和远程的master或者main同名的分支,如果目标代码不在master或者main分支,需要创建一个本地分支,即:

bash 复制代码
#创建一个与远程origin/mzfs-2.1.5对应的本地分支
git checkout -b  mzfs-2.1.5 origin/mzfs-2.1.5 

通过git branch -vv可以查看本地分支,及其关联远程分支

同步远程仓库

同步远程仓库和上游仓库主要有下面步骤:

bash 复制代码
# 1.查看远程仓库配置
git remote -v

# 2.添加远程仓库
git remote add upstream http://gitlab.dvlp.macrosan.corp:8081/buss/filesystem/disk-fs/zfs/zfs.git

# 2.暂存本地未提交修改
git stash

# 3.拉取上游仓库最新提交
git fetch upstream

# 4.切换到目标分支,合并上游提交到本地
git checkout mzfs-2.1.5
#将上游upstream/mzfs-2.1.5分支内容合并到当前所在分支
git merge upstream/mzfs-2.1.5

# 5.推送到自己的 fork 仓库
git push origin mzfs-2.1.5

# 6.恢复之前暂存的本地修改
git stash pop

查看远程仓库

在本地仓库目录下,查看远程仓库配置

shell 复制代码
git remote -v

这里origin即为本地仓库的远程库,upstream表示手动添加的上游主线仓库,如果没有,需要手动添加

添加远程仓库

给本地仓库增加一个远程关联仓库,upstream是一个约定成俗的名字,表示上游仓库,添加以后可以通过git remote -v查看

bash 复制代码
git remote add upstream http://gitlab.dvlp.macrosan.corp:8081/buss/filesystem/disk-fs/zfs/zfs.git

暂存本地修改

bash 复制代码
git stash

git stash指令用于暂存当前工作区和暂存区中修改的未提交的代码,暂存以后可以通过git stash list查看stash记录

拉取上游仓库提交

bash 复制代码
# 拉取上游仓库的的提交、标签等信息到本地,但不合并
 git fetch upstream

git fetch与git pull的区别,

  • git fetch upstream仅拉取上游的变更,但不合并;
  • git pull 会拉取上游变更并直接合并,相当于git fetch upstream + git merge upstream/当前分支

git fetch之后,本地会产生以upstream为前缀的分支,这个分支是只读的,用于记录上游仓库分支的最新状态,可以通过git branch -r查看远程分支。

git fetch之后,可以通过命令查看上游和本地分支的差异:

bash 复制代码
# 查看上游 mzfs-2.1.5 比本地 mzfs-2.1.5 多了哪些提交
git log mzfs-2.1.5..upstream/mzfs-2.1.5

合并上游提交

切换到需要同步的本地分支

bash 复制代码
# mzfs-2.1.5代表需要同步的本地分支名称
git checkout mzfs-2.1.5

执行merge或者reabase

bash 复制代码
# 将上游仓库的提交merge到本地
git merge upstream/mzfs-2.1.5

# 变基,基于上游仓库嫁接本地的提交
git rebase upstream/mzfs-2.1.5

git fetch upstream之后,本地的mzfs-2.1.5和upstream/mzfs-2.1.5有一定区别,eg:

bash 复制代码
# 上游分支(upstream/mzfs-2.1.5)的历史:
A → B → C → D (D 是上游最新提交)

# 本地分支(mzfs-2.1.5)的历史(假设有1个本地提交):
A → B → E (E 是的本地提交)

两者的区别
git merge
合并保留分叉,创建新的合并提交,Git 会找到本地分支和上游分支的共同祖先(本例中是 B),然后将上游的 C→D 和本地的 E 合并,生成一个新的 "合并提交"(M),最终历史如下:

bash 复制代码
A → B → C → D
      \     \
       E ------→ M (M 是合并提交,记录"合并上游代码"的操作)

git rebase
改写历史为线性,无合并提交,Git 会先找到本地分支和上游分支的共同祖先(B),然后暂时 "剥离" 你的本地提交(E),将本地分支指针先同步到上游最新提交(D),再把的本地提交(E)"重新嫁接" 到 D 之后,最终历史如下:

powershell 复制代码
A → B → C → D → E' (E' 是原 E 提交的"复刻版",哈希值会改变)

使用场景:

  • 若 fork 后无本地提交:merge 和 rebase 效果完全一致,选 merge 更简单(无需考虑强制推送);
  • 如果fork后本地有提交:想保留合并上游的记录,用merge;想让提交历史更简洁,用rebase;
  • 如果当前fork的分支有多人使用,应该使用merge,避免使用rebase.

总结:merge是"保留历史的合并",rebase是"重塑历史的合并"。

推送到远程仓库

bash 复制代码
git push origin
相关推荐
Bigger1 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
武子康1 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库2 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
AI周红伟2 天前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
B站计算机毕业设计超人2 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
计算机程序猿学长2 天前
大数据毕业设计-基于django的音乐网站数据分析管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
大数据·django·课程设计
B站计算机毕业设计超人2 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城2 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
中烟创新2 天前
灯塔AI智能体获评“2025-2026中国数智科技年度十大创新力产品”
大数据·人工智能·科技