开源的分布式版本控制系统管理
工作区:在电脑中可以看到的目录
暂存区:临时存储区域,保留文件快照,提交之前保存在此。
git add filename # 将单个文件添加到暂存区
git add . # 将工作区中的所有修改添加到暂存区
git status # 查看哪些文件在暂存区中
git commit -m "name"
版本库:每次提交都会保存新的快照,不可变。存放 在.git目录下index文件
每次提交产生一个节点
最好不要在主分支上直接操作
git branch name #创建分支
git checkout name #切换分支
或/
git switch name
git merge new_name #合并分支
git rebase new_name #衍合并分支
出现冲突选择保留与剔除
#相关操作
git branch #查看分支
git branch name #创建分支
git checkout name #切换分支
# 设置上游分支(第一次推送时)
git push -u origin 分支名
# 之后就可以简化命令
git pull
git push
#再次此之前贮藏暂存文件防止冲突
git stash
删除分支
git branch -d 分支名 安全删除(已合并)
git branch -D 分支名 强制删除(未合并)
git status
git status 哈希值 #回退节点
更改(拉取更新时使用)
# 贮藏所有修改(包括未跟踪文件)
git stash -u
# 查看贮藏列表
git stash list
# 应用最近贮藏(保留贮藏记录)
git stash apply
# 应用指定贮藏
git stash apply stash@{1}
# 应用并删除贮藏(常用
git stash pop
# 删除贮藏
git stash drop "stash@{0}"
git stash drop 0
# 忽略单个文件
config.ini
# 忽略整个目录
.vscode/
node_modules/
# 忽略特定类型文件
*.log
*.tmp
# 忽略特定文件但包含例外
!important.log
# 停止跟踪文件,但保留本地文件
git rm --cached <file>
# 停止跟踪目录(保留本地目录)
git rm -r --cached <directory>
# 然后提交
git commit -m "停止跟踪<file/directory>"
# 创建轻量标签(无注释)
git tag v1.0.0
#删除标签
git tag -d v1.0.0
# 创建附注标签(推荐)
git tag -a v1.2.0 -m "稳定版本发布"
# 为历史提交打标签
git tag -a v0.9.0 commit_hash -m "历史版本"
# 推送标签到远程
git push origin --tags
创建补丁
应用补丁
概念:图形化操作显示
创建本地仓库
选择本地文件夹创建新仓库
克隆远程
关联远程仓库
未暂存的文件无法提交
撤销本地未推送的提交或回退版本最少选择重置两个节点
双击移动到要重置的节点-->选择重置-->强行重置--->解决冲突-->提交到新的分支上
左边蓝色为新提交分支
- 重置之后,需要将以前的分支合并到当前的分支----->并解决冲突就可以了
重置三种模式
模式 | 行为 | 1 |
---|---|---|
混合合并 | 保留工作目录中的文件改动(即本地修改),但重置暂存区到合并前的状态 | 手动控制哪些变更进入暂存区需要仔细审查冲突文件后再决定如何合并 等效命令: git merge --no-commit + 手动解决 |
软合并 | 保持所有本地改动 | 保留工作目录和暂存区的所有修改 不自动创建合并提交 |
强行合并 | 丢弃所有改动过的工作副本 | 彻底丢弃所有未提交的本地修改 强制使用远程分支版本覆盖 等效命令: git reset --hard HEAD + git merge |
撤销某个提交引起的更改
- 安全撤销
- 精准撤销
它会自己创建一个节点,将上次提交的撤销--然后提交
回滚提交一次只能回滚一个节点,一次回滚多个节点属于错误操作,会导致出现冲突。
# 1. 回滚指定提交(生成新节点)
git revert 2f3a1b # 2f3a1b 为需要撤销的提交ID
# 2. 解决可能的冲突(手动编辑后继续)
git add .
git revert --continue
# 3. 推送到远程仓库
git push origin main
切换到节点点击图标操作
切换到要合并的主分支,右键索要合并次分支-->
选择合并
右键选择删除分支
否则出现失败如下
双击选择要切换的分支
提交合并制造冲突---->出现冲突
选择保留内容
处理冲突后进行提交
命令 | 作用本质 | 影响范围 | 典型工作场景 |
---|---|---|---|
git fetch |
单向同步:从远程下载元数据和对象 | 仅更新 .git 中的远程引用 |
安全地检查远程变更而不改变本地代码 |
git pull |
双向操作:fetch + 自动合并 (merge /rebase ) |
改变工作目录文件和本地分支指针 自动合并冲突中断工作 |
快速将远程更新整合到本地开发环境 |
git push |
上传共享:将本地提交传输到远程仓库 | 更新远程分支指针和提交历史 覆盖他人提交/破坏历史 |
将本地完成的变更发布到中央仓库 |
.gitignore
文件只能阻止未追踪文件被添加,但对已纳入版本控制的文件完全无效。假设一个文件已经被追踪,然后你仅仅在.gitignore中添加规则:
- 该文件会继续存在于Git索引中(即继续被追踪)
- 后续对该文件的修改仍然会被Git检测到
- 新克隆的仓库仍然会得到这个文件(因为它已在版本历史中)
# 忽略单个文件
config.ini
# 忽略整个目录
.vscode/
node_modules/
# 忽略特定类型文件
*.log
*.tmp
# 忽略特定文件但包含例外
!important.log
核心目的:从版本控制中移除文件
- 保留本地文件:文件保留在工作区,但不再被 Git 追踪
- 清理索引区:从
.git/index
中移除文件的跟踪记录- 激活忽略规则:让
.gitignore
对已追踪文件生效- 优化仓库性能:减少无效文件占用历史记录
暂存或未暂存都可实现停止追踪
多选文件创建补丁
对已暂存的内容进行贮藏
右键贮藏内容可实现应用和删除
使用场景 | 简介 |
---|---|
紧急切换分支 | 需紧急修复生产环境 bug 当前功能开发未完成无法提交 |
同步远程更新 | 拉取远程更新前存在未提交修改 需保持工作目录清洁 |
跨分支重用代码 | 避免重复编码,实现代码跨分支复用 在A分支贮藏修改,切换到B分支应用分支 |
放弃未提交的更改
操作 | 效果 | 场景 |
---|---|---|
丢弃工作区修改 | 文件恢复到最近一次提交的状态 | 实验性代码失败后快速回退 误修改重要文件需要还原 |
丢弃暂存区修改 | 文件保留在工作区但变为未暂存状态 | 误添加了不应提交的文件 需要拆分提交内容时 |
丢弃未跟踪文件 | 永久删除未被 Git 管理的文件 | 清理编译生成的临时文件 移除错误创建的垃圾文件 |
操作 | 内容 | 场景 |
---|---|---|
从版本控制移除文件 | 保留本地 | 误提交敏感文件(.env , *.key ) 无需版本控制的配置文件 |
彻底删除文件 | 删除 本地+版本 | 清理编译产物或临时文件 移除已废弃的组件 |
清除未追踪文件 | 操作不可逆!会永久删除文件系统文件 |
+++
+++
标签(Tag)是 Git 中用于永久标记重要历史节点的核心功能,常用于版本发布、里程碑记录等场景。
- 版本快照锚点:为特定提交(如
v1.0.0
)创建不可变引用- 生产部署基准:标记已通过测试的稳定版本
- 历史节点保护:防止关键提交被重置操作丢失
- 文档关联媒介:链接代码与版本说明文档
跳转到目标节点
然后实现相应节点添加标签
+++