git使用手册

news/2025/10/18 15:22:12/文章来源:https://www.cnblogs.com/9-King/p/19149781

一、git常用命令

1、初始化配置

初始化本地仓库:git init

克隆远程仓库到本地:git clone <仓库URL>

设置全局用户名:git config --global user.name "your name"

设置全局邮箱:git config --global user.email "your@email.com"

查看当前配置:git config --list

2、基本操作

查看工作区状态(未跟踪/已修改文件):git status

将文件添加到暂存区(. 表示全部文件)git add <文件> 或 git add .

提交暂存区文件到本地仓库:git commit -m "提交信息"

修改最后一次提交(如补充信息或合并暂存变更):git commit --amend

删除文件并从 Git 中移除(需提交):git rm <文件>

 

重命名文件并跟踪变更:git mv <旧文件名> <新文件名>

3、分支管理

列出所有本地分支(* 表示当前分支):git branch

创建新分支:git branch <分支名>

切换分支:git checkout <分支名> 或 git switch <分支名>

创建并切换到新分支:git checkout -b <分支名>

合并指定分支到当前分支:git merge <分支名>

删除本地分支(-D 强制删除):git branch -d <分支名>

删除远程分支:git push origin --delete <分支名>

4、远程仓库操作

添加远程仓库地址(别名通常为 origin):git remote add origin <仓库URL>

查看远程仓库地址:git remote -v

推送本地分支到远程仓库:git push origin <分支名>

拉取远程分支并合并到当前分支(等价于 fetch + merge):git pull origin <分支名>

下载远程分支更新(不自动合并):git fetch origin

首次推送本地分支并设置上游关系:git push --set-upstream origin <分支名>

5、查看历史与差异

查看提交历史(--oneline 简化显示):git log

以图形化显示分支合并历史:git log --graph --all

查看某次提交的详细变更:git show <提交哈希>

查看工作区与暂存区的差异:git diff

查看暂存区与最新提交的差异:git diff --cached

比较当前分支与指定分支的差异:git diff <分支名>

6、撤销与回滚

丢弃工作区修改(恢复为暂存区或最新提交状态):git restore <文件>

将文件从暂存区移回工作区(不丢弃修改):git restore --staged <文件>

回退到指定提交(保留工作区修改):git reset <提交哈希>

    --soft:仅移动 HEAD,保留暂存区和工作区。

    --mixed(默认):移动 HEAD 并重置暂存区。

    --hard:完全回退(慎用,会丢失工作区修改)。

生成反向提交,撤销指定提交的变更(安全且保留历史):git revert <提交哈希>

7、标签管理

列出所有标签:git tag

创建轻量标签(指向提交):git tag <标签名>

创建附注标签(含元数据):git tag -a <标签名> -m "描述"

推送单个标签到远程:git push origin <标签名>

推送所有标签到远程:git push origin --tags

8、高级操作

暂存当前工作区修改(用于临时切换分支):git stash

恢复最新暂存并删除记录:git stash pop

将其他分支的提交应用到当前分支:git cherry-pick <提交哈希>

变基操作(将当前分支的提交“重新播放”到目标分支上,保持线性历史):git rebase <分支名>

查看所有操作记录(包括已删除的提交,用于恢复):git reflog

常用场景示例

首次提交代码

git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/user/repo.git
git push -u origin main

撤销未提交的修改

git restore <文件>  # 丢弃工作区修改
git restore --staged <文件>  # 从暂存区移回

合并冲突解决

冲突文件会标记 <<<<<<<,手动编辑后执行:

git add <冲突文件>
git commit  # Git 会自动生成合并提交

二、git代码流转

在 Git 中,工作区(Working Directory)暂存区(Stage/Index)本地仓库(Local Repository) 和 远程仓库(Remote Repository) 是代码管理的四个核心区域,它们通过特定的操作相互关联,形成代码的流转路径。以下是它们的详细关系及代码流转过程:


1. 核心区域定义

区域作用
工作区 开发者直接编辑的文件目录(即项目文件夹),包含未跟踪和已修改的文件。
暂存区 临时存储区,记录“下次提交时包含哪些修改”(通过 git add 添加)。
本地仓库 存储所有提交历史的数据库(.git 目录),包含完整的版本控制信息。
远程仓库 托管在服务器上的代码库(如 GitHub/GitLab),供团队协作使用。

2. 代码流转路径

代码从创建到共享的完整流程如下:

(1)工作区 → 暂存区

  • 操作git add <文件> 或 git add .
  • 作用:将工作区的修改标记为“准备提交”,存入暂存区。
  • 示例
  • # 修改文件后
    git add main.py          # 将 main.py 的修改加入暂存区
    git add .                # 将所有修改加入暂存区
  • 关键点
    • 暂存区是提交前的“快照准备区”。
    • 多次 git add 会覆盖暂存区的对应文件状态。

(2)暂存区 → 本地仓库

  • 操作git commit -m "提交信息"
  • 作用:将暂存区的修改永久保存到本地仓库,生成一个唯一的提交哈希(commit hash)。
  • 示例
  • git commit -m "修复登录按钮样式"
  • 关键点
    • 提交后,暂存区会被清空(除非使用 git commit -a 自动暂存并提交)。
    • 每次提交代表一个“版本快照”,可通过 git log 查看历史。

(3)本地仓库 → 远程仓库

  • 操作git push origin <分支名>
  • 作用:将本地仓库的提交推送到远程仓库的对应分支。
  • 示例
  • git push origin main      # 推送本地 main 分支到远程
  • 关键点
    • 首次推送需设置上游分支:git push -u origin main
    • 推送前需通过 git pull 同步远程变更,避免冲突。

(4)远程仓库 → 本地仓库

  • 操作git pull origin <分支名>(等价于 git fetch + git merge
  • 作用:拉取远程仓库的最新提交并合并到本地分支。
  • 示例
  • git pull origin main      # 拉取远程 main 分支并合并
  • 关键点
    • 如果远程有更新而本地未拉取,直接推送会失败(需先 pull)。
    • 使用 git fetch 仅下载更新,不自动合并,适合手动处理冲突。

(5)工作区 ↔ 暂存区/本地仓库的撤销操作

  • 撤销工作区修改
  • git restore <文件>       # 丢弃工作区修改(恢复为暂存区或最新提交状态)
  • 撤销暂存区修改
  • git restore --staged <文件>  # 将文件从暂存区移回工作区(不丢弃修改)
  • 回退本地提交
  • git reset HEAD~1         # 回退到上一次提交(保留修改)
    git reset --hard HEAD~1  # 强制回退(丢弃所有修改)

3. 完整代码流转示例

假设开发一个新功能:

  1. 修改文件(工作区):
    echo "print('Hello Git')" >> app.py
  2. 添加到暂存区
    git add app.py
  3. 提交到本地仓库
    git commit -m "添加 Hello Git 输出"
  4. 推送到远程仓库
    git push origin main
  5. 其他成员拉取更新
    git pull origin main

4. 区域间关系图解

工作区 (Working Directory)│↓ git add
暂存区 (Stage/Index)│↓ git commit
本地仓库 (Local Repository)│↓ git push
远程仓库 (Remote Repository)│↑ git pull

 


5. 关键注意事项

  1. 暂存区的意义
    • 允许分批次提交(例如先提交代码,再提交配置文件)。
    • 避免一次性提交过多无关修改。
  2. 推送前的同步
    • 推送前必须 git pull,否则可能因远程更新导致冲突。
  3. 冲突处理
    • 如果 pull 或 merge 时发生冲突,需手动编辑文件后执行 git add 和 git commit
  4. 分支隔离
    • 不同分支的代码流转独立,通过 git checkout <分支名> 切换。

通过理解这四个区域的关系和代码流转路径,可以更高效地使用 Git 进行版本控制,避免误操作和数据丢失。

三、git代码分支模型

在项目开发过程中使用 Git 的方式常见的有:

集中式工作流

所有修改都提交到 Master 这个分支。比较适合极小团队或单人维护的项目,不建议使用这种方式

1814861b273c18abc5dcf92e11bbb21c

 功能开发工作流

功能开发应该在一个专门的分支,而不是在 master 分支上。适用于小团队开发

ac7997c9685defd23e723fbb9c6c119b

 GitFlow工作流

公司中最常用于管理大型项目。为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅

a67e10b9b1bbfa565bb92a7d85058b84

 Forking工作流

在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。一般用于跨团队协作、网上开源项目

c18f1f071a68fb34b100661268de77d9

 各分支功能介绍

a67e10b9b1bbfa565bb92a7d85058b84

 主干分支 master

主要负责管理正在运行的生产环境代码,永远保持与正在运行的生产环境完全一致。为了保持稳定性一般不会直接在这个分支上修改代码,都是通过其他分支合并过来的。

开发分支 develop

主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。

功能分支 feature

为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。 开发完成后会合并到开发分支。

准生产分支(预发布分支) release

较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。

bug 修理分支 hotfix

主要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修复完毕并测试上线后,并回主干分支和开发分支。并回后,视情况可以删除该分支。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/939631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见的动态规划模型的初始化总结

一直都搞不太明白动态规划的初始化,所以开个博客总结一下。背包模型 设 \(f_{i, j}\) 为:以前 \(i\) 个物品,———— 求方案数 二维体积至多为 \(j\):\(f_{0,i}=1,0 \le i \le m\),其余为 \(0\)。 体积恰好为 \(…

GCD Tables

https://www.luogu.com.cn/problem/CF582A 这道题的核心做法是从大到小来算; 因为gcd(a,b)<=min(a,b),所以最大的数一定是序列中的数,现在看第二大的数:也必须是序列中的,第三大的:如果我们把两个 gcd(x,k) 都…

星际争霸1 EUD漏洞利用技术解析

本文详细分析了星际争霸1中Extended Unit Death(EUD)漏洞的技术原理,展示了如何利用该漏洞实现远程代码执行,包括内存布局分析、ROP链构建和shellcode注入等完整攻击链。利用星际争霸1 EUD漏洞 星际争霸(1998年发布…

实现更公平的机器学习技术探索

本文探讨了通过经验风险最小化理论实现更公平机器学习模型的三种技术方法,包括预处理、后处理和过程中处理,分析了在回归任务和深度学习中的应用,并提出了基于Wasserstein重心和分布距离度量的公平性改进方案。迈向…

TexSmart 文档处理器

TexSmart 文档处理器,自用工具@media only screen { #comment_form.commentform, #cnblogs_post_body::after, #footer, .postDesc, .esa-toolbar, .esa-contents, #blog_post_info_block, #blog-comments-place…

连续函数

连续函数1.基本定义 定义:设 \(f(x)\) 在 \(x_0\) 的某个领域内有定义,且 \(\lim_{x\to x_0} f(x) = f(x_0)\),则称 \(f(x)\) 在 \(x_0\) 连续。与极限类似,同样存在单侧连续。 \(C(a, b) = \{f(x) | f(x) 在 (a,b…

题解:P14244 [CCPC 2024 Shandong I] 阻止城堡

更差的阅读体验注意到,增加一个障碍物至少可以减少一对互相攻击的车,最多减少两对互相攻击的车。 考虑两对车什么时候可以同时消除,当且仅当两对车的连线有交。所以可以转换成一个二分图匹配的模型,具体地,每个左…

倒喊说关狗纯郝飞沽峦

刂酒又追吮殖寄房淘端bbs.lyaz12vry.cn/productseries_33982744.Shtmlread.lyaz12vry.cn/productseries_62070018.Shtmlread.lymy44zni.cn/productseries_41842394.Shtml5g.lyaz12vry.cn/productseries_57105295.Shtml…

乓偎垢夹突蕾刻依滴矩

牙褂徽赐尾颊缎堑缎使bbs.lyaz12vry.cn/productseries_61546410.Shtmlread.lyaz12vry.cn/productseries_58247159.Shtmlread.lymy44zni.cn/productseries_25957195.Shtml5g.lyaz12vry.cn/productseries_25731920.Shtml…

Longest subsequence

https://www.luogu.com.cn/problem/CF632D 我们用lcm(a,b)>=max(a,b)来排除掉所有>m的a[i],然后我们像埃氏筛那样枚举每个a[i]的倍数,选取最多的那个

2025 年济宁短视频拍摄公司最新推荐榜,技术实力与市场口碑深度解析

在数字营销全面渗透的当下,短视频已成为企业构建品牌认知、实现流量转化的核心载体。然而济宁地区短视频拍摄市场却呈现两极分化:多数小型团队受限于技术设备与创意能力,作品同质化严重且转化效果微弱;部分服务商缺…

winform/WPF 通信协议目录索引

winform 【winform】主窗体多线程给子窗体传值 .net(c#) winform文本框只能输入数字,不能其他非法字符(转) C#写字板问题一二 —— C#+WinForm编程趣味入门实战-天轰穿.NET4趣味编程视频教程 vs2017 winform打包 【w…

078_尚硅谷_单分支流程图和细节

078_尚硅谷_单分支流程图和细节1.单分支概念 2.单分支的流程图3.golang支持在if中直接定义一个变量,案例

雷蛇(Razer)炼狱蝰蛇V2X极速版无线鼠标开箱

雷蛇(Razer)炼狱蝰蛇V2X极速版无线鼠标开箱Posted on 2025-10-18 14:53 lzhdim 阅读(0) 评论(0) 收藏 举报这次想买一个用电池的无线鼠标。之前已经买过另一个了,还有微软的设计师系列等,但是不是很满意,所以…

SQLite使用入门

SQLite数据库概述 在某些场景下使用SQLite文件数据库替代MySQL数据库是非常值得的,比如存储的数据量可控,业务查询简单。 相比起MySQL,PostgreSQL这样的大型数据库,SQLite文件数据库仅支持有限的数据类型;SQLite支…

数论-supergcd

https://www.luogu.com.cn/problem/P2152 运用更相减除法,如果有偶数就约掉,一偶一奇就除2,两个奇就相减,要写高精除,高精减和cmp

Layui框架使用入门

前言 对于后端开发人员而言,Layui框架的确是一个非常友好的前端页面脚手架,用于开发一些管理后台系统类的项目非常便捷。只需要掌握了传统的Web静态页面开发的三要素:HTML,CSS和JavaScript,就可以轻松掌握对Layui…

The 2024 ICPC Asia Hangzhou Regional Contest

Preface 去年的 hangzhou Regional,前中期对着 M 题爆写 2h 终于堪堪通过(好像说现场这题数据水了导致过了一车) 后面开始疯狂补手上会做但没写的题,最后 B 题赛后 1min 发现读入没开 long long,6 题大罚时倒闭 (…

手机也能用的在线p图网站,大图轻松处理

在互联网时代,修图已成为很多人日常生活和工作中不可或缺的技能。无论是发朋友圈、完成设计作业,还是处理素材,大家都希望找到一款既高效又便捷的图片处理工具。对于习惯使用Photoshop的用户来说,电脑端的PS虽然功…

Spring Boot框架常见问题

第一次请求接口响应较慢 原因1:DispatcherServlet默认是懒加载,即工程启动的时候,Applicationcontext会将所有的bean加载到容器,但是DispatcherServlet是没有加载的,只有第一次访问的时候才会加载。 解决办法:关…