Git版本控制

分布式管理工具,流程图:

(一)git工作流程图

从一般开发者的角度来看,使用Git的工作流程是:

  1. 克隆远程库:从远程库上克隆完整的Git仓库(包括代码和版本信息)到本地;
  2. 在本地库上修改代码:在本地库上根据不同的开发目的,创建分支,修改代码;
  3. 提交到分支:在本地分支上提交代码;
  4. 把修改合并到本地主分支:在本地库上提交更新,也就是说,把修改合并到本地主分支;
  5. 把远程库合并到本地主分支:把远程库上的最新代码fetch下来,跟本地主分支合并,如果存在冲突,那么解决冲突。
  6. 把本地主分支提交到远程库:生成补丁(patch),把补丁发送给远程库。

(二)git常用命令

添加文件和修改提交文件

一、核心场景说明

Git 中「添加文件」和「修改提交文件」是最基础的版本控制操作,核心分为 新文件提交已追踪文件修改后提交 两类场景,以下是全流程实操步骤和对应代码。

二、前置准备
  1. 初始化:

    bash 复制代码
    # 场景1:本地新建仓库(首次使用)
    mkdir git-demo && cd git-demo  # 创建并进入仓库目录
    git init  # 初始化Git仓库(生成.git隐藏目录)
    
    # 场景2:克隆远程仓库(已有仓库)
    git clone https://gitee.com/xxx/git-demo.git  # 替换为实际远程地址
    cd git-demo  # 进入克隆后的仓库目录
  2. 配置用户信息(首次使用 Git 必须配置):

    bash 复制代码
    git config --global user.name "你的用户名"
    git config --global user.email "你的邮箱@xxx.com"
三、场景 1:提交新文件(从未被 Git 追踪的文件)

步骤 1:创建新文件(实操示例)

bash 复制代码
# 创建空的readme.txt文件(Windows需在Git Bash执行,Linux/Mac直接执行)
touch readme.txt  

# (可选)向readme.txt写入内容(避免文件为空,方便后续验证)
echo "Git文件提交流程:工作区 → 暂存区 → 版本库" > readme.txt

步骤 2:git status 查看文件状态(确认未被追踪)

bash 复制代码
git status  # 查看工作区状态
# 输出结果(关键信息):
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#         README.md
#         test.py
# 说明:Untracked表示文件未被Git追踪,需先add到暂存区

步骤 3:git add将文件添加到暂存区

bash 复制代码
# 方式1:添加单个文件(推荐,精准控制)
git add README.md  # 添加README.md到暂存区
git add test.py    # 添加test.py到暂存区

# 方式2:添加当前目录下所有未追踪/修改的文件(批量操作)
git add .  # 注意:. 代表当前目录,会添加所有变更(新文件+修改文件)

# 方式3:添加指定类型文件(如所有.py文件)
git add *.py

# 方式4:添加目录(含子目录所有文件)
git add src/  # 添加src目录下所有文件

步骤 4:确认暂存区状态

bash 复制代码
git status
# 输出结果(关键信息):
# Changes to be committed:
#   (use "git restore --staged <file>..." to unstage)
#         new file:   README.md
#         new file:   test.py
# 说明:new file表示文件已进入暂存区,等待提交到版本库

步骤 5:将暂存区文件提交到版本库(git commit)

bash 复制代码
# 方式1:基础提交(必须写提交说明,否则报错)
git commit -m "feat: 新增README.md和test.py文件"  # -m后为提交备注,简洁描述变更

# 方式2:提交时补充详细说明(多行备注)
git commit  # 不加-m会打开默认编辑器(如Vim),可写多行提交说明
# Vim编辑器操作:
# 1. 输入第一行:feat: 新增README.md和test.py文件(标题)
# 2. 空一行,输入详细说明:如"README记录Git提交流程,test.py为测试文件"
# 3. 按Esc,输入:wq保存并退出

# 方式3:跳过暂存区,直接提交已追踪文件(仅适用于已追踪文件,新文件无效)
# 注意:新文件必须先add,此命令仅针对已追踪文件的修改
git commit -am "feat: 新增xxx"  # -a = --all,自动add已追踪的修改文件

步骤 6:验证提交结果

bash 复制代码
git log  # 查看提交日志
# 输出结果(关键信息):
# commit 8f9e7d6543210abcdef1234567890abcdef12345 (HEAD -> master)
# Author: 你的用户名 <你的邮箱@xxx.com>
# Date:   Wed Dec 18 10:00:00 2024 +0800
# 
#     feat: 新增README.md和test.py文件

git status  # 再次查看状态
# 输出:nothing to commit, working tree clean(工作区干净,无未提交变更)
四、场景 2:修改已被 Git 追踪的文件(文件已提交过,后续修改)

步骤 1:修改已追踪的文件(实操示例)

bash 复制代码
# 方式1:命令行修改文件内容
echo "## 1. 添加文件流程" >> README.md  # 向README.md追加内容

# 方式2:手动修改文件
# 打开test.py,修改内容为:
# print("Git文件提交测试")
# print("修改后新增行")

步骤 2:查看修改状态

bash 复制代码
git status
# 输出结果(关键信息):
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git restore <file>..." to discard changes in working directory)
#         modified:   README.md
#         modified:   test.py
# 说明:modified表示文件已被追踪,且内容有修改,但未添加到暂存区

步骤 3:可选:查看文件具体修改内容(git diff)

bash 复制代码
# 查看单个文件的修改差异
git diff README.md
# 输出结果(关键信息):
# diff --git a/README.md b/README.md
# index e69de29..a263d70 100644
# --- a/README.md
# +++ b/README.md
# @@ -0,0 +1,2 @@
# +# Git文件提交示例
# +## 1. 添加文件流程
# 说明:+表示新增行,-表示删除行(此处无删除)

# 查看所有修改文件的差异
git diff

步骤 4:将修改后的文件添加到暂存区

bash 复制代码
# 方式1:单个文件添加
git add README.md

# 方式2:批量添加所有修改文件
git add .

# 方式3:仅添加文件的部分修改(精准提交,进阶用法)
git add -p test.py  # 交互式选择要提交的修改块
# 交互选项说明:
# y: 确认提交该块 | n: 跳过该块 | s: 拆分块 | q: 退出 | a: 提交所有块

步骤 5:提交修改到版本库

bash 复制代码
# 基础提交(推荐)
git commit -m "fix: 修改README.md补充添加文件流程,更新test.py内容"

# 进阶:修改最后一次提交(若提交后发现漏改/备注写错)
# 场景:刚提交完,想补充修改内容或修正提交备注
git add 漏加的文件.txt  # 先添加漏改的文件
git commit --amend -m "修正后的提交备注"
# 注意:--amend会覆盖最后一次提交记录,已推送到远程的提交禁止使用!
五、场景 3:撤销操作(实操中常见错误修正)

1. 撤销工作区的修改(文件未 add)

bash 复制代码
# 场景:修改了文件,但还没git add,想恢复到上一次提交的状态
git restore 文件名  # Git 2.23+版本(推荐)
# 或旧版本命令:
git checkout -- 文件名

# 示例:撤销test.py的修改
git restore test.py

2. 撤销暂存区的文件(已 add,未 commit)

bash 复制代码
# 场景:文件已git add到暂存区,想撤回到工作区
git restore --staged 文件名  # Git 2.23+版本
# 或旧版本命令:
git reset HEAD 文件名

# 示例:撤销README.md的暂存状态
git restore --staged README.md

# 撤销后,文件回到「未追踪/已修改未add」状态,可重新操作

3. 撤销已提交的修改(已 commit,未 push)

bash 复制代码
# 场景:提交后发现错误,想回退到上一个版本(保留修改)
git reset --soft HEAD^  # 回退版本,修改保留在暂存区
# 或(彻底放弃修改,谨慎使用)
git reset --hard HEAD^  # 回退版本,工作区/暂存区修改全部清空

# 说明:HEAD^ 代表上一个版本,HEAD~2 代表上两个版本,以此类推
六、完整实操流程总结(命令速查)
bash 复制代码
# 1. 初始化仓库
mkdir git-demo && cd git-demo
git init
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

# 2. 创建并添加新文件
touch README.md test.py
git add README.md test.py

# 3. 首次提交
git commit -m "feat: 新增README和test.py基础文件"

# 4. 修改文件并提交
echo "## Git提交步骤" >> README.md
git add README.md
git commit -m "docs: 补充README的提交步骤说明"

# 5. 查看提交记录
git log --pretty=oneline  # 简洁查看提交历史

(三)Git 版本回退与撤销

1.查看日志记录

现在我已经对readme.txt文件做了三次修改了,那么我现在想查看下历史记录,如何查呢?我们现在可以使用命令 git log 演示如下所演示

git log命令显示从最近到最远的显示日志,我们可以看到最近三次提交

如果嫌上面显示的信息太多的话,我们可以使用命令 git log pretty=oneline 演示如下:

2.Git 版本回退与撤销

常用撤销 / 回退命令速查表

操作场景 推荐命令
撤销工作区修改 git restore 文件名
撤销暂存区修改 git restore --staged 文件名
回退版本(保留暂存区) git reset --soft 版本号/HEAD^
回退版本(保留工作区) git reset 版本号/HEAD^
强制回退版本(清空修改) git reset --hard 版本号/HEAD^
找回 hard 回退的版本 git refloggit reset --hard 版本号
修正最后一次 commit git commit --amend -m "新备注"
安全撤销远程提交 git revert 版本号git push

3.删除文件

git rm test.txt

删除的文件直接进入暂存区(如果使用rm删除不在暂存区,需要git add才会进入暂存区。如果进入暂存区可以退回工作区,使用下面命令 git reset HEAD test.txt,提交之后文件被删除。)

4.总结

bash 复制代码
########################################################################
# 仓库初始化
########################################################################
# 创建目录(git_test01)并在目录下打开gitbash
# (手动操作:在文件资源管理器中创建文件夹,右键选择"Git Bash Here")

# 初始化git仓库
git init


########################################################################
# 创建文件并提交
########################################################################
# 目录下创建文件 file01.txt
# (手动操作:在Git Bash中执行 touch file01.txt,或右键新建文本文档)

# 将修改加入暂存区
git add .

# 将修改提交到本地仓库,提交记录内容为:commit 001
git commit -m 'commit 001'

# 查看日志
git log


########################################################################
# 修改文件并提交
########################################################################
# 修改file01的内容为:count=1
# (手动操作:打开file01.txt,输入内容"count=1"并保存)

# 将修改加入暂存区
git add .

# 将修改提交到本地仓库,提交记录内容为:update file01
git commit -m 'update file01'

# 查看日志
git log

# 以精简的方式显示提交记录
git log --pretty=oneline  # 注:原文档中的"git-log"是简写,实际命令是"git log --pretty=oneline"


########################################################################
# 将最后一次修改还原
########################################################################
# 查看提交记录
git log --pretty=oneline

# 找到倒数第2次提交的commitID
# (执行git log后,复制"commit 001"对应的版本号,例如:abc123)

# 版本回退
git reset [倒数第2次的commitID] --hard
相关推荐
好好研究2 小时前
Git - 多人协作流程
git·gitee
_OP_CHEN3 小时前
【Git原理与使用】(五)Git 多人协作:从分支协作到冲突解决,团队开发效率翻倍秘籍
linux·运维·git·团队开发·运维开发·企业级组件·git多人协作
wangjialelele5 小时前
git工作原理、个人使用到多人协作开发与git FLOW模型
c语言·c++·git·团队开发·个人开发
{Hello World}5 小时前
Git入门指南:从零掌握版本控制
git
量子炒饭大师5 小时前
一天一个计算机知识——【编程百度】向上取整
c语言·数据结构·c++·git·github
白里透白的小白6 小时前
复盘 Git+GitHub SSH 配置:从权限报错到免密推送的全流程解决方案
git·ssh·github·版本控制
长安城没有风6 小时前
在 IntelliJ IDEA 中高效使用 Git 的实用指南
java·git·intellij-idea
Zaki_gd7 小时前
【GIT】-- gitignore已经提交的文件
git
_OP_CHEN8 小时前
【Git原理与使用】(六)Git 企业级开发模型实战:从分支规范到 DevOps 全流程落地
大数据·linux·git·gitee·项目管理·devops·企业级组件