🥏Git 远程提交以及撤回错误的提交代码 | 参与开源项目开发-基础

2023-3-1|2024-2-12
D_SUPER
D_SUPER
type
status
date
slug
summary
category
tags
icon

NotionNext 作为一款部署在 Vercel 上,免费开源的静态博客系统,项目使用 NextJS + Notion API 实现博客内容渲染。拉取 Github 库后在 Vercel 上设置 Environment Variables(环境变量) 即可实现个性化部署[*]。部署完成后,仅需在 Notion 中添加/修改自己的笔记内容,即可实现无感知地更新博客。
NotionNext 支持二次开发,在本地测试好修改文件后,还可以将修改推送到主仓库,参与项目贡献。如何二次开发 NotionNext ,自定义功能详见:NotionNext 二次开发手册
本文记录一下如何将本地的代码修改提交到上游仓库,以及如何处理错误的 Git 提交。
相关阅读:

拉取上游仓库

  • 使用 vs code 打开本地 git 项目文件夹
  • 切换到与上游同步的分支: git checkout tangly1024-main
    • git checkout 命令 | git switch 命令
      git checkout xxxx 切换分支
      git checkout -b xxxx 新建分支
      git branch -d <name> 删除分支
    • tangly1024-main 分支为设置的 NotionNext 上游同步分支,创建过程为:
        1. 新建 tangly1024-main 分支(名字可以自取, -b 表示新建分支)
        1. 拉取想要开发的代码库(填入 git 地址,git 分支 main
        notion image
        此时该分支为上游的完全代码。同样的操作用于更新 NotionNext 项目[*]。
  • vs code 可视化 git 分支
notion image

提交代码修改

  • 在本地修改该分支(git checkout tangly1024-main
    • git status 查看文件修改追踪情况
    • git add xxxx 提交xxxx文件修改 或 git add . 提交全部修改文件
    • git commit -m '提交行为注释' 注释提交(注释提交的目的等)
  • 本地 git 处理完成后,向上游推送修改
    • 指定向 tangly1024-main 上游分支修改,此时在 NotionNext 项目中出现新的 Pull requests
      notion image
      可以在其中添加注释,以便上游仓库大佬更好地处理你的代码合并。
      合并完成
      合并完成
如果你提交的代码完整无误,那就安心等待处理就好啦。

撤回远程提交

然而“人有失手,马有漏蹄”。如果你提交的代码出现错误,或是不想提交了,又该怎么办呢?
  • 首先检查提交历史 git log (输入字母 q 推出历史查询)。
notion image
  • 在其中找到想要回复的历史状态位置,例如:
    • 一键“回档”
      • git reset
        git reset --soft HEAD^ reset到上一次修改
        git reset --soft HEAD^2 reset到上上次修改
        git reset --soft a835c5 reset到 a835c5… 状态
        此时完成本地的 Git 恢复工作。
    • 再将恢复状态同步到上游仓库,覆盖提交,此时即可撤回提交状态。
      等你修正好代码后可以重复提交代码修改步骤,完成提交。
      更暴力的方法,view all branches 直接删除 Active branch
      notion image

      总结

      • 该操作是参与 Github 项目开发的基础 git 知识。
      • 通过这次错误提交和撤回的过程,我更加熟悉 Git 的本地和远程的操作关系,也更深刻理解了分支和历史恢复。
      • 延申阅读:
        • git push origin --delete <BranchName> 删除远程分支
        • 慎用 git reset --hard 会还原部分修改代码
          git reset –-soft:回退到某个版本,只回退了 commit 的信息,不会恢复到 index file 一级。如果还要提交,直接commit即可;
          git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit 中所包含的更改被冲掉;

      推荐阅读

       

      zotero 使用 AList 提供 WebDAV 同步 | 提高 AList 上传文件大小限值思源笔记使用 Synology 免费 15G 对象存储 S3/C2 同步
      • Waline