当前位置: 首页 > web >正文

Git基础使用和PR贡献

Git 是一种分布式版本控制系统,主要用于管理和跟踪代码等文件的变更,它能够帮助开发者在多人协作开发时记录每一次修改、回退到历史版本、合并不同的更改,并且支持分支开发,方便团队协作和项目管理

简单来说,Git 可以让你高效、安全地管理项目文件的历史和协作过程,是现代软件开发中不可或缺的工具

文章目录

    • 本地 Git 基础使用流程
    • 分支与主干逻辑
      • 分支操作
      • 撤销更改
    • gitignore
    • 常见问题
      • 分支切换与内容变动问题
      • 如何保存分支更改并切换主干
    • 常见错误及解决
      • 错误示例
      • 其他注意事项
    • Git 上传到远程仓库笔记
      • Workfolw
      • 常见问题
    • 通过 PR 贡献项目


参考资料
Pro Git book
如何在 Github 上规范的提交 PR(图文详解) - 知乎



本地 Git 基础使用流程

  1. 安装 Git

    • Windows/macOS:官网下载
    • Linux:sudo apt-get install git
  2. 初始化本地仓库

    git init
    

对于 Windows 电脑,可以直接在“文件资源管理器”中的地址栏输入 cmd 打开命令窗口

在这里插入图片描述

  1. 配置用户名和邮箱
    git config --global user.name "你的昵称"
    git config --global user.email "你的邮箱"
    

--global 参数代表“全局配置”,也就是对当前设备上所有仓库统一配置
具体来说:
使用 --global 配置后,所有在本机操作的 Git 仓库,都会默认使用这个用户信息
如果你没有在某个仓库里单独设置(用 --local),那仓库会继承全局配置

如果你想为某个仓库设置不同的用户名或邮箱,可以在该仓库目录下使用不带 --global 的命令(或加 --local),比如:

git config user.name "另一个昵称"
git config user.email "另一个邮箱"

这样只影响当前仓库

在这里插入图片描述

  1. 添加文件到暂存区
    git add 文件名   # 添加指定文件
    git add .        # 添加所有文件
    

在这里插入图片描述

这些提示说明 Git 检测到你的换行符和当前系统默认格式不同,操作时会做转换,有特殊需求的话可以进行更改

  1. 提交到本地仓库

    git commit -m "提交说明"
    
  2. 常用命令

    git status    # 查看状态
    git log       # 查看日志
    git diff      # 查看变化
    git branch    # 查看分支
    

分支与主干逻辑

  • 主干(main/master)通常是项目的主分支,代表了稳定和可随时发布的代码
  • 分支(branch)开发新功能、修复 Bug 时从主干拉出,开发完成后再合并回主干

分支操作

切换分支

git checkout 分支名
# 或
git switch 分支名

创建并切换新分支

git checkout -b 新分支名
# 或
git switch -c 新分支名

合并分支

git checkout main
git merge 分支名

撤销更改

撤销未暂存的更改
丢弃你对这个文件的修改

git checkout -- 文件名
# 或
git restore 文件名

撤销已暂存但未提交的更改
把已经 git add 到暂存区的内容撤回到未暂存状态(unstaged),不会丢失你的本地修改

git reset HEAD 文件名

撤销最近一次提交

git reset --soft HEAD~1   # 保留更改
git reset --hard HEAD~1   # 丢弃更改

--soft 撤销上一次提交,但保留所有更改在暂存区(staged)
--hard 撤销上一次提交并且丢弃所有本地更改(工作区和暂存区都恢复到上一次提交前的状态)

当存在父提交时才有效”,因为 HEAD~1 指向父提交,对于第一个 commit,它没有父提交,所以命令会报错

gitignore

.gitignore 是一个文本文件,用于告诉 Git 哪些文件或文件夹不需要被版本控制,即不需要被提交到仓库
只要你在项目根目录(或子目录)下创建一个 .gitignore 文件,并写入想要忽略的文件、文件夹或通配规则,Git 就会自动跳过这些内容

# 忽略编译生成的文件
build

如果你先提交了一些文件,再添加 .gitignore,那些已经被追踪的文件不会自动变成“忽略”,需要手动用 git rm --cached 命令把它们从暂存区移除

你可以一次性移除多个文件:

git rm --cached file1.txt file2.txt

或者整个目录:

git rm --cached -r directory_name

在这里插入图片描述

这里换到了 Git Bash 进行操作

常见问题

分支切换与内容变动问题

如果分支有未提交更改,切换分支时这些更改会跟随,导致切换后代码内容没变
解决方法:

  • 提交更改
  • 暂存更改(git stash
  • 丢弃更改(git restore .git reset --hard

如果工作区有未提交的更改,切换分支时这些更改会被带到目标分支
如果这些更改与目标分支不冲突,Git 会允许切换;如果存在冲突,Git 会阻止切换并提示你先处理这些更改

如果主干和分支内容本来就一样,切换分支后代码自然不会变
使用 git branch 查看当前分支,git status 查看工作区状态

如何保存分支更改并切换主干

未提交更改:

git stash
git checkout main

已提交更改:

git checkout main

在 VSCode 中可以用终端输入上述命令,也可以用源代码管理面板的图形化按钮操作

常见错误及解决

错误示例

git add .
# warning: LF will be replaced by CRLF ...
git commit "test"
# 错误:缺少 -m 参数

正确提交方式:

git commit -m "test"

若提示“no changes added to commit”,说明没有内容被 add 进暂存区,应使用 git status 检查文件状态,然后重新 git add 文件名 再提交

其他注意事项

  • git reset --hard 会丢弃所有未提交的更改,使用前务必谨慎
  • 所有 git 命令无论在 CMD、PowerShell 还是 VSCode 终端中都可以通用
  • VSCode 的 Git 面板可以辅助完成大部分 Git 操作

如遇特殊情况(如冲突、还原部分文件、远程操作等),建议先用 git status 查看当前状态,再决定操作步骤

Git 上传到远程仓库笔记

Workfolw

  1. 初始化本地仓库
    如果还没有本地仓库,先初始化
git init
  1. 添加文件到暂存区
    将所有文件添加到暂存区
git add .

或者只添加某个文件

git add 文件名
  1. 提交到本地仓库
    提交更改,并添加提交说明
git commit -m "你的提交说明"
  1. 关联远程仓库
    只需要关联一次,之后就不用再操作
git remote add origin 仓库地址

例如

git remote add origin https://github.com/用户名/仓库名.git
  1. 推送到远程仓库
    第一次推送时(以 master 为例)
git push -u origin master

如果你的主分支是 main

git push -u origin main

后续只需用:

git push

在这里插入图片描述

此时会弹出窗口提示你登录 github,注意一下自己的网络环境(比如我这里就失败了一次)

常见问题

  • 如果远程仓库已有内容,建议先拉取并合并:
    git pull origin master
    
  • 如果遇到推送失败,检查是否有权限,或分支名称是否正确

总结
常用命令顺序:git initgit addgit commitgit remote add origingit push

通过 PR 贡献项目

  1. 在项目主页 Fork 一个项目分支
    项目主页,点击 Fork 按钮,创建一个新的派生项目
  2. 将项目 Clone 到本地
  3. 创建分支,添加/修改内容并合并
  4. 将内容 push 到远程仓库
  5. 在远程仓库中发起 PR 合并请求
http://www.xdnf.cn/news/19641.html

相关文章:

  • 02-Media-1-acodec.py 使用G.711编码和解码音频的示例程序
  • 电子电气架构 --- 智能电动车EEA电子电气架构(上)
  • 时序数据库IoTDB:为何成为工业数据管理新宠?
  • (Mysql)MVCC、Redo Log 与 Undo Log
  • 《探索C++11:现代C++语法的性能革新(上篇)》
  • C++11 ——— lambda表达式
  • 前端必看:为什么同一段 CSS 在不同浏览器显示不一样?附解决方案和实战代码
  • 血缘元数据采集开放标准:OpenLineage Guides 使用 Apache Airflow® 和 OpenLineage + Marquez 入门
  • 使用Spring Boot对接印度股票市场API开发实践
  • Linux初始——Vim
  • [VLDB 2025]阿里云大数据AI平台多篇论文被收录
  • Matrix-Breakout: 2 Morpheus靶场渗透
  • docker本地部署dify,nginx80端口占用的报错
  • 环境搭建汇总
  • Burp Suite 插件 | 提供强大的框架自动化安全扫描功能。目前支持1000+POC、支持动态加载POC、指定框架扫描。
  • 代码随想录刷题Day47
  • 前端测试深度实践:从单元测试到E2E测试的完整测试解决方案
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(八)
  • 华宇TAS应用中间件与长城科技两款产品完成兼容互认证
  • 卷积神经网络训练全攻略:从理论到实战
  • 矩阵中寻找好子矩阵
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 【git】解决Failed to connect to github.com port 443: Timed out
  • 如何修复Lyra Starter Game的按键绑定功能?
  • 智能运维新范式:自动化如何提升企业IT效率
  • 二叉树OJ习题
  • Azure AI Search构建RAG的优化点
  • 动态配置最佳实践:Spring Boot 十种落地方式与回滚审计指南(含实操与避坑)
  • Hello World背后的秘密:详解 C++ 编译链接模型
  • 【重学MySQL】九十三、MySQL字符集与比较规则完全解析