目录

GitHub简介

什么是GitHub及其核心功能

GitHub与Git的关系与区别

GitHub在软件开发中的价值

账号注册与SSH配置

账号注册流程(用户名、邮箱、密码设置)

git基础配置

ssh配置

仓库创建与基本代码提交

从本地开始追踪一个项目到

从仓库开始追踪一个项目

Git分支与版本控制

分支管理基础

分支的概念与作用

分支的概念

核心作用

常用分支介绍

分支的核心操作

合并分支解决冲突

创建测试目录和初始 Python 文件

分支删除

本地分支删除

远程分支删除

误删分支的恢复方法

提交规范与最佳实践

GitHub协作开发

Fork与同步上游仓库

Fork仓库的概念与适用场景

Fork 仓库的操作步骤

同步上游仓库更新方式


只有动手亲自操作一遍才能掌握。

GitHub简介

什么是GitHub及其核心功能

GitHub = 基于 Git 的代码托管 + 协作开发平台程序员的 “云端代码网盘 + 协作工作台 + 项目社区”

核心功能

  • 代码托管:把项目代码存在云端
  • 版本管理:记录每一次修改,可回滚、可对比
  • 团队协作:多人一起开发同一个项目
  • Issue(任务 / BUG 管理):提需求、报 bug、分配任务
  • Pull Request(PR):提交代码改动,让别人审核后合并
  • GitHub Actions:自动化测试CI\CD、打包、部署
  • GitHub Pages:免费搭建静态网站
  • Star / Fork / Watch:收藏、复制、关注别人项目
GitHub与Git的关系与区别

GitHub

  • 是云端服务,用来存放 Git 仓库
  • 提供网页界面、协作、权限、社区
  • 必须联网

Git

  • 是本地版本控制软件(命令行 / 桌面工具)
  • 记录代码历史、分支、合并
  • 不需要联网也能用

关系

  • GitHub 底层使用 Git
  • 你在本地用 Git 写代码 → push 到 GitHub
  • GitHub 让 Git 从 “本地” 变成 “云端 + 协作”

最简单区别

Git 是工具,GitHub 是平台。

  • Git = 版本控制工具
  • GitHub = 代码托管与协作平台
GitHub在软件开发中的价值
  • 代码安全备份:本地电脑坏了也不怕
  • 多人协作开发:分工写代码,不互相覆盖
  • 规范化开发流程:提交 → 审核 → 合并 → 发布
  • 开源共享:全球开发者一起贡献项目
  • 降低团队沟通成本:代码、文档、任务都在一处
  • 自动化 CI/CD:自动测试、自动部署
  • 个人 / 企业简历展示:GitHub 就是程序员的作品集

账号注册与SSH配置

账号注册流程(用户名、邮箱、密码设置)
  • 国内QQ邮箱 网易邮箱、国外谷歌邮箱、苹果账号
git基础配置
  • 下载git工具

    Git - Install for Windows

  • 全局配置用户名和邮箱

    # 配置用户名(替换成你的,比如 "zhangsan123")
    git config --global user.name "Your GitHub Username"
    
    # 配置邮箱(替换成你的,比如 "zhangsan@xxx.com")
    git config --global user.email "Your GitHub Email"
    
    #例如我的
    git config --global user.name "PLAYER********"
    git config --global user.email "230********@qq.com"
    
  • 局部配置用户名和邮箱

    # 进入具体的项目路径下cd /path/to/your/project
    
    # 配置用户名(替换成你的,比如 "zhangsan123")
    git config user.name "Your GitHub Username"
    
    # 配置邮箱(替换成你的,比如 "zhangsan@xxx.com")
    git config user.email "Your GitHub Email"
    
    #例如我的
    git config user.name "PLAYER********"
    git config user.email "230********@qq.com"
    
  • 查看已经配置的内容

    # 全局配置查看
    git config --list
    # 或者
    git config -l
    
    # 局部配置查看
    # 查看当前仓库的局部配置(进入仓库目录后执行)
    git config --local --list
    
  • 可选配置好用、好看^ - ^

    # 开启彩色输出
    git config --global color.ui auto
    # 扩大缓冲区
    git config --global http.postBuffer 524288000
    # 配置换行符规则
    git config --global core.autocrlf true
    # 配置简写 和linux在bashrc中配置别名一样
    git config --global alias.st status       # git st 替代 git status
    git config --global alias.br branch       # git br 替代 git branch
    
  • 修改已存在配置

    # 清空配置
    git config --global --unset user.email
    # 修改配置 直接重新输入命令覆盖即可
    
ssh配置

为了让本地 Git 和 GitHub 之间的通信更安全、更方便,彻底摆脱每次操作都要输入账号密码的麻烦。

HTTPS 方式的本质是 “用账号密码验证身份”, 如果你的密码泄露,别人就能操作你的仓库。

而 SSH 是基于 “密钥对” 验证。

  • 检查是否已有 SSH 密钥

    # 下载git后 搜索打开git bash
    ls -al ~/.ssh
    
  • 生成新的ssh密钥

    执行下面的命令,把邮箱换成你 GitHub 注册的邮箱

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    # 或者 这个格式
    ssh-keygen -t ed25519 -C "your_email@example.com"
    

    执行后终端会出现提示,全程按「回车」即可,不用输入任何内容:

    • 第一步提示「Enter file in which to save the key」:回车(用默认路径);
    • 第二步提示「Enter passphrase」:回车(设置密码的话每次用 SSH 都要输,新手直接免密);
    • 第三步提示「Enter same passphrase again」:再回车。

    私钥:~/.ssh/id_rsa或者~/.ssh/id_ed25519(绝对不能泄露!泄露后私钥会失效);

    公钥:~/.ssh/id_rsa.pub或者~/.ssh/id_ed25519.pub(等下要复制到 GitHub)。

  • 启动ssh代理

    # 启动 SSH 代理
    eval "$(ssh-agent -s)"
    
    # 将私钥添加到代理中
    ssh-add ~/.ssh/id_rsa
    	or
    ssh-add ~/.ssh/id_ed25519
    
  • 把公钥复制到 GitHub

    复制公钥内容先把公钥文件里的内容全选复制,不同系统命令不同:

    # Windows (git bash)
    clip < ~/.ssh/id_rsa.pub
    or
    clip < ~/.ssh/id_ed25519.pub
    
    # Linux 
    xclip -sel clip < ~/.ssh/id_rsa.pub
    or
    xclip -sel clip < ~/.ssh/id_ed25519.pub
    
    # macos 
    pbcopy < ~/.ssh/id_rsa.pub
    or
    pbcopy < ~/.ssh/id_ed25519.pub
    
  • 登录 GitHub 粘贴公钥

    • 点击右上角的头像 → 选择「Settings」(设置)

    • 在左侧菜单栏找到「SSH and GPG keys」(SSH 和 GPG 密钥);

    • 点击右上角的「New SSH key」(新建 SSH 密钥);

    • 填信息:

      • Title:随便填(比如「我的笔记本电脑」,方便识别是哪台设备);
      • Key type:默认「Authentication Key」就行;
      • Key:把刚才复制的公钥内容粘贴进去(直接 Ctrl+V);
    • 点击「Add SSH key」(添加 SSH 密钥)

    • 弹出验证密码的提示,输入你的 GitHub 密码,确认即可。

  • 验证 SSH 是否配置成功

    回到终端git bash,执行命令

    ssh -T git@github.com
    

    第一次执行会提示「Are you sure you want to continue connecting」,输入 yes 回车。

  • 如果失败?常见原因:

    1. 公钥复制错了(比如少复制了最后一行,或多了空格);

    2. 生成密钥时用的邮箱和 GitHub 不一致;

    3. 私钥没添加到 SSH 代理(重新执行 ssh-add ~/.ssh/id_rsa)。

    4. 端口放行问题

      # 例如
      LEGION@LAPTOP-NPHPG1HU MINGW64 ~
      $ ssh -T git@github.com
      ssh: connect to host github.com port 22: Connection refused
      
      # 在config文件中指定端口为443即可。
      Host github.com
          HostName ssh.github.com
          Port 443
          User git
      

    解决方法1 查看home路径是否正确

    echo $HOME
    
    #示例输出 /c/Users/***
    

    强制指定密钥进行连接测试

    # 请将路径替换为你实际的绝对路径
    ssh -i "/c/Users/xxx/.ssh/id_ed25519" -T git@github.com
    or
    ssh -i "/c/Users/xxx/.ssh/id_rsa" -T git@github.com
    

    解决方法2

    在大模型中输入你的报错信息即可,大概率会因为配置文件的原因,跟着来即可。

  • 后续克隆项目选择 ssh版本即可

    # 例如
    git clone git@github.com:PLAYEROFMYLIFE/gitdir.git
    

仓库创建与基本代码提交

从本地开始追踪一个项目到
  • 进入本地项目文件夹,初始化 Git 仓库(使用git bash)

    # 进入具体的项目文件夹 默认在c盘
    cd D:
    cd learngit/
    
    # 初始化git仓库 会生成一个.git隐藏文件夹
    # 指定默认分支为 main,和 GitHub 一致
    git init --initial-branch=main
    

    执行后终端提示 Initialized empty Git repository in ...,说明初始化成功。

  • 将本地所有文件添加到暂存区,完成第一次提交

    # 创建.gitignore 文件(用于忽略一些不需要追踪或上传的文件)
    touch .gitignore
    
    # 把文件夹里所有文件添加到 Git 暂存区(. 代表所有文件)
    git add .
    
    # 提交暂存区的文件到本地仓库(-m 后是提交说明,必填,写清楚这次提交的内容)
    git commit -m "first commit ^_^"
    
  • 在 GitHub 上创建一个空的远程仓库

    这一步是给你的项目在 GitHub 上 “建个空文件夹”,用来接收本地代码:

    1. 打开 GitHub 官网,点击右上角「+」号 → 选择「New repository」(新建仓库);

    2. 填写仓库信息:

      • Repository name:仓库名(必须和本地项目文件夹名一致,比如 my-project,方便识别);
      • Description(可选):项目描述(比如「我的第一个 Python 项目」);
      • Visibility:选「Public」(公开)或「Private」(私有,免费版也支持);
      • ❗ 重点:不要勾选「Add a README file」「Add .gitignore」「Choose a license」(这些会导致远程仓库非空,后续推送冲突);
    3. 点击「Create repository」(创建仓库)。

    创建完成后,GitHub 会跳转到仓库页面,显示仓库的 SSH 地址(比如 git@github.com:你的用户名/my-project.git),先复制这个地址(后面要用)。

  • 关联本地仓库和 GitHub 远程仓库

    回到终端,执行命令把本地仓库和刚创建的 GitHub 仓库绑定:

    # 添加远程仓库(origin 是远程仓库的别名,默认用 origin 即可,不用改)
    # 替换成你刚复制的 GitHub SSH 地址
    git remote add origin git@github.com:PLAYEROFMYLIFE/learngit.git
    
    # 验证是否关联成功(可选)
    git remote -v
    
  • 将本地代码推送到 GitHub

    # 把本地 main 分支推送到 origin(远程仓库)的 main 分支
    # -u 是绑定默认推送分支,后续只需 git push 即可,不用重复写分支名
    git push --set-upstream origin main
    
  • 打开github 验证即可。

从仓库开始追踪一个项目
  • 打开github仓库,克隆仓库到本地

    # 改成具体名字
    git clone git@github.com:PLAYEROFMYLIFE/learngit.git
    
  • 本地修改文件并提交

    # 查看修改状态
    git status
    
    # 添加修改到暂存区
    git add filename
    
    # 提交修改到本地仓库
    git commit -m "modify commit"
    
    # 推送到远程仓库
    git push origin main
    
  • 实践任务

    1. 创建名为"my-first-repo"的个人仓库
    2. 在本地仓库并添加一个名为"hello-world.txt"的新文件
    3. 提交修改并推送到GitHub

Git分支与版本控制

分支管理策略、合并冲突解决、提交规范

分支管理基础

分支的概念与作用

分支能让你在不影响主代码的前提下,独立开发新功能、修复 Bug,最后再把改动合并回去。

GitHub Flow 是一种轻量级的分支策略,其核心是主分支(main/master)始终处于可部署状态,所有新功能都在短期存在的功能分支上开发,完成后通过Pull Request合并回主分支。

分支的概念

假设你在写一篇论文(对应「主分支 main」):

你想加一个新章节,但又怕写砸了影响已完成的内容 → 复制一份论文,在副本上写新章节(这就是「新建分支 feature - 新章节」);

写新章节时,发现原论文有个错别字 → 切回原论文改错别字(「切回 main 分支修复 Bug」);

新章节写完且没问题 → 把副本的内容合并回原论文(「合并 feature 分支到 main 分支」)。

Git 分支的本质就是:对代码库的一份 “独立快照”,分支之间互不干扰,你可以在任意分支上修改代码,不会影响其他分支。

main 分支:A → B → C → D(稳定的主代码)
                   ↘
feature 分支:         E → F → G(开发新功能的代码)

merge 后分支:A → B → C → D → G
核心作用
  1. 隔离开发,避免代码混乱(最核心作用)

这是分支最根本的价值:

  • 主分支(main/master):存放稳定、可发布的代码(比如上线的产品代码),绝对不能直接在上面改代码;
  • 功能分支(feature/*):开发新功能(比如「feature - 支付功能」「feature - 用户登录」);
  • Bug 修复分支(bugfix/*/hotfix/*):修复线上 Bug(hotfix 是紧急修复,直接基于 main 分支);
  • 测试分支(test/dev):用于测试未上线的功能。

就算你在 feature 分支把代码改烂了,main 分支的稳定代码也毫发无损,不会影响团队其他人。

  1. 支持多人并行开发

团队协作时,每个人都可以在自己的分支上开发:

  • 你开发「支付功能」→ 分支 feature-pay
  • 同事开发「评论功能」→ 分支 feature-comment
  • 互不干扰,开发完成后各自合并到主分支,避免多人改同一文件导致的冲突。
常用分支介绍
分支类型 命名规范 用途
主分支 main或master 存放稳定、可发布的代码(核心分支)
开发分支 dev/或develop/ 团队日常开发的分支(所有功能先合到这)
功能分支 feature/xxx 开发单个新功能(比如 feature-login)
Bug 修复分支 bugfix/xxx 修复开发中的 Bug
紧急修复分支 hotfix/xxx 修复线上已发布版本的紧急 Bug
分支的核心操作
# 1. 查看所有分支(* 表示当前所在分支)
git branch

# 2. 新建分支(比如新建 feature-login 分支)
git branch feature/login

# 3. 切换到新建的分支
git checkout/switch feature-login

# 简写(新建+切换一步到位,最常用)
git checkout -b feature-login
or
git switch -c feature-login

# 4. 把 feature-login 分支合并到 main 分支(先切回 main)
git checkout/switch main
git merge feature-login

# 5. 删除已合并的分支(开发完成后清理)
git branch -d feature-login

操作示例:

1、其中*表示当前所在分支

操作疑惑:

操作流程(模拟你的操作):

  1. 切到 feature-login 分支 → 用 PyCharm 打开 nihao.py → 修改内容(比如加一行 print("登录功能"));
  2. 不执行任何 Git 提交操作(既没点 PyCharm 的「Commit」,也没输 git commit);
  3. 切回 main 分支 → 用 PyCharm 重新打开 nihao.py

结果:

PyCharm 里的 nihao.py 依然能看到你加的 print("登录功能")——修改跟着你到了 main 分支

原因:

未提交的修改属于「工作区 / 暂存区」(Git 里的临时区域),不属于任何分支的提交记录。切换分支时,Git 不会清空这些临时修改,所以 PyCharm 展示的还是修改后的文件。

合并分支解决冲突

什么时候会触发合并冲突

冲突的核心原因是:两个不同的分支,修改了同一个文件的同一行 / 同一部分代码,Git 不知道该保留哪一个版本,只能暂停合并,等你手动决策

常见场景

场景 1:多人改同一文件

  • 你在 feature-login 分支改了 user.js 的第 10 行;
  • 同事在 main 分支也改了 user.js 的第 10 行;
  • 你把 feature-login 合并到 main 时,触发冲突。

场景 2:自己在不同分支改同一文件

  • 你在 feature-pay 分支改了 config.js 的配置;
  • 又在 bugfix-pay 分支改了 config.js 同一处配置;
  • 合并两个分支时触发冲突。

场景 3:分支长期未合并,主分支已更新

  • 你的 feature 分支基于 1 个月前的 main 分支创建;
  • 期间 main 分支的核心文件已被多次修改;
  • 你合并时,大量文件因内容差异触发冲突。
创建测试目录和初始 Python 文件

先搭建一个干净的 Git 仓库,创建基础 Python 文件:

# 1. 创建测试文件夹并进入
mkdir git-conflict-demo
cd git-conflict-demo

# 2. 初始化 Git 仓库(指定 main 分支)
git init --initial-branch=main

# 3. 创建一个 Python 文件(功能:计算两个数的和)
touch calculator.py
  • 编辑calculator文件
# calculator.py - 初始版本
def add(a, b):
    """计算两个数的和"""
    result = a + b
    return result

# 测试代码
if __name__ == "__main__":
    print("计算结果:", add(10, 20))
  • 提交代码到main分支
# 1. 添加文件到暂存区
git add calculator.py

# 2. 提交代码(第一次提交)
git commit -m "初始化:添加加法函数"
  • 创建 feature 分支并修改代码
    git checkout -b feature-add-tax
  • 修改caculator.py
# calculator.py - feature 分支版本
def add(a, b):
    """计算两个数的和(含10%税费)"""
    result = (a + b) * 1.1  # 核心修改:加了税费计算
    return result

# 测试代码
if __name__ == "__main__":
    print("计算结果(含税费):", add(10, 20))
  • 提交feature 分支的修改
git add calculator.py
git commit -m "feature分支:加法函数增加税费计算"
  • 切换回main分支,
git checkout/switch main
  • 修改calculator.py

    同样修改 add 函数的核心计算行(和 feature 分支改了同一行):

# calculator.py - main 分支版本
def add(a, b):
    """计算两个数的和(四舍五入)"""
    result = round(a + b, 2)  # 核心修改:四舍五入,和 feature 分支冲突
    return result

# 测试代码
if __name__ == "__main__":
    print("计算结果(四舍五入):", add(10, 20))
  • 提交 main 分支的修改
git add calculator.py
git commit -m "main分支:加法函数增加四舍五入"
  • 合并分支, 触发冲突

    现在尝试把 feature 分支合并到 main 分支,因为两个分支修改了 calculator.py 的同一行(result = ...),会直接触发冲突:

    git merge feature-add-tax
    
  • 冲突提示

# 看到类似这样的提示,说明冲突触发
Auto-merging calculator.py
CONFLICT (content): Merge conflict in calculator.py
Automatic merge failed; fix conflicts and then commit the result.
  • 查看冲突后的 Python 文件

    打开 calculator.py,会看到 Git 插入的冲突标记,核心冲突部分如下:

<<<<<<< HEAD
# calculator.py - main 分支版本
def add(a, b):
    """计算两个数的和(四舍五入)"""
    result = round(a + b, 2)  # 核心修改:四舍五入,和 feature 分支冲突
=======
# calculator.py - feature 分支版本
def add(a, b):
    """计算两个数的和(含10%税费)"""
    result = (a + b) * 1.1  # 核心修改:加了税费计算
>>>>>>> feature-add-tax
    return result

# 测试代码
if __name__ == "__main__":
<<<<<<< HEAD
    print("计算结果(四舍五入):", add(10, 20))
=======
    print("计算结果(含税费):", add(10, 20))
>>>>>>> feature-add-tax
  • 手动解决冲突

解决思路(融合需求:既加税费,又四舍五入)

修改冲突文件,删除标记,合并逻辑:

# calculator.py - 解决冲突后的版本
def add(a, b):
    """计算两个数的和(含10%税费+四舍五入)"""
    result = round((a + b) * 1.1, 2)  # 融合两个分支的逻辑
    return result

# 测试代码
if __name__ == "__main__":
    print("计算结果(含税费+四舍五入):", add(10, 20))  # 预期输出:33.0
  • 在github网站上Pull & Request 可视化操作更建议方便。

    需要现在本地进行先执行merge一下。

    # 确保在main分支
    git switch main
    
    # 合并
    git merge feature-add-tax
    

    然后可以看见github上有pr,然后创建一个pr请求,手动解决冲突然后合并分支删除分支,在本地执行回到原先状态

    git merge --abort
    # 然后将github上的代码pull下来同步
    git pull
    
分支删除
本地分支删除
  • 查看本地分支

    git branch
    
  • 删除已合并分支

    # 删除单个分支(-d 是 --delete,只删已合并的分支)
    git branch -d feature-login
    
    # 强制删除未合并的分支(谨慎!-D 是 --delete --force,会丢失代码)
    git branch -D feature-unfinished
    
  • 批量删除本地已合并的分支

    # 先切到 main 分支,再删除所有已合并到 main 的本地分支
    git checkout main
    git branch --merged main | grep -v "main" | xargs git branch -d
    

    git branch --merged main:列出所有已合并到 main 的分支;

    grep -v "main":排除 main 分支本身;

    xargs git branch -d:批量删除这些分支。

远程分支删除
  • 终端删除远程分支

    # 删除远程的 feature-login 分支(origin 是远程仓库别名)
    git push origin --delete feature-login
    
  • GitHub 网页删除远程分支

    打开仓库页面 → 点击顶部「Code」→ 右侧「Branches」;

    找到要删除的分支 → 点击右侧「⋯」→ 选择「Delete branch」;

    确认删除即可(如果分支被保护,会提示无法删除)。

误删分支的恢复方法

如果不小心删了分支,只要该分支有提交记录 / 远程备份,就能恢复:

  • 恢复本地已删除的分支

    # 第一步:找到删除分支的最后一次提交记录(用 reflog 查看操作历史)
    git reflog
    
    # 第二步:从提交记录恢复分支(替换成你的提交哈希值,比如 abc123)
    git checkout -b feature-login abc123
    
  • 恢复远程已删除的分支

    # 先在本地恢复分支
    #重新推送到远程即可:
    git push origin feature-login。
    

提交规范与最佳实践
  • 提交信息格式规范

    • 主题行限制50字符
    • 使用祈使句("Fix"而非"Fixed")
    • 提交类型标识(feat:功能,fix:修复,docs:文档等)
  • 类型 说明 示例
    feat 新增功能(feature) feat: 新增用户登录接口
    fix 修复 Bug(bugfix) fix: 修复登录密码加密错误
    docs 仅修改文档(README / 注释等) docs: 更新API文档示例
    style 代码格式调整(不影响逻辑,如缩进 / 空格) style: 格式化user.py代码
    refactor 代码重构(既不新增功能也不修复 Bug) refactor: 简化add函数逻辑
    test 添加 / 修改测试代码 test: 为add函数添加单元测试
    chore 构建 / 工具配置修改(如.gitignore) chore: 新增Python依赖包
  • 提交信息模板配置

    • 在仓库创建时勾选"Add a README file"
    • 使用.github/COMMIT_TEMPLATE.md文件设置模板
  • 提交历史的管理与重写

    • 重做最近一次提交

      刚提交完,发现提交信息写错(比如类型填错、主题超长); 漏加文件(比如忘了 git add 某个文件)。

      git commit --amend
      
    • 重置最近一次提交

      撤销最近一次提交,但保留工作区 / 暂存区的代码(代码不会丢);

      适合:提交后发现代码有问题,想修改后重新提交。

      git reset --soft HEAD^
      

      不同reset对比

      命令 效果
      git reset --soft 仅撤销提交,保留暂存区 / 工作区代码
      git reset --mixed 撤销提交 + 暂存区,保留工作区代码(默认)
      git reset --hard 撤销提交 + 暂存区 + 工作区,代码直接丢失

实践任务

  1. 在"my-first-repo"仓库中创建一个功能分支
  2. 在该分支上添加一个功能文件并提交
  3. 尝试合并到主分支并制造一个冲突
  4. 解决冲突并再次合并
  5. 使用规范的提交信息格式进行一次提交

GitHub协作开发

Fork/PR工作流、Code Review、参与开源项目

Fork与同步上游仓库

Fork 是把别人的仓库复制一份到你自己的 GitHub 账号下,你可以自由修改;同步上游仓库是把原仓库(上游)的最新代码同步到你的 Fork 仓库,避免你的代码和原仓库脱节。

  • Fork仓库的概念与适用场景
  1. Fork 的本质 Fork 就是「一键复制」: 把 GitHub 上别人的仓库(比如开源项目),完整复制到你自己的 GitHub 账号下,包括所有代码、分支、提交记录。 你可以把它理解成: 你在开源项目的 “副本” 上做修改,既不影响原项目,又能自由折腾,改好后还能通过 PR 把你的修改贡献给原项目。
  2. Fork 的核心场景 贡献开源项目:想给别人的开源项目提功能 / 修 Bug,但没有直接修改原仓库的权限 → Fork 后改自己的副本,再提 PR; 学习 / 二次开发:想基于别人的项目做定制化开发(比如改一个开源工具),但不想影响原项目; 保存项目快照:看到好用的项目,Fork 到自己账号,防止原作者删除 / 修改。
Fork 仓库的操作步骤

以 Fork 一个开源项目(比如 https://github.com/AUTOMATIC1111/stable-diffusion-webui)为例:

  1. 打开原仓库的 GitHub 页面;
  2. 点击页面右上角的「Fork」按钮(紫色按钮,很显眼);
  3. 等待几秒,GitHub 会自动跳转到你账号下的 Fork 仓库(地址:https://github.com/你的用户名/stable-diffusion-webui);
  4. 至此,你已经拥有了原仓库的完整副本,可自由修改。
同步上游仓库更新方式
  • GitHub 网页端同步

    方法 1:GitHub 网页端同步

    适用场景:原仓库更新少,且无复杂冲突。

    步骤:

    1. 打开你 Fork 后的仓库页面;
    2. 找到「Sync fork」按钮,点击;
    3. 点击「Update branch」按钮,GitHub 会自动尝试合并原仓库的最新代码到你的 Fork 仓库;
    4. 如果无冲突,同步完成;如果有冲突,会提示「Resolve conflicts」,需手动解决(和之前讲的合并冲突操作一致)。
  • 终端同步

    适用场景:原仓库更新频繁,或网页端同步失败(有冲突)。

    • 克隆你的 Fork 仓库到本地

      git clone git@github.com:PLAYEROFMYLIFE/stable-diffusion-webui.git
      
    • 添加上游仓库(upstream)地址

      # 添加原仓库为上游仓库(替换成原仓库的 SSH 地址)
      git remote add upstream git@github.com:xxx/awesome-project.git
      
      # 验证是否添加成功(会显示 origin 和 upstream)
      git remote -v
      
    • 拉取上游仓库的最新代码

      git fetch upstream
      
    • 切换到你的主分支(比如 main)

      git checkout main
      
    • 合并上游仓库的主分支到你的本地分支

      # 把 upstream/main 的最新代码合并到你的本地 main 分支
      git merge upstream/main
      
    • 把同步后的代码推送到你的 Fork 仓库(origin)

      git push origin main
      

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐