到底多少次才能学会使用 git

明明已经无数次从本地或服务器把代码备份到 GitHub,但还是记不住到底怎么做

新建 repository

在 GitHub 上为想要上传的内容新建一个空 repository,连 README.md 都不要。没有什么特别的原因,只是我解决不了冲突,怎么改都不对,不如直接建个空库。

检查 git

检查是否安装 git

1
git version

输出应为 git 版本。如果提醒命令不存在,需要安装 git。
Mac 和 Linux 系统的电脑已经预装了git。Windows 系统的电脑可以从官网(https://git-scm.com/downloads )下载相应的版本,安装过程中选择默认选项即可。

配置 git

配置 Git 用户名和邮箱:

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

初始化

打开代码所在的目录,并初始化一个新的Git仓库:

1
2
cd /path/to/your/code
git init

在使用 Git 管理代码时,git init 命令用于在一个目录中初始化一个新的 Git 仓库。这个命令通常在你开始一个新的项目时使用,它会在当前目录创建一个 .git 文件夹,用来存储 Git 仓库的配置信息、对象数据库等。但是,并不是在所有情况下都必须执行 git init
不需要执行 git init:

  • 克隆现有仓库 (git clone <remote-url>)
  • 加入已有的仓库
  • 继承现有的 Git 仓库

添加远程仓库

检查当前 git 是否有远程库:

1
git remote -v

如果已存在 origin,可以执行 git remote remove origin 后,再添加远程库。

将第一步新建的 GitHub 库添加为远程库。假设 GitHub 库 URL 是 https://github.com/yourusername/your-repo.git

1
git remote add origin https://github.com/yourusername/your-repo.git

GitHub 已经不再支持使用密码进行身份验证,而是建议使用个人访问令牌 (Personal Access Token, PAT) 或 SSH 密钥进行身份验证。如果利用 PAT 进行身份验证,则需要执行:

  1. 登录到 GitHub 账户。
  2. 点击右上角的头像,选择 “Settings”。
  3. 在左侧菜单中选择 “Developer settings”。
  4. 选择 “Personal access tokens” -> “Tokens (classic)” -> “Generate new token”。
  5. 为令牌命名并选择所需的权限,通常选择 “repo” 就足够了。
  6. 生成令牌并保存它,因为这是你唯一能看到它的机会。

然后在终端输入以下命令:

1
git remote set-url origin https://<your_token>@github.com/yourusername/your-repo.git

<your_token> 替换为生成的 PAT。

或在一开始添加仓库时,就使用包含 token 的链接:

1
git remote add origin https://<your_token>@github.com/your_username/repository_name.git

添加文件并提交

添加所有文件并提交:

1
2
3
4
5
# 添加当前目录下所有文件,也可添加指定文件
git add .

# commit
git commit -m "commit message"

撤回 commit 或 add

1
2
3
4
5
6
7
8
9
10
11
12
13
# 不删除工作空间改动代码,撤销 commit,并且撤销 git add . 操作
git reset --mixed HEAD^
# 或
git reset HEAD^

# 撤销 commit
# HEAD^的意思是上一个版本,也可以写成 HEAD~1
# 如果想撤回 2 次 commit,可以使用 HEAD~2
git reset --soft HEAD^

# 删除工作空间改动代码,撤销commit,撤销git add .
# 恢复到上一次 commit 后的状态
git reset --hard HEAD^

推送到远程库

将代码推送到 GitHub 仓库:

1
2
3
4
5
6
# 拉取远程仓库中的内容,否则 push 时也会因为未同步远程仓库内容而失败
# 如果远程仓库为空,则不需要这一步
git pull origin main --allow-unrelated-histories

# 将 commit 推送到远程仓库
git push origin main