Git 入门实操实例:从安装到远程仓库全流程

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.重要易错总结

  1. 切换分支:要么 commit 提交,要么 git stash 贮藏,否则报错。
  2. git reset --hard 会丢本地未提交修改,不要随便执行
  3. merge 出现冲突必须手动修改文件,add+commit 完成合并。
  4. SSH 推送必须把公钥配置到码云 / GitHub 网页,否则 push 失败。
相关推荐
llilian_161 小时前
时间统一系统 高精度时统设备选购避坑指南 授时系统
大数据·网络·人工智能·功能测试·单片机·嵌入式硬件·51单片机
飘羽7152 小时前
多方联动筑防线 金融宣讲护民生 ——中邮保险吉林分公司“金融教育宣传周”走进文苑社区
大数据
TDengine (老段)2 小时前
TDengine 常见问题 TOP2
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
醉颜凉2 小时前
Canal 与 Elasticsearch 实时同步:增量索引更新、删除处理与全量重建方案
elasticsearch·canal·数据同步·增量更新·全量重建
babe小鑫2 小时前
生物统计学专业校招:SAS、R、Python学习顺序实用指南
python·学习·r语言
llilian_162 小时前
标准时间间隔发生器应用解决方案 脉冲发生器 时间测量仪
大数据·网络·人工智能·功能测试·单片机·嵌入式硬件·51单片机
世岩清上2 小时前
展厅数字内容同质化严重,怎样打造专属叙事风格?
大数据·前端·javascript·人工智能·html·音视频·展厅改造
David猪大卫3 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
涤生大数据3 小时前
有了 Java UDF,Doris 为什么还要 Python UDF
大数据