文章摘要
青稚Ai

1. 准备工作

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

1.1 申请 Personal access tokens

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

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

1.2 git安装

Debian:

1
sudo apt install git

Fedora:

1
sudo dnf install git

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

1.3 配置用户名和邮箱名

命令如下:

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

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

1
2
git config user.name
git config user.email

1.4 配置SSH公钥

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

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

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

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

1
2
cd ~/.ssh
cat id_rsa.pub

如果进入该目录时提示No such file or directory,自己手动创建一个即可:mkdir ~/.ssh
将公匙放入GitHub,以ssh-rsa开头
git-ssh.webp

2. 开始上传

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

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

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

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

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

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

1
git status

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

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

添加创建的git仓库,命名为origin
远程仓库示例:
git-repo.webp

1
2
3
4
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指令进行上传。

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

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

1
2
username:Your Name
password:申请的Personal access tokens

再次刷新GitHub上传成功。

3. 解决方案

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

3.1 添加远程分支追踪

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

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

3.2 允许无关的历史合并

遇到了fatal: refusing to merge unrelated histories.

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

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

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

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

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

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

3.4 遇到fatal: Exiting because of unfinished merge.

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

4. 命令扩展

4.1 创建推送标签:

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

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

1
git push origin v1.1 

4.3 创建新分支:

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

4.4 推送新分支:

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