把 CentOS 上的项目部署到你自己的 GitHub 私有仓库,核心流程是:安装 Git → 配置 SSH 密钥 → 在 GitHub 新建私有仓库 → 本地初始化 Git → 关联远程仓库 → 提交并推送。下面是详细、可直接复制执行的步骤。
运行
运行
运行
复制输出的全部公钥内容(以
bash
运行
出现:
运行
运行
运行
运行
运行
运行
运行
运行
运行
plaintext
bash
运行
输出内容格式如下(示例):
plaintext
bash
运行
如果输出以下内容,说明配置成功:
plaintext
bash
运行
bash
运行场景 1:本地分支是
直接将推送命令中的
bash
运行
执行后如果无报错,说明推送成功,GitHub 仓库会自动创建
bash
运行场景 3:想统一分支名为
如果你希望本地分支也叫
bash
运行
plaintext
此时登录 GitHub 查看
你执行
运行
bash
运行
bash
运行
执行成功后,GitHub 仓库会自动创建
bash
运行
plaintext
此时登录 GitHub 查看
你现在遇到的
bash
运行
bash
运行
plaintext
此时登录 GitHub 查看
一、CentOS 服务器端:安装并配置 Git
1. 安装 Git
bash运行
# 安装 Git(CentOS 7/8/9 通用)
sudo yum install -y git
# 验证安装
git --version
2. 配置 Git 用户名与邮箱(与 GitHub 一致)
bash运行
git config --global user.name "你的GitHub用户名"
git config --global user.email "你的GitHub注册邮箱"
# 查看配置
git config --list
3. 生成 SSH 密钥(用于免密连接 GitHub)
bash运行
# 生成 ed25519 密钥(推荐,比 RSA 更安全)
ssh-keygen -t ed25519 -C "你的GitHub注册邮箱"
# 一路回车(默认路径、不设密码)
# 生成后,查看公钥
cat ~/.ssh/id_ed25519.pub
复制输出的全部公钥内容(以
ssh-ed25519 开头),后面要粘贴到 GitHub。
二、GitHub 网页端:创建私有仓库并添加 SSH 公钥
1. 创建私有仓库
- 登录 GitHub → 右上角 + → New repository
- 填写:
- Repository name:你的项目名(如
AiPPT) - Description:可选描述
- Privacy:选择 Private(私有)
- 不勾选:Add a README file、Add .gitignore、Choose a license
- Repository name:你的项目名(如
- 点击 Create repository
- 记录仓库 SSH 地址:
git@github.com:你的用户名/仓库名.git(如git@github.com:beylze/AiPPT.git)
2. 添加 SSH 公钥到 GitHub
- 右上角头像 → Settings → SSH and GPG keys → New SSH key
- Title:随便填(如
CentOS Server) - Key:粘贴刚才复制的公钥
- 点击 Add SSH key(输入 GitHub 密码验证)
3. 测试 SSH 连接
回到 CentOS 终端,执行:bash
运行
ssh -T git@github.com
出现:
Hi 用户名! You've successfully authenticated... 表示成功。
三、CentOS 本地项目:初始化 Git 并推送到 GitHub
1. 进入你的项目目录
bash运行
# 假设项目在 /root/AiPPT 或 /home/user/AiPPT
cd /你的项目路径
2. 初始化本地 Git 仓库
bash运行
git init
3. 添加文件到暂存区
bash运行
# 添加所有文件(. 表示当前目录所有文件)
git add .
# 或只添加指定文件
# git add 文件名1 文件名2
4. 提交到本地仓库
bash运行
git commit -m "首次提交:项目初始化"
5. 关联远程 GitHub 私有仓库
bash运行
# 替换为你的仓库 SSH 地址
git remote add origin git@github.com:你的用户名/仓库名.git
# 验证远程仓库
git remote -v
6. 推送到 GitHub 私有仓库
bash运行
# 首次推送,-u 建立本地与远程分支的关联
git push -u origin main
若提示error: src refspec main does not match any,说明本地分支是master,执行:
bash
运行git push -u origin master
四、后续更新与常用命令
1. 提交并推送更新
bash运行
# 1. 添加修改
git add .
# 2. 提交
git commit -m "更新说明:修复XX功能"
# 3. 推送(已关联后可直接 push)
git push
2. 拉取远程最新代码
bash运行
git pull origin main
3. 查看状态与日志
bash运行
# 查看文件状态
git status
# 查看提交日志
git log
五、常见问题
- 权限 denied:检查 SSH 公钥是否正确添加、仓库地址是否为 SSH 而非 HTTPS。
- fatal: remote origin already exists:先删除旧关联:
git remote remove origin,再重新添加。 - 推送失败:确保本地有提交记录(
git commit),再推送。
# ssh-keygen -t ed25519 -C "beylze@qq.com" Generating public/private ed25519 key pair.
你现在执行到生成 SSH 密钥的步骤,终端显示Generating public/private ed25519 key pair. 是正常的初始化提示,接下来我会告诉你这一步该怎么操作,以及后续验证、使用密钥的完整流程。
1. 完成 SSH 密钥生成
当终端显示上述提示后,会紧接着出现:plaintext
Enter file in which to save the key (/root/.ssh/id_ed25519):
- 操作:直接按回车键(使用默认路径,无需修改)。
- 随后会提示:
plaintextEnter passphrase (empty for no passphrase): Enter same passphrase again: - 操作:再次连续按两次回车键(设置空密码,避免每次 Git 操作都输入密码;如果需要密码保护,可输入自定义密码并记住)。
2. 查看并复制公钥(关键步骤)
生成密钥后,执行以下命令查看公钥内容:bash
运行
cat ~/.ssh/id_ed25519.pub
输出内容格式如下(示例):
plaintext
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL8xxxxxxxxx9kXxxxxxx beylze@qq.com
- 操作:选中从
ssh-ed25519开始到邮箱结束的全部内容,复制下来(CentOS 可按Ctrl+Shift+C复制,或右键复制)。
3. 将公钥添加到 GitHub(补全之前的步骤)
- 登录 GitHub → 右上角头像 → Settings → 左侧栏找到 SSH and GPG keys → 点击 New SSH key。
- Title:填一个便于识别的名称(如
CentOS Server)。 - Key:粘贴刚才复制的全部公钥内容(确保没有多余空格或换行)。
- 点击 Add SSH key,输入 GitHub 密码验证即可。
4. 测试 SSH 连接(验证是否配置成功)
回到 CentOS 终端,执行:bash
运行
ssh -T git@github.com
如果输出以下内容,说明配置成功:
plaintext
Hi beylze! You've successfully authenticated, but GitHub does not provide shell access.
总结
- 生成 SSH 密钥时,默认路径和空密码是最便捷的选择,无需额外修改。
- 公钥必须完整复制并粘贴到 GitHub,少一个字符都会导致连接失败。
- 测试 SSH 连接是验证配置是否生效的关键步骤,成功后才能正常推送代码到私有仓库。
Permission denied (publickey) 之类的错误,随时告诉我,我帮你排查。# git push -u origin main error: src refspec main does not match any. error: failed to push some refs to 'git@github.com:beylze/fanmulu.git'
你遇到的error: src refspec main does not match any 错误,核心原因是本地 Git 仓库的默认分支名称不是 main(而是 master),或者本地还没有任何可推送的提交记录。下面是分步骤的解决方法,确保你能一次性推送到 GitHub 私有仓库。
第一步:先确认本地分支名称和提交状态
1. 检查本地分支名称
执行命令查看当前分支:bash
运行
git branch
- 如果输出是
* master(带星号的是当前分支),说明本地分支是master,而非main; - 如果无任何输出,说明本地还没创建分支(通常是因为没有提交记录)。
2. 检查本地提交记录
执行命令查看是否有提交:bash
运行
git log
- 如果提示
fatal: your current branch 'master' does not have any commits yet,说明你还没执行git commit提交代码。
第二步:分场景解决推送问题
场景 1:本地分支是 master(最常见)
直接将推送命令中的 main 替换为 master 即可:bash
运行
# 推送 master 分支到远程
git push -u origin master
执行后如果无报错,说明推送成功,GitHub 仓库会自动创建
master 分支。
场景 2:本地无提交记录(刚初始化 Git)
如果git log 提示无提交,先完成代码提交,再推送:bash
运行
# 1. 添加项目所有文件到暂存区
git add .
# 2. 提交到本地仓库(备注信息必填)
git commit -m "首次提交:fanmulu 项目初始化"
# 3. 推送(分支名根据第一步结果选 master 或 main)
git push -u origin master # 优先用这个
# 若确认本地是 main 分支,执行:git push -u origin main
场景 3:想统一分支名为 main(可选)
如果你希望本地分支也叫 main(和 GitHub 新版默认分支一致),可先重命名分支再推送:bash
运行
# 1. 将本地 master 分支重命名为 main
git branch -M main
# 2. 推送 main 分支到远程
git push -u origin main
第三步:验证推送结果
推送成功后,终端会输出类似以下内容:plaintext
Enumerating objects: X, done.
Counting objects: 100% (X/X), done.
Writing objects: 100% (X/X), X bytes | X KiB/s, done.
Total X (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:beylze/fanmulu.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
此时登录 GitHub 查看
fanmulu 私有仓库,就能看到你推送的代码了。
总结
- 核心原因:推送命令的分支名(
main)和本地实际分支名(master)不匹配,或本地无提交记录。 - 最简解决:直接执行
git push -u origin master(适配 CentOS 下 Git 的默认分支名)。 - 前置条件:推送前必须通过
git add .+git commit -m "备注"完成本地提交。
# git checkout main error: pathspec 'main' did not match any file(s) known to git.
你执行
git checkout main 报错,核心原因是本地 Git 仓库里根本没有创建 main 分支(目前只有默认的 master 分支,且可能还没有任何提交记录)。下面先解释原因,再给你能直接解决问题的操作步骤。
第一步:理解报错本质
Git 的checkout 命令是「切换到已有分支」,但你的本地仓库:
- 刚初始化(
git init),默认分支是master(CentOS 下 Git 旧版本默认分支名是master,GitHub 新版默认是main,二者不匹配); - 甚至可能还没完成首次提交,分支处于「空状态」,无法切换 / 创建
main分支。
第二步:正确操作(无需切换 main,直接适配本地 master 分支)
你不需要强行创建main 分支,直接用本地已有的 master 分支推送即可,步骤如下:
1. 先确认本地状态(可选,验证用)
bash运行
# 查看本地分支(此时只会显示 * master,代表当前在 master 分支)
git branch
# 查看是否有提交记录(无记录会提示 "does not have any commits yet")
git log
2. 确保完成首次提交(关键前置步骤)
如果git log 提示无提交,先执行:bash
运行
# 添加所有项目文件到暂存区
git add .
# 提交到本地仓库(备注信息必填,不能省略)
git commit -m "首次提交:fanmulu 项目初始化"
3. 直接推送 master 分支到 GitHub
这是最适配你当前环境的命令,无需纠结main 分支:bash
运行
# 推送本地 master 分支到远程 GitHub 仓库,并建立关联
git push -u origin master
执行成功后,GitHub 仓库会自动创建
master 分支,你的代码就会出现在私有仓库里。
(可选)如果非要用 main 分支(统一命名)
若你想让本地和远程都用main 分支,执行以下命令(需先完成上述「首次提交」):bash
运行
# 1. 将本地 master 分支重命名为 main
git branch -M main
# 2. 推送 main 分支到远程
git push -u origin main
第三步:验证结果
推送成功后,终端会输出类似内容:plaintext
To github.com:beylze/fanmulu.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
此时登录 GitHub 查看
fanmulu 私有仓库,就能看到代码,分支标签会显示 master(或 main,取决于你选的方式)。
总结
- 核心原因:
checkout main失败是因为本地无main分支,默认只有master。 - 最简方案:无需切换分支,直接执行
git push -u origin master推送本地默认的master分支。 - 前置条件:推送前必须完成
git add .+git commit提交,空仓库无法推送。
# git branch -M main (3.14.0) [root@yisu-691c50ab51530 pan_directory]# git branch * main (3.14.0) [root@yisu-691c50ab51530 pan_directory]# git push -u origin main To git@github.com:beylze/fanmulu.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'git@github.com:beylze/fanmulu.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first merge the remote changes (e.g., hint: 'git pull') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
你现在遇到的
! [rejected] main -> main (fetch first) 错误,核心原因是你的 GitHub 远程仓库里已经有了 main 分支的内容(比如创建仓库时勾选了 README/.gitignore 等文件),而本地 main 分支是刚重命名的空分支,Git 拒绝直接覆盖远程内容。下面我帮你分步骤解决,确保代码能顺利推上去。
第一步:先理解问题本质
GitHub 新建仓库时,如果你不小心勾选了「Add a README file」「Add .gitignore」等选项,远程仓库就会有初始提交记录;而你的本地分支虽然命名为main,但和远程 main 分支没有共同的提交历史,Git 为了防止数据丢失,会拒绝推送。
第二步:解决方法(两种方案,选其一即可)
方案 1:拉取远程内容并合并(推荐,保留远程文件)
这个方案会把远程仓库的 README 等文件拉到本地,合并后再推送,不会丢失任何内容:bash
运行
# 1. 先拉取远程 main 分支的内容(--allow-unrelated-histories 允许合并无关联的历史)
git pull origin main --allow-unrelated-histories
# 2. 若拉取后出现合并冲突(终端提示 conflict),先解决冲突:
# - 打开冲突文件,删除 <<<<<<< HEAD、=======、>>>>>>> 等冲突标记,保留需要的内容
# - 解决后重新添加并提交:
git add .
git commit -m "合并远程 README 文件,解决冲突"
# 3. 再次推送本地 main 分支到远程
git push -u origin main
方案 2:强制推送(覆盖远程内容,慎用)
如果远程仓库里只有自动生成的 README 等无关文件,你想直接用本地代码覆盖远程,可执行强制推送:bash
运行
# 强制推送本地 main 分支到远程,覆盖远程内容
git push -u origin main --force
⚠️ 注意:强制推送会删除远程仓库里的所有现有内容,仅在确认远程无重要文件时使用!
第三步:验证推送结果
执行成功后,终端会输出类似内容:plaintext
Enumerating objects: X, done.
Counting objects: 100% (X/X), done.
Writing objects: 100% (X/X), X bytes | X KiB/s, done.
Total X (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:beylze/fanmulu.git
xxxxxxx..xxxxxxx main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
此时登录 GitHub 查看
fanmulu 私有仓库,就能看到本地代码和远程文件(方案 1),或只有本地代码(方案 2)。
总结
- 核心原因:远程
main分支有初始提交(如 README),本地分支无关联历史,Git 拒绝普通推送。 - 推荐方案:用
git pull origin main --allow-unrelated-histories拉取并合并远程内容,解决冲突后再推送。 - 应急方案:确认远程无重要内容时,用
--force强制推送覆盖。
git pull 时出现具体的冲突提示,或强制推送后仍有报错,把完整的终端输出贴出来,我帮你解决。声明:本文网友投稿,观点仅代表作者本人,不代表鲁班SEO赞同其观点或证实其描述。
