GIT基础操作

首次使用 Git 的基本步骤

0. 初始化本地仓库

在本地文件夹中初始化一个 Git 仓库,这会在该文件夹下创建一个 .git 隐藏目录,用于标记该文件夹为 Git 仓库,以便 Git 进行版本控制。

1
git init

1. 关联远程仓库

将本地仓库与远程仓库建立关联,以便后续的代码推送和拉取操作,如:

1
git remote add origin git@gitee.com:xxx(此处是用户名)/xxx(此处是仓库名).git

2. 设置提交代码时的用户信息

为确保提交的代码身份能够被 Gitee 正确识别,需要执行以下命令完成用户信息的配置:

1
2
git config --global user.name '改为你的昵称'
git config --global user.email 'xxx@xx.com'

3. 配置公钥与私钥

为了能够通过 SSH 协议安全地与远程仓库进行交互,需要生成 SSH 密钥对,并将公钥添加到远程仓库的授权列表中。

1
2
3
4
5
# 生成 RSA 类型的 SSH 密钥对
ssh-keygen -t rsa

# 查看并复制公钥内容(通常用于添加到远程仓库的 SSH 密钥设置页面)
cat ~/.ssh/id_rsa.pub

如将 id_rsa.pub 文件中的内容复制并粘贴到 Gitee 的 SSH 密钥设置页面(地址为:https://gitee.com/profile/sshkeys)的输入框中。

注:如需添加不同的公钥可看本文“如何在 .ssh 文件夹下共存多个 id_rsa 密钥”小节

4. 切换本地分支

将本地分支切换到与将要拉取的远程分支名称相同的分支。这里以 master 分支为例:

1
git checkout master

5. 拉取远程代码

  • git fetch:获取远程仓库的更新信息,但不会自动合并到本地分支。后续需要手动执行合并操作。
1
git fetch
  • git pull:从远程仓库拉取最新代码,并自动合并到当前本地分支。这是 git fetchgit merge 的组合操作。
1
git pull

6. 修改代码

在本地工作目录中对代码进行修改、添加新功能或修复问题等操作。

7. 将修改添加到暂存区

将工作目录中所有已修改或新建的文件添加到暂存区,准备进行提交。

1
git add .

注:此处’.’的含义表示’当前工作目录’,包含当前目录及其子目录以及子母钟所有文件;也可修改此处为指定文件或文件夹

8. 提交更改到本地仓库

将暂存区的更改永久保存到本地仓库,并生成一条提交记录。提交信息应简洁明了地描述本次提交所做的更改。

1
git commit -m "Totoro 202601311430 更新内容详见更新日志"

9. 推送本地分支到远程仓库

将本地分支的提交推送到远程仓库。如果是首次推送某个分支,需要使用 -u 参数建立本地分支与远程分支的跟踪关系;后续推送可以简写为 git push

1
2
3
4
5
# 首次推送分支
git push -u origin develop

# 后续推送(已建立跟踪关系后)
git push

如不出意外,那么到此已实现了对远程仓库文件的拉取与推送。

10. 合并分支

将指定分支的更改合并到当前分支。例如,将 develop 分支合并到 master 分支,需要先切换到 master 分支,然后执行合并操作:

1
2
3
4
5
6
7
8
9
# 切换到 master 分支
git checkout master

# 将 develop 分支合并到 master 分支
git merge develop

# 如果有冲突,解决冲突后,将冲突文件添加到暂存区并提交
git add .
git commit

Git 常用指令

查看提交历史

  • git log:显示完整的提交历史记录,包括提交哈希、作者、日期和提交信息。
1
git log
  • git log --oneline:以单行简短格式显示提交历史,每条记录包含缩写的提交哈希和提交信息,便于快速浏览。
1
git log --oneline

查看 Git 配置

git config --list:显示当前的 Git 配置,包括用户级、系统级和仓库级的所有配置项。

1
git config --list

克隆仓库

git clone 'url':从指定的远程仓库 URL 克隆整个仓库到本地。

1
git clone 'https://gitee.com/xxx(此处是用户名)/xxx(此处是仓库名).git

查看工作目录和暂存区状态

git status:查看工作目录和暂存区的状态,包括已修改未暂存、已暂存未提交、未跟踪文件等信息。

1
git status

添加文件到暂存区

git add .:将工作目录中所有已修改或新建的文件添加到暂存区,准备提交。也可以使用 git add <file> 添加指定文件。

1
git add .

提交更改到本地仓库

git commit -m "初版":将暂存区的更改永久保存到本地仓库,并生成一条提交记录。-m 参数后面必须带有提交信息,否则会打开编辑器强制填写。

1
git commit -m "初版"

分支管理

  • git branch:列出本地所有分支。
1
git branch
  • git branch -r:查看远程所有分支。
1
git branch -r
  • git branch -a:查看本地和远程所有分支。
1
git branch -a
  • git branch xxx:创建新分支(但不切换到新分支)。
1
git branch feature/new-function
  • git branch -m xxx:重命名当前分支。
1
git branch -m old-name new-name
  • git branch -d/D xxx:删除分支。-d 参数用于删除已合并的分支,-D 参数用于强制删除未合并的分支。
1
git branch -d feature/old-function
  • git branch -vv:显示本地分支与远程跟踪分支的关联关系及状态(是否领先/落后)。
1
git branch -vv

切换分支

  • git checkout -b xxx:创建并切换到新分支。
1
git checkout -b bugfix/fix-login
  • git checkout -b develop origin/develop:创建并切换到 develop 分支,同时设置该分支跟踪远程的 origin/develop 分支。
1
git checkout -b develop origin/develop
  • git checkout xxx:切换到指定分支。切换分支时,需确保工作目录没有未提交的修改,否则可能会引发冲突。
1
git checkout master

推送分支到远程仓库

  • git push origin xxx:将本地分支的提交推送到远程仓库。
1
git push origin feature/new-function
  • git push origin develop:推送本地 develop 分支到远程仓库。首次推送需要使用 -u 参数建立跟踪关系,后续可以简写为 git push
1
2
3
4
5
# 首次推送
git push -u origin develop

# 后续推送
git push
  • git push --set-upstream origin develop:将本地 develop 分支推送到远程 origin 仓库,并设置上游跟踪关系(-u--set-upstream 等同)。
1
git push --set-upstream origin develop

拉取远程代码并合并

git pull origin xxx:从远程仓库拉取最新代码并合并到当前分支。这等价于先执行 git fetch 获取远程更新,再执行 git merge 合并到当前分支,可能会触发冲突。

1
git pull origin master

获取远程仓库更新

  • git fetch:获取远程仓库的更新(如新分支、新提交),但不合并到当前分支。后续需要手动执行 git merge origin/xxx 合并更新。
1
git fetch
  • git fetch --all:从所有远程仓库拉取最新数据(如分支、标签等),不合并到当前工作分支,仅更新本地远程跟踪分支。
1
git fetch --all

查看远程仓库信息

git remote -v:列出所有远程仓库的 URL(包括 fetchpush 地址)。

1
git remote -v

合并分支

git merge xxx:将指定分支的更改合并到当前分支。如果在合并过程中两个分支修改了同一文件,会产生冲突,需要手动解决冲突后执行 git addgit commit 完成合并。

1
git merge feature/new-function

分支命名规范

建议采用具有明确语义的前缀来命名分支,以便团队成员能够快速理解分支的用途,提高协作效率。常见的分支命名前缀如下:

  • feature/xxx:用于开发新功能。
  • bugfix/xxx:用于修复问题。
  • docs/xxx:用于文档相关的修改。

提交信息规范

遵循 <类型>: <说明> 的格式编写提交信息,使提交历史更加清晰易读。常见的提交类型包括:

  • feat:表示添加新功能。
  • fix:表示修复问题。
  • docs:表示文档相关的修改。

例如:

1
2
3
feat: 添加用户登录接口
fix: 修复登录页面验证码显示异常问题
docs: 更新项目 README 文件

冲突处理

在合并或拉取代码时,如果两个分支修改了同一文件的相同部分,就会产生冲突。此时需要按照以下步骤解决冲突:

  1. 打开冲突文件,会看到类似以下的标记:
1
2
3
4
5
<<<<<<< HEAD
这是当前分支的代码
=======
这是要合并分支的代码
>>>>>>> branch-name
  1. 手动编辑冲突文件,删除 <<<<<<<=======>>>>>>> 标记,保留正确的代码内容。
  2. 保存冲突文件后,执行 git add 将解决冲突后的文件添加到暂存区。
1
git add <conflict-file>
  1. 执行 git commit 完成合并操作。
1
git commit

如何在 .ssh 文件夹下共存多个 id_rsa 密钥

如果需要在同一台机器上使用多个 Git 账户(如 GitHub、Gitee、GitLab 等),可以通过以下步骤在 .ssh 文件夹下配置多个 id_rsa 密钥:

1. 创建密钥对并指定文件名

使用 ssh-keygen 命令创建新的密钥对,并通过 -f 参数指定密钥文件的名称。例如,为 Gitee 账户创建一个名为 id_rsa_gitee 的密钥对:

1
ssh-keygen -t rsa -f ~/.ssh/id_rsa_gitee

按照提示操作,即可生成对应的私钥文件 id_rsa_gitee 和公钥文件 id_rsa_gitee.pub

2. 配置 .ssh 文件夹下的 config 文件

.ssh 文件夹下新建一个名为 config 的文件(无后缀),并填入以下配置信息。这里给个模板,配置 GitHub、Gitee 和 GitLab 的密钥:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# GitHub配置
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
IdentitiesOnly yes

# Gitee配置
Host gitee.com
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa_gitee
IdentitiesOnly yes

# GitLab配置(可根据实际需求取消注释并修改)
# Host gitlab.com
# HostName gitlab.com
# User git
# IdentityFile ~/.ssh/id_rsa_gitlab
# IdentitiesOnly yes

# 自定义Host(例如自建Git服务器,可根据实际需求取消注释并修改)
# Host my-git-server
# HostName xxx.com # 替换为实际域名/IP
# User git
# IdentityFile ~/.ssh/id_rsa_private
# IdentitiesOnly yes

3. 添加公钥到对应服务

分别打开以 .pub 为后缀的公钥文件,将公钥内容复制并添加到对应服务的 SSH 密钥设置页面。例如,Gitee 的 SSH 密钥设置页面地址为:https://gitee.com/profile/sshkeys

4. 测试连接状态

打开一个终端窗口,输入以下测试指令,验证 SSH 连接是否正常:

1
2
ssh -T git@gitee.com
ssh -T git@github.com

如果连接成功,会返回类似 Hi 你的昵称XX! You've successfully authenticated... 的信息,说明已成功配置并连接。