1 准备工作

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

1.1 申请 Personal access tokens

SSH URL忽略此步骤.
HTTPS URL 在push的时需要验证用户名和Personal access tokens.

  1. 点击右上角的头像,然后选择 “Settings”(设置).
    github-settings
  2. 在左侧导航栏中,选择 “Developer settings”(开发者设置).
    github-token
  3. 在 “Developer settings” 页面上,选择 “Personal access tokens”(个人访问令牌)
  4. 在 “Personal access tokens” 页面上,点击 “Generate new token”(生成新令牌按钮)
    github-tokens
  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

2 开始上传

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

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

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

上传之前,我们需要添加上传的文件,这里我们要上传当前文件夹内的所有文件
1
git add ./ # 把文件添加到暂存区

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

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

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

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 解决方案

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

  1. 添加远程分支追踪
    在新的代码仓库中,需要配置远程分支追踪:
    1
    git branch --set-upstream-to=origin/main main
  2. 允许无关的历史合并
    遇到了fatal: refusing to merge unrelated histories.通常是因为本地代码仓库和远程代码仓库之间存在不同的提交历史,可使用以下命令:
    1
    git pull origin main --allow-unrelated-histories # 这个命令将允许合并无关的历史
  3. 强制推送修改(多人仓库不推荐)
    如果遇到:Updates were rejected because the remote contains work that you do not have locally.这说明远程代码仓库中包含了本地仓库没有的更改. 可使用以下命令:
    1
    git push origin main --force # 强制推送本地的更改,并覆盖远程代码仓库
  4. 遇到fatal: Exiting because of unfinished merge.
    如果想完成这个合并,解决所有可能存在的冲突:
    1
    git commit -m “Complete merge”
    如果想取消合并:
    1
    git merge --abort
    一旦合并完成或取消,可再次尝试推送更改:
    1
    git push origin main

4 命令扩展

  1. 创建推送标签
    1
    git tag -a v1.1 -m "Version 1.1" # 创建一个标签,1.1版本
    将刚刚创建的标签推送到远程仓库,命令格式:
    1
    git push origin v1.1 
  2. 创建并推送新分支
    1
    git checkout -b <新分支名> # 创建新分支
    1
    git push origin <新分支名> # 推送文件到新分支
    3.