0. 安装 Git
在 Ubuntu 环境下,使用 apt 包管理器安装 Git,并通过查看版本号确认安装成功。
bash
sudo apt install git
git version # 查看版本确认安装成功
1. 配置用户名邮箱
首次使用 Git 前,需要配置全局用户名和邮箱,后续所有提交都会带上这些信息。
bash
git config --global user.name "testuser"
git config --global user.email "test@126.com"
2. 创建项目,初始化本地仓库
创建一个项目目录,并在其中执行 git init 将其初始化为 Git 仓库。初始化后目录下会生成隐藏的 .git 文件夹,用于存放版本控制数据。
bash
mkdir git_demo
cd git_demo
git init # 初始化为git仓库,生成隐藏文件夹 .git
ls -a # 可以看到 .git
3. 文件操作、add、commit、status、log
创建代码文件,通过 git status 观察文件状态变化,使用 git add 将文件加入暂存区,再通过 git commit 提交到本地仓库。
bash
# 创建代码文件
vi main.c
main.c写入:
#include <stdio.h>
int main(){
return 0;
}
git status # 此时main.c状态:Untracked 未跟踪
git add main.c # 加入暂存区,状态变为Staged
git status
git commit -m "版本1:基础main框架" # 提交到本地仓库
git log # 查看提交日志
git log --pretty=oneline # 单行简洁查看日志
4. git diff 查看差异;git checkout 丢弃工作区修改
修改文件后,使用 git diff HEAD 对比工作区与最新提交的差异;若想放弃修改,使用 git checkout 恢复到仓库版本。
bash
# 修改main.c
vi main.c
# 添加一行 #include <stdlib.h>
git diff HEAD # 对比工作区和最新提交,能看到+新增行
git status # Modified 已修改,未暂存
git checkout main.c # 丢弃工作区修改,恢复到仓库版本
cat main.c # 刚才新加的内容消失
5. git reset HEAD filename:取消暂存
当文件已加入暂存区但想撤销暂存时,使用 git reset HEAD 将改动保留在工作区,状态从 Staged 变回 Modified。
bash
vi main.c
# 修改main.c,增加printf语句
git add main.c # 添加到暂存区 Staged
git status
git reset HEAD main.c # 撤销暂存,改动保留在工作区,状态变回Modified
git status
6. git rm 删除文件
使用 git rm 删除文件,删除操作会进入暂存区,提交后文件从仓库中移除。
bash
git add main.c
git commit -m "版本2:添加printf打印"
git rm main.c # 删除文件,改动进入暂存
git status
git commit -m "版本3:删除main.c文件"
ls # 目录看不到main.c
7. git reflog + git reset --hard 版本回退
git reflog 可以查看所有操作记录,拿到各个 commit 编号;git reset --hard HEAD^ 可回退到上一个提交版本。
bash
git reflog # 查看所有操作记录,可以拿到各个commit编号
# HEAD@{0}: commit: 版本3:删除main.c文件
# HEAD@{1}: commit: 版本2:添加printf打印
# HEAD@{2}: commit (initial): 版本1:基础main框架
HEAD^ 代表上一个版本,回退到上一个提交
git reset --hard HEAD^
ls # main.c回来了!
⚠️
git reset --hard会丢弃本地未保存改动,生产环境谨慎!
8. 分支全套实操:创建、切换、合并、冲突
分支是 Git 的核心能力。先查看当前分支,创建并切换到 dev 分支进行修改,再切回 master 分支制造冲突,最后合并并解决冲突。
bash
# 查看分支,默认只有master
git branch
git branch dev # 创建dev分支
git branch # *代表当前分支,现在*在master
git checkout dev # 切换到dev分支
git branch
在dev分支修改main.c
vi main.c
dev分支写:printf("来自dev分支\n");
git add main.c
git commit -m "dev分支:增加dev打印"
git checkout master # 切回master分支
master分支修改同一个文件的同一行,制造冲突
vi main.c
master分支写:printf("来自master分支\n");
git add main.c
git commit -m "master分支:增加master打印"
在master分支合并dev,触发冲突
git merge dev
提示自动合并冲突!main.c有冲突
解决冲突
打开 main.c,Git 会标记冲突标记 <<<<<<< ======= >>>>>>>。手动修改文件,删掉冲突标记,保存,然后提交。
bash
git add main.c
git commit -m "解决dev与master合并冲突"
git log --graph # 图形化查看分支合并历史
删除不需要的分支:
bash
git checkout master
git branch -d dev # 删除dev分支
9. git stash 贮藏现场
场景:代码写一半,还不想提交,需要切换别的分支处理 bug。此时直接切换分支会报错,使用 git stash 贮藏当前工作现场即可。
bash
# 在master分支修改main.c,不提交
vi main.c
# 随便写几行测试代码,不要git add
git status
现在直接切换分支会报错,本地修改会被覆盖
git checkout dev 会报错!
git stash # 贮藏当前工作现场,工作区变干净
git status
git stash list # 查看保存的贮藏列表
git checkout dev # 现在可以正常切换分支
在dev分支做一点修改
vi main.c
git stash # dev也贮藏一份
git stash list # 现在有两个stash记录
git checkout master
git stash pop stash@{1} # 恢复master那一份贮藏,pop取出之后列表就删除这条记录
git stash list
提示:尽量回到当初贮藏的分支再 pop,避免莫名其妙冲突。
10. SSH 密钥配置
生成 RSA 密钥对,将公钥内容复制并粘贴到 Gitee/GitHub 的 SSH 公钥设置页面,然后测试连通性。
bash
# 生成rsa密钥对
ssh-keygen -t rsa -C "test@126.com"
# 一路回车,不需要密码
查看公钥,复制全部内容
cat ~/.ssh/id_rsa.pub
把复制的公钥粘贴到 Gitee/GitHub 的 SSH 公钥设置页面。连通测试:
bash
ssh -T git@gitee.com
# 出现Hi xxx! 代表成功
11. 远程仓库操作
在 Gitee 网页新建一个空仓库,复制 SSH 地址,将本地仓库关联远程仓库并推送。
bash
# 将本地仓库关联远程仓库
git remote add origin git@gitee.com:xxx/git_demo.git
git push -u origin master # -u 设置跟踪关系,推送本地master到远程
git pull origin master # 拉取远程更新到本地
git clone git@gitee.com:xxx/git_demo.git # 演示克隆(可以新建文件夹执行)
12.知识点对照表
| 命令 | 作用 |
|---|---|
git init |
初始化仓库 |
git add |
加入暂存区 |
git commit -m "***" |
提交本地仓库 |
git status |
查看状态 |
git diff HEAD |
查看改动差异 |
git checkout filename |
丢弃工作区修改 |
git reset HEAD filename |
取消暂存 |
git rm |
删除文件 |
git log / --pretty=oneline |
查看提交记录 |
git reflog |
全部操作日志 |
git reset --hard HEAD^ |
版本回退 |
git branch |
查看 / 创建 / 删除分支 |
git checkout |
切换分支 |
git merge |
合并分支,解决冲突 |
git log --graph |
图形分支历史 |
git stash / stash list / pop |
贮藏现场 |
ssh-keygen |
生成密钥 |
git push / pull / clone |
远程推送拉取克隆 |
13.重要易错总结
- 切换分支:要么 commit 提交,要么
git stash贮藏,否则报错。 git reset --hard会丢本地未提交修改,不要随便执行。- merge 出现冲突必须手动修改文件,add+commit 完成合并。
- SSH 推送必须把公钥配置到码云 / GitHub 网页,否则 push 失败。