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

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.dtcms.com/a/361208.html

相关文章:

  • .Net程序员就业现状以及学习路线图(二)
  • Android面试指南(六)
  • 大模型落地全流程实践:从技术选型到企业级部署
  • 音视频开发入门:FFmpeg vs GStreamer,新手该如何选择?
  • 松灵斯坦福Mobile ALOHA同款 | 通过低成本全身远程操作实现双手机器人移动操控学习
  • 01数据结构-红黑树
  • 永磁同步电机无速度算法--高频脉振方波注入法(测量轴系转子位置误差信号解耦处理)
  • Spark引擎中RDD的性质
  • 【牛客JZ31】—栈的压入弹出序列判断算法详解
  • 【73页PPT】MES应用介绍(附下载方式)
  • SpringBoot @RefreshScope 注解的极致玩法
  • SpringCloud-服务注册-服务发现
  • AI瘦身狂魔!微软推出原生1-bit大模型,性能不减,内存仅需同行零头!
  • 博0进化版
  • 9月校招难题怎么解?AI面试精准匹配人才
  • 系统架构设计师备考第12天——计算机语言-建模形式化语言
  • Windows 命令行:cd 命令1,cd 命令的简单使用
  • 数据结构:单链表的应用(力扣算法题)第二章
  • APP性能测试,你需要关注哪些指标?
  • React 学习笔记3 生命周期 受控/非受控组件
  • 阿里云代理商:轻量应用服务是什么?怎么用轻量应用服务器搭建个人博客?
  • 大模型落地:从微调到部署的全景式实战指南
  • MFC应用防止多开
  • Prometheus Alertmanager 告警组件学习
  • Linux 正则表达式与grep命令
  • 车载卫星通信:让自动驾驶“永不掉线”?
  • Kafka面试精讲 Day 4:Consumer消费者模型与消费组
  • 指针数组与数组指针的区别
  • 【第十一章】Python 队列全方位解析:从基础到实战
  • 鸿蒙NEXT表单选择组件详解:Radio与Checkbox的使用指南