惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

栖童の小站

中兴微ZX296716机顶盒TTL救砖全攻略 | 栖童の小站 闲鱼副业之行:在机顶盒救砖中,窥见人性的温差 | 栖童の小站 CMCC RAX3000QY路由器TTL刷机与OpenWrt解锁全记录 | 栖童の小站 晨星9385芯片设备免拆包自修改教程 | 栖童の小站 小众云服务商深度测评:小兔互联、初七云、星辰云对比 | 栖童の小站 我的2025:在破除幻象、划定边界与坚守内心的一年 | 栖童の小站 闲鱼求职骗局实录:我是如何识破假冒京东HR | 栖童の小站 “大仙”是如何操控你的:亲历东北出马仙骗局与背后的恐惧营销心理学 | 栖童の小站 一次网站性能翻车实录:滥用SWPP插件导致的用户体验灾难与修复 | 栖童の小站 未成年网络暴力观察:从劝诫到被“人肉”的反思 | 栖童の小站 卸任版主后的身份枷锁:虚拟社交中的友谊与边界 | 栖童の小站 Clarity主题深度定制指南 | 栖童の小站 从Hexo到Nuxt:我的小站重构与品牌升级之路 | 栖童の小站 在爱恨之间:我的人际关系修复与挣扎 | 栖童の小站 信仰的见证:当基督徒的行为违背圣经 | 栖童の小站 版主生涯的回忆:在deepin论坛的日子 | 栖童の小站 从耕种到秋收 | 栖童の小站 当田园牧歌遭遇田埂上的贪婪 | 栖童の小站 芜湖散记:江畔的温柔与遗憾 | 栖童の小站 零成本自建网站统计:在Vercel上部署Umami完全指南 | 栖童の小站 童年的两面:简单的快乐与沉重的烙印 | 栖童の小站 家庭阴影与校园霸凌的自愈 | 栖童の小站 公共澡堂体验:记录一次北方乡下的专业搓澡 | 栖童の小站 如何打造高效的团队 | 栖童の小站 Hexo Butterfly主题进阶美化:添加FPS显示、节日弹窗与评论提示 | 栖童の小站 告别手动编译:利用GitHub Actions自动化部署你的Hexo博客 | 栖童の小站 Linux音频修复:解决前置耳机及麦克风插孔无声方案 | 栖童の小站 从零搭建Hexo静态博客:环境配置、主题安装到部署上线完全指南 | 栖童の小站 解决Debian包格式兼容:从zst到xz的手动转换与重打包教程 | 栖童の小站 Debian系统编译Linux内核deb包:从编译到打包安装全流程 | 栖童の小站 老爷机复活指南:Linux Mint Xfce 轻量系统安装与优化全流程 | 栖童の小站
Linux系统Git使用指南:从本地仓库创建到远程仓库推送 | 栖童の小站
栖童, sweetcandymini@foxmail.com · 2024-11-16 · via 栖童の小站

本文是一份面向Linux用户的Git远程上传完整指南。涵盖Git安装、SSH密钥配置、本地仓库初始化、远程仓库关联,并详细解决了推送过程中常见的“refusing to merge unrelated histories”等错误,帮助你高效管理代码版本。

一、准备工作

  1. 本文以Github为例,其他代码托管平台类似。
  2. 本文以SSH URL 为例,因为在push时,不需要输入用户名Personal access tokens,如果配置SSH key的时候设置了密码(需要输入密码),否则直接不需要输入密码。
  3. 具体创建Github仓库的方法,懂得都懂,这里不过多说明。

1.1 申请 Personal access tokens

  1. SSH URL忽略此步骤。
  2. HTTPS URLpush的时需要验证用户名Personal access tokens
  1. 点击右上角的头像,然后选择Settings(设置)
    Github-Settings
    Github-Settings
  2. 在左侧导航栏中,选择Developer settings(开发者设置)
    Github-tokens1
    Github-tokens1
  3. Developer settings页面上,选择Personal access tokens(个人访问令牌)
  4. Personal access tokens页面上,点击Generate new token(生成新令牌按钮)
    Github-tokens2
    Github-tokens2
  5. 提供一个描述以标识该访问令牌的用途。
  6. Select scopes(选择范围)部分,选择要授予该令牌的权限。这些权限将决定该访问令牌可以执行哪些操作。根据需求选择合适的权限,例如repo(仓库)admin:org(组织管理)等。
  7. 完成设置后,点击页面底部的Generate token(生成令牌)按钮。

注意:生成的访问令牌将显示在屏幕上,请确保复制该令牌并妥善保存。一旦离开该页面,将无法再次查看完整的访问令牌。

1.2 Git安装

Debian:

bash
sudo apt install git

Fedora:

bash
sudo dnf install git

可通过git --version 命令查看,正常输出Git版本号即安装成功。

1.3 配置用户名和邮箱名

命令如下:

bash
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

配置完后可以通过以下命令查看:

bash
git config user.name
git config user.email 

1.4 配置SSH公钥

创建公钥文件,生成的公钥文件会保存在本机的~/.ssh目录下:

bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

然后三步询问直接回车即可(连续三次回车)。

创建完成后进~/.ssh目录,(将公钥即id_rsa.pub的内容)复制出来:

bash
cd ~/.ssh
cat id_rsa.pub

如果进入该目录时提示No such file or directory,自己手动创建一个即可:mkdir ~/.ssh

将公acee放入GitHub,以ssh-rsa开头

git-ssh.webp
git-ssh.webp

二、开始上传

  1. 2020年10月1日后,Github会将所有新建的仓库的默认分支从master修改为main
  2. 初始化仓库后:git branch -m main 把仓库名改为main,如果需要推送其他分支,改成需要推送的分支名。

终端进入我们需要上传项目所在的文件夹,使用Git的初始化命令:

bash
git init # 初始化一个新的Git仓库

上传之前,我们需要添加上传的文件,这里我们要上传当前文件夹内的所有文件:

bash
git add ./ # 把文件添加到暂存区

查看当前项目的分支与添加文件情况:

bash
git status

提交暂存区的文件到版本库:

bash
git commit -m "提交项目相关信息" # 把暂存区内容提交到本地仓库

添加创建的Git仓库,命名为origin 远程仓库示例:

git-repo.webp
git-repo.webp
bash
git remote add origin git@github.com:Linux-qitong/hexo-theme-solitude.git
# 添加远程仓库地址,如果显示fatal:远程 origin 已经存在,可以先删除本地仓库和远程仓库的连接,再进行连接
git remote rm origin
git remote add origin git@github.com:Linux-qitong/hexo-theme-solitude.git

使用push指令进行上传。

bash
git push -u origin main # git push <远程仓库名> <远程分支名> 这里origin是默认远程仓库别名,main是分支名

如果是采用https url 会提示输入:

bash
username:Your Name
password:申请的Personal access tokens

再次刷新GitHub上传成功。

三、解决方案

下面是一些常见的解决方案来修复这些错误:

3.1 添加远程分支追踪

在新的代码仓库中,需要配置远程分支追踪:

bash
git branch --set-upstream-to=origin/main main

3.2 允许无关的历史合并

遇到了fatal:refusing to merge unrelated histories.

通常是因为本地代码仓库和远程代码仓库之间存在不同的提交历史,可使用以下命令:

bash
git pull origin main --allow-unrelated-histories # 这个命令将允许合并无关的历史

3.3 强制推送修改(多人仓库不推荐)

如果遇到:Updates were rejected because the remote contains work that you do not have locally.

这说明远程代码仓库中包含了本地仓库没有的更改。 可使用以下命令:

bash
git push origin main --force # 强制推送本地的更改,并覆盖远程代码仓库

3.4 遇到fatal: Exiting because of unfinished merge.

3.4.1 如果想完成这个合并,解决所有可能存在的冲突:
bash
git commit -m “Complete merge”
3.4.2 如果想取消合并:
bash
git merge --abort
3.4.3 一旦合并完成或取消,可再次尝试推送更改:
bash
git push origin main

四、命令扩展

4.1 创建推送标签:

bash
git tag -a v1.1 -m "Version 1.1" # 创建一个标签,1.1版本

4.2 将刚刚创建的标签推送到远程仓库:

bash
git push origin v1.1 

4.3 创建新分支:

bash
git checkout -b <新分支名> # 创建新分支

4.4 推送新分支:

bash
git push origin <新分支名> # 推送文件到新分支