Git 最常用操作和原理

文章目录

  • [Git 最常用操作(小白版)](#Git 最常用操作(小白版))
    • [1. 拿代码(第一次用)](#1. 拿代码(第一次用))
    • [2. 同步最新代码(每天必用)](#2. 同步最新代码(每天必用))
    • [3. 查看当前状态](#3. 查看当前状态)
    • [4. 把修改的文件加入提交(暂存)](#4. 把修改的文件加入提交(暂存))
    • [5. 提交代码(本地保存)](#5. 提交代码(本地保存))
    • [6. 推送到远程仓库(让别人能看到)](#6. 推送到远程仓库(让别人能看到))
  • 分支操作(团队开发最核心)
    • [7. 查看所有分支](#7. 查看所有分支)
    • [8. 新建分支](#8. 新建分支)
    • [9. 切换分支](#9. 切换分支)
    • [10. 新建并直接切换过去](#10. 新建并直接切换过去)
    • [11. 把别的分支合并到当前分支](#11. 把别的分支合并到当前分支)
  • 撤销/回退(经常用到)
    • [12. 放弃某个文件的修改(还原)](#12. 放弃某个文件的修改(还原))
    • [13. 撤销 add](#13. 撤销 add)
    • [14. 回退到上一个版本](#14. 回退到上一个版本)
  • 查看日志
    • [15. 看提交历史](#15. 看提交历史)
  • 第一次提交
  • 怎么设置自己要提交的仓库
    • [0. 先在网页上建好空仓库](#0. 先在网页上建好空仓库)
    • [1. 查看当前远程(有没有已经绑定的仓库)](#1. 查看当前远程(有没有已经绑定的仓库))
    • [2. 如果已经有远程,先删掉旧的(可选)](#2. 如果已经有远程,先删掉旧的(可选))
    • [3. 添加你自己的远程仓库(关键)](#3. 添加你自己的远程仓库(关键))
    • [4. 确认设置成功](#4. 确认设置成功)
    • [5. 提交并推送(把代码发上去)](#5. 提交并推送(把代码发上去))
    • 常见问题
  • [README 和 License](#README 和 License)
  • 拉取更新文件
  • 最常用的一套完整流程(你每天都会这么写)
  • 一句话总结所有操作

虽然Codex可以直接帮进行git操作,但是git的原理大家还是需要知道的。

Git 最常用操作(小白版)

开发流程顺序排好,从克隆到提交到切换分支,全是日常用的。

1. 拿代码(第一次用)

bash 复制代码
git clone 仓库地址

把远程代码下载到本地。

2. 同步最新代码(每天必用)

bash 复制代码
git pull

把别人最新改的代码拉到你本地。

3. 查看当前状态

bash 复制代码
git status

看你改了哪些文件、哪些没提交。

4. 把修改的文件加入提交(暂存)

bash 复制代码
git add 文件名

或一次性加所有:

bash 复制代码
git add .

5. 提交代码(本地保存)

bash 复制代码
git commit -m "写你改了啥"

只是保存在你电脑上,还没发到服务器。

6. 推送到远程仓库(让别人能看到)

bash 复制代码
git push

发到 GitHub/GitLab 上,之后才能开 PR

分支操作(团队开发最核心)

7. 查看所有分支

bash 复制代码
git branch

8. 新建分支

bash 复制代码
git branch 分支名

9. 切换分支

bash 复制代码
git checkout 分支名

或新版命令:

bash 复制代码
git switch 分支名

10. 新建并直接切换过去

bash 复制代码
git checkout -b 新分支名

11. 把别的分支合并到当前分支

bash 复制代码
git merge 要合并进来的分支

(PR 本质就是网页版 merge,更安全)

撤销/回退(经常用到)

12. 放弃某个文件的修改(还原)

bash 复制代码
git checkout -- 文件名

13. 撤销 add

bash 复制代码
git reset HEAD 文件名

14. 回退到上一个版本

bash 复制代码
git reset --hard HEAD^

查看日志

15. 看提交历史

bash 复制代码
git log

第一次提交

报错

fatal: not a git repository

一、报错到底啥意思?

复制代码
fatal: not a git repository

翻译:

致命错误:这不是一个 git 仓库(找不到 .git 文件夹)

你现在的路径:

复制代码
/e/0WHXY/keyan/versionFinally/handpose-virtualview

这个文件夹里没有初始化 Git ,所以你不能用 git addgit commit 这些命令。

二、怎么解决?(2 种情况)

情况 1:你是第一次用这个文件夹

你需要先初始化 Git

bash 复制代码
git init

然后再执行:

bash 复制代码
git add .

就不会报错了。(这些操作直接在powershell操作即可)

情况 2:这个文件夹本来就是从 GitHub/GitLab 下载的项目

那说明你进错文件夹了

你要进入项目根目录 (里面有 .git 文件夹的那一层)。

你可以先看一下当前目录有没有 .git

bash 复制代码
ls -a

如果看不到 .git,说明你进错文件夹了。

三、最简单的解决办法(直接复制运行)

bash 复制代码
git init
git add .

99% 的情况这样就好了。

四、一句话记住

没有 git init / 没有 clone 的文件夹,不能用 git 命令!

怎么设置自己要提交的仓库

0. 先在网页上建好空仓库

去 GitHub/Gitee 等:

  • 新建仓库(New repository)
  • 仓库名和你的项目名一致
  • 不要勾选 "Initialize with README"(否则后面容易冲突)
  • 创建后复制仓库地址(HTTPS 或 SSH)
    • HTTPS:https://github.com/你的名字/你的仓库.git
    • SSH:git@github.com:你的名字/你的仓库.git

1. 查看当前远程(有没有已经绑定的仓库)

bash 复制代码
git remote -v
  • 有输出:说明已经关联了远程仓库
  • 提示"not found":还没关联

2. 如果已经有远程,先删掉旧的(可选)

bash 复制代码
git remote rm origin

3. 添加你自己的远程仓库(关键)

bash 复制代码
git remote add origin 你的仓库地址

示例(换成你自己的):

bash 复制代码
git remote add origin https://github.com/wanxiangan/handpose-virtualview.git
  • origin 是远程仓库的默认别名,固定用这个就行

4. 确认设置成功

bash 复制代码
git remote -v

输出类似:

复制代码
origin  https://github.com/xxx/xxx.git (fetch)
origin  https://github.com/xxx/xxx.git (push)

说明拉取、推送都指向你自己的仓库

5. 提交并推送(把代码发上去)

你已经 git add . 了,直接:

bash 复制代码
git commit -m "初始化:handpose 项目"
git branch -M main
git push -u origin main
  • 第一次 push 用 -u,以后直接 git push 即可
  1. 第一个:git commit -m "xxx"
    这里的 -m = message
    意思:本次提交的说明文字
  2. 第二个:git branch -M main
    这里的 -M = Move(重命名)+ 强制覆盖
    意思:把当前分支改名叫 main
  3. -u 是什么?(最关键)
    -u = --set-upstream
    作用:把本地 main 分支 和 云端 main 分支绑定在一起!

常见问题

  • 报错"fatal: remote origin already exists":先执行 git remote rm origin
  • 每次 push 要输密码:推荐用 SSH 地址,配置一次免密

README 和 License

一、README 是什么?

README 就是完全根据你仓库里的 README.md 文件生成的!

  • GitHub 会自动读取仓库根目录下的 README.md
  • 把它渲染成漂亮的 Markdown 页面,展示在仓库首页
  • 文件名大小写不敏感,比如 Readme.md 也能识别,但标准写法是全小写 README.md

二、License 又是根据什么来的?

License 也是根据你仓库根目录下的 LICENSE 文件生成的!

和 README 逻辑几乎一样:

  • GitHub 会自动识别仓库根目录下的 LICENSE 文件(也可以是 LICENSE.txt 等)
  • 把它渲染成专门的 License 标签页,显示在 README 旁边
  • 同时会自动解析文件内容,告诉你这是什么类型的开源协议(比如 MIT、Apache 2.0 等)

你截图里的内容,就是这个 LICENSE 文件的原文。

三、补充一个关键细节

  • README 是你写的项目说明:介绍项目怎么用、怎么安装、怎么运行
  • LICENSE 是法律协议:规定别人能不能用、能不能改、能不能商用你的代码

它们俩都是纯文本文件 ,你修改本地文件再 git push,GitHub 上的内容就会同步更新。

举个例子

如果你在本地根目录创建了:

复制代码
你的项目/
├── README.md    → 仓库首页显示的内容
└── LICENSE      → 旁边 License 标签页的内容

推送到 GitHub 后,就会自动生成你截图里的两个标签页。

额外小知识

如果新建仓库时,你勾选了「Add a README file」或「Choose a license」,GitHub 会自动帮你生成这两个文件,推送到仓库里。

拉取更新文件

一、最简单:直接拉取(日常 90% 场景)

bash 复制代码
# 先切到你要更新的分支(比如 main)
git checkout main

# 拉取并自动合并远程最新改动
git pull
  • 等价于:git fetch + git merge
  • 成功提示:Fast-forwardAlready up to date
  • 有冲突:会提示 merge conflicts,需要手动解决后再 git add + git commit

二、先看再合并(更安全,推荐新手)

想先看看远程改了什么,再决定要不要合并:

bash 复制代码
# 1. 只下载远程更新,不合并到本地
git fetch origin

# 2. 对比本地和远程差异
git diff origin/main

# 3. 确认没问题再合并
git merge origin/main
  • fetch:只更新本地的"远程镜像",不改动你的工作区
  • 安全:看清楚再合并,不容易出冲突

三、保持提交历史干净(多人协作)

默认 pull 会产生一个"合并提交",用 --rebase 可以把你的提交"移到"远程最新之后,历史是一条直线:

bash 复制代码
git pull --rebase origin main
  • 优点:没有多余合并提交,历史清晰
  • 缺点:有冲突时要逐个解决,适合熟练后用

四、常见问题处理

1. 本地有未提交的修改,拉取报错

bash 复制代码
# 暂存本地修改(临时保存)
git stash

# 拉取
git pull

# 恢复本地修改
git stash pop

2. 想强制覆盖本地(谨慎!会丢本地改动)

bash 复制代码
git reset --hard origin/main
  • ⚠️ 本地所有未推送的提交都会被删掉,只保留远程版本

一句话总结

  • 直接拉取git pull(最快)
  • 安全查看git fetchgit diffgit merge
  • 干净历史git pull --rebase

最常用的一套完整流程(你每天都会这么写)

bash 复制代码
git pull          # 同步最新
git add .         # 加所有修改
git commit -m "修复xxbug"  # 本地提交
git push          # 推到远程

然后去网页 开 PR → 审核 → 合并。

一句话总结所有操作

  • clone:下载代码
  • pull:更新代码
  • add/commit/push:提交代码
  • branch/switch:开分支、切分支
  • merge:合并代码
  • PR:提交合并申请(团队审核用)
相关推荐
大大大大晴天9 小时前
Hudi Metadata Table 与 Hive Sync (HMS)怎么选?
大数据
手可摘星辰77717 小时前
一次线上FlinkCDC异常排查复盘
大数据·flink
大大大大晴天17 小时前
Hudi技术内幕:Metadata Table原理与实践
大数据
武子康2 天前
调查研究-197 FAISS vs Elasticsearch 全面对比:从向量检索、全文搜索到 RAG 选型指南
人工智能·elasticsearch·agent
大大大大晴天2 天前
Hudi技术内幕:深入解析Index索引机制
大数据
阿里云大数据AI技术2 天前
Flink Forward Asia 2026 深圳启幕:Agentic Streaming for AI,开启实时智能新范式
大数据·flink
SelectDB2 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
Elasticsearch3 天前
Elasticsearch ES|QL:现已支持视图、子查询和读取时模式定义
elasticsearch
嘻嘻仙人3 天前
Ubuntu中 git上传自己的项目和二次上传一般流程
git·github
Patrick_Wilson3 天前
Squash Merge 的血缘陷阱:为什么删掉的代码又活了过来
前端·git·程序员