Git学习记录

1、Git中的基本概念

  • workspace:工作区(当前写代码的)
  • staging area:暂存区/缓冲区
  • local repository:本地仓库
  • remote repository:远程仓库

2、Git分支管理

Git分支管理可以从主线上分离开,不受影响。

2.1 创建分支

1、git checkout -b

example:git checkout -b "feature-new"

创建一个名字叫feature-new的分支,从本地仓库当前执行命令的分支拉一条新的分支,内容一致

2、git branch

查看当前仓库中所有分支

3、reset

回退到其他历史commit版本

git reset --参数名 commitId

例如:git reset --hard abc123

参数 版本库 (HEAD) 暂存区 (Index) 工作区 (Workdir) 适用场景
--soft 回退到指定 commit 保留(保持已 add 状态) 保留 想撤销 commit,但保留修改并重新提交
--mixed 回退到指定 commit 重置(变回未 add 状态) 保留 想撤销 commit 和 add,重新挑选文件提交
--hard 回退到指定 commit 重置(全部清空) 重置(全部清空) 慎用! 彻底放弃所有修改,回到过去状态
--keep 回退到指定 commit 重置 受保护地保留 安全版 hard,如果本地有冲突则拒绝重置

soft会把add保留但是commit会撤销

mixed会把commit撤销,add也会被撤销

hard,全部清空,回到当前commit的最原始状态,意味着所有更改全部清空

例子:

问题:我现在提交一个错误的commit,我需要把他回退,

使用

1、使用git log 查看历史

git log --oneline -n 5 // 一行查看历史

2、git reset

git reset --mixed commitId或者HEAD~1

git reset --mixed commitId之后会提示,当前没有暂存的文件,因为mixed是把add也重置了,同时commit历史也没有了错误提交的那一版本commit

4、stash

git stash ,将当前更改暂存,会清空当前工作区的代码,

git stash pop 还原暂存区代码到现在的提交历史,干净,用于紧急修复功能和需求开发分离。

git stash list,暂存区历史。

git stash save "重构到一半的代码文件"

5、push

git push -u MyMusicDemo master

远程仓库第一次推送需要-u(等价--set-upstream),目的是建立本地分支与远程分支的绑定关系

之后就可以推送上去了

6、rebase

git rebase master dev

或者

git checkout dev

git rebase master

将master分支的最新代码合并到dev中去,git历史是线性的。

问题:和merge有什么区别呢?少了无关的日志?更简洁一点。

答:现在在dev上开发,拉取的是旧的master的某个commitId,现在master更新了,dev也更新了,把他们合并到一起去,让提交历史是线性的。

rebase过程中会遇到冲突,也就是解冲突之后的代码才能合并到一块。

通俗解释

rebase,变基,改变基底。feature分支基于master分支的B节点拉取的,feature的基底是B。master在B之后有新的提交,此时想用master上新的提交作为feature分支的新基底。

实际操作就是把B之后的feature提交先暂存,再删除原本的提交,再找到master最新的提交位置,把暂存下来的提交再提交接上去(需要逐个和新的基底进行解冲突),此时feature新基底就不再是B了,变成了M。(如果此时master没有新提交,就还是原本的B作为基底,rebase无效,唯一和merge的区别就是少一条merge提交记录。)

坏处就是历史从哪里来的会消失

链接:
rebase详解

案例

问题:我目前有一个需求来了,开发过程中出现了一个需要紧急修复的bug,我应该怎么做,不影响两个开发的过程?

答:

1、首先git stash save "重构代码" 暂存目前正在开发的需求代码。

2、目前工作区的代码是最近一次提交,紧急修复之后

git add . ---> git commit -m "hotfix修复" ---> git push -u 仓库名 分支名

修复推送完成后

3、git stash pop 还原到当前新需求代码继续开发。

问题:

1、git中的四个操作区域分别代表什么?

2、四个操作区域使用什么指令。

3、.git中包含什么文件

相关推荐
zhangrelay5 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
叼烟扛炮9 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
m4Rk_11 小时前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
辣知12 小时前
辣知·化智92 《山海经》里的史前密码
学习
鬼手点金12 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
kyrie_sakura13 小时前
大模型学习18 大模型学习 - LangChain2_Model I/O
学习·自然语言处理
宝绿特塑业再生科技14 小时前
板材收缩率不稳,户外家具装配尺寸为何对不上:从切割尺寸变化到接缝不一的系统性排查与对策
笔记·科技·学习·生活·户外家具·hdpe再生颗粒·hdpe
~城南花已开~15 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师
Change!!16 小时前
git小乌龟,切换到新分支处理
git·git切到新分支,旧代码贮藏
我命由我1234517 小时前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee