Git 命令操作完全指南

Git 是现代软件开发中不可或缺的分布式版本控制系统。它不仅能追踪代码变更,还能协调多人协作、管理项目历史。本文从核心概念入手,逐步深入讲解 Git 的基础与高级命令,结合实用场景,帮助您从入门到精通。

一、Git 核心概念

理解 Git 的工作原理是高效使用它的前提。以下是三个核心概念及其关系:

1. 项目目录(工作区)

项目目录是你直接操作的本地文件夹,也叫“工作区”(Working Directory)。它包含代码文件、配置文件等所有内容。Git 不会自动管理这里的任何文件,除非你明确告诉它哪些需要追踪。工作区是你编写代码的起点。

2. 暂存区

暂存区(Staging Area 或 Index)是工作区与 Git 仓库之间的中间层。通过 git add,你可以选择性地将工作区的变更“暂存”到这里,准备提交。暂存区的存在让你可以分步骤组织提交内容,而不是一次性提交所有修改。例如,你可以先暂存部分文件,检查后再提交。

3. Git 仓库

Git 仓库(Repository)是存储项目历史和版本数据的地方。本地仓库位于项目目录下的 .git 文件夹,包含所有提交记录、分支信息等。远程仓库(如 GitHub、GitLab)则是多人协作时的共享存储。通过 git commit,暂存区的更改会被永久记录到本地仓库。

三者关系
  • 工作区 → 暂存区:通过 git add 将修改“暂存”。
  • 暂存区 → 仓库:通过 git commit 将暂存内容提交。
  • 仓库 → 工作区:通过 git checkoutgit restore 恢复文件。

这三层结构是 Git 的核心逻辑,贯穿所有操作。


二、基础命令详解

1. Git 配置(git config)

在使用 Git 前,配置用户身份和偏好是必要步骤。这些设置会影响提交记录和操作体验。

  • git config --global user.name "Your Name"
    设置全局用户名,所有提交都会携带此信息。例如:git config --global user.name "Alice"
  • git config --global user.email "your.email@example.com"
    设置全局邮箱,通常与代码托管平台(如 GitHub)账号一致。例如:git config --global user.email "alice@example.com"
  • git config --global core.editor "vim"
    指定默认编辑器,用于编写提交信息。支持 Vim、Nano、VS Code(需配置路径,如 "code --wait")等。
  • git config --global core.autocrlf true
    处理换行符问题。Windows 用户建议设为 true(自动转换 CRLF 为 LF),Linux/Mac 用户设为 input(仅提交时转换)或 false(不转换)。
  • git config --global -e
    使用默认编辑器打开全局配置文件(通常是 ~/.gitconfig),手动编辑所有设置。
案例

新手小明刚安装 Git,他运行:

git config --global user.name "Ming"
git config --global user.email "ming@example.com"
git config --global core.editor "code --wait"

现在,他的每条提交都会标记为 “Ming ming@example.com”,并且用 VS Code 编写提交信息。

2. 文件操作(git add / git rm / git mv)

添加文件到暂存区
  • git add file.txt
    将指定文件(如 file.txt)加入暂存区。
  • git add *.txt
    添加所有 .txt 文件,支持通配符。
  • git add .
    添加当前目录下所有改动(新增、修改、删除)的文件。

Git 只追踪显式添加的文件。每次修改已追踪文件后,需再次 git add 更新暂存区。例如,你修改了 readme.txt,必须运行 git add readme.txt 才能提交最新版本。

删除文件
  • git rm file.txt
    从工作区和暂存区同时删除文件,下次提交时记录删除操作。
  • git rm --cached file.txt
    停止追踪某文件,但保留工作区副本。常用于误提交的文件(如日志文件)。
  • git rm -r bin/
    递归删除文件夹及其内容(如 bin/ 目录)。
重命名或移动
  • git mv oldname.txt newname.txt
    重命名文件并更新暂存区。例如:git mv readme.md README.md
  • git mv file.txt dir/
    将文件移动到指定目录。
案例

小明新建了 test.txt,并运行:

git add test.txt

后来他决定重命名:

git mv test.txt test_new.txt

若想删除:

git rm test_new.txt

3. 查看状态(git status)

  • git status
    显示当前工作区和暂存区的状态,包括:
    • 未暂存的修改(Changes not staged for commit)。
    • 已暂存待提交的内容(Changes to be committed)。
    • 未追踪的文件(Untracked files)。
  • git status -s
    简洁输出,例如:
    • M file.txt:已修改但未暂存。
    • A file.txt:已暂存的新文件。
    • ?? newfile.txt:未追踪文件。
案例

小明修改了 main.py 并新增 notes.txt,运行 git status

Changes not staged for commit:modified:   main.py
Untracked files:notes.txt

他运行 git add .,再检查:

Changes to be committed:modified:   main.pynew file:   notes.txt

4. 提交更改(git commit)

  • git commit -m "Fix the bug"
    提交暂存区内容,附带简洁消息。社区惯例使用现在时,如 “Add feature” 而不是 “Added feature”。
  • git commit
    打开默认编辑器(如 Vim)输入多行提交信息。保存并关闭后提交。
  • git commit -a
    自动暂存所有已追踪文件的修改并提交,但不包括新增文件。
注意事项
  • 提交消息要清晰。例如:"Update login validation logic""Update" 更具描述性。
  • -a 不适用于新文件,需先 git add
案例

小明修复了一个 bug:

git add bugfix.py
git commit -m "Fix login error handling"

若想跳过暂存:

git commit -a -m "Update readme"

5. 查看差异(git diff)

  • git diff
    比较工作区与暂存区的差异。
  • git diff --staged
    比较暂存区与上次提交的差异。
  • git diff HEAD
    比较工作区与上次提交的差异(包括未暂存和已暂存)。
配置差异工具
  • git config --global diff.tool vscode
    使用 VS Code 查看差异。
  • git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"
    设置调用命令。
  • git difftool
    启动配置的工具。
输出解读
  • 绿色 +:新增行。
  • 红色 -:删除行。
  • @ 符号:指示变更位置。
案例

小明修改了 main.py,运行 git diff

- print("Hello")
+ print("Hello, Git!")

暂存后运行 git diff --staged,确认变更正确。

6. 查看历史(git log / git show)

  • git log
    显示提交历史,每条包括哈希值、作者、日期和消息。
  • git log --oneline
    每条提交一行,仅显示哈希和消息。
  • git log --oneline --reverse
    正序显示简洁历史。
  • git log --graph
    显示分支合并图。
  • git show d601
    查看指定提交(d601 是哈希前缀)的详情。
  • git show HEAD
    查看最新提交。
  • git show HEAD~1
    查看上一次提交。
案例

小明运行 git log --oneline

d601f2e Fix the bug
a3b9c1d Add main.py

他用 git show d601f2e 查看具体变更。

7. 文件列表与结构

  • git ls-files
    列出暂存区追踪的文件。
  • git ls-tree HEAD
    显示当前提交的树结构,包括文件和目录。
案例

小明运行 git ls-files

main.py
readme.txt

8. 撤销操作(git restore)

  • git restore file.txt
    丢弃工作区中 file.txt 的未暂存修改。
  • git restore --staged file.txt
    将暂存区的 file.txt 撤销回工作区。
  • git restore --source=HEAD~1 file.txt
    恢复文件到上一次提交的状态。
案例

小明误改了 readme.txt,运行:

git restore readme.txt

若已暂存,运行:

git restore --staged readme.txt

三、远程仓库操作

远程仓库是团队协作的关键,常用平台包括 GitHub、GitLab 和 Bitbucket。

1. 初始化与克隆

  • git init
    在当前目录创建新仓库。
  • git clone https://github.com/user/repo.git
    克隆远程仓库到本地,自动关联远程。
案例

小明克隆项目:

git clone https://github.com/ming/project.git
cd project

2. 关联远程仓库

  • git remote add origin https://github.com/user/repo.git
    添加远程仓库,命名为 origin
  • git remote -v
    查看关联的远程地址。
  • git remote remove origin
    删除关联。

3. 推送与拉取

  • git push origin main
    推送本地 main 分支到远程。
  • git push -u origin main
    推送并设置上游分支,便于后续简化为 git push
  • git pull origin main
    拉取远程 main 分支并合并。
案例

小明提交后推送:

git push origin main

若远程有更新:

git pull origin main

4. 分支管理

  • git branch
    列出本地分支,带 * 表示当前分支。
  • git branch -r
    列出远程分支。
  • git branch feature
    创建分支 feature
  • git checkout feature
    切换到 feature 分支。
  • git checkout -b feature
    创建并切换。
  • git push origin feature
    推送分支到远程。
案例

小明开发新功能:

git checkout -b login-feature
git add login.py
git commit -m "Add login validation"
git push origin login-feature

四、高级用法与技巧

1. 分支合并与冲突解决

  • git merge feature
    feature 分支合并到当前分支。
  • 冲突解决:若有冲突,Git 会标记冲突文件。手动编辑后:
    git add resolved_file.txt
    git commit
    
案例

小明合并分支:

git checkout main
git merge login-feature

若冲突,编辑文件后提交。

2. 变基(git rebase)

  • git rebase main
    将当前分支变基到 main,保持线性历史。
  • git rebase -i HEAD~3
    交互式变基,修改最近三次提交。

3. 回滚操作

  • git reset --soft HEAD~1
    撤销最后一次提交,保留修改。
  • git reset --hard HEAD~1
    撤销提交并丢弃修改。

4. 忽略文件

创建 .gitignore 文件,内容如:

*.log
node_modules/

运行 git add .gitignore 并提交。


五、常见问题与解答

  1. 误删文件怎么办?
    若未提交:git restore file.txt。若已提交:git checkout HEAD file.txt
  2. 提交错了消息?
    修改最后一次提交:git commit --amend -m "New message"
  3. 推送被拒绝?
    先拉取更新:git pull --rebase,再推送。

六、结语

Git 的强大在于其灵活性和分布式特性。从基础的 addcommit 到远程协作的 pushpull,再到分支管理和冲突解决,本文涵盖了日常开发所需的核心操作。通过实践这些命令,您将能高效管理代码并与团队协作。继续探索 stashtag 等高级功能,Git 将成为您开发的得力助手!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入剖析带头循环双向链表的实现与应用

引言 场景描述 想象一个 环形地铁线路(如深圳地铁11号线),这条线路首尾相连,列车可以顺时针或逆时针循环行驶。为了方便管理,地铁系统设置了一个 “虚拟调度中心”(头节点),它不承…

DeepSeek Smallpond 在火山引擎 AI 数据湖的探索实践

资料来源:火山引擎-开发者社区 DeepSeek Smallpond 介绍 Smallpond 是一套由 DeepSeek 推出的 、针对 AI 领域,基于 Ray 和 DuckDB 实现的轻量级数据处理引擎,具有以下优点: 1.轻量级 2.高性能 3.支持规模大 4.无需运维 5.P…

Linux进程间的通信

进程间通信 1.进程间通信介绍2.匿名命名管道原理操作 1.进程间通信介绍 1.1 进程间通信目的:一个进程需要将他的数据发送给另一个进程,大家应该都多少接触过linux中的管道符"|",这个符号就是用来多个命令执行,在Linux中…

直播预告 | TDgpt 智能体发布 时序数据库 TDengine 3.3.6 发布会即将开启

从海量监控数据,到工业、能源、交通等场景中实时更新的各类传感器数据,时序数据正在以指数级速度增长。而面对如此庞杂的数据,如何快速分析、自动发现问题、精准预测未来,成为企业数字化转型过程中的关键挑战。 TDengine 的答案是…

手撕FIO工具指南:从压测翻车到避坑实战

文章目录 手撕FIO工具指南:从压测翻车到避坑实战一、背景:一次FIO压测引发的惊魂夜二、FIO vs 其他IO工具:为何让人又爱又怕?三、安装指南:避开依赖地狱四、参数详解五、避坑指南:血泪经验总结六、安全压测…

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者,正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案,一个集高效性、智能化、画质增强于一体的创新解决方案,旨在重塑智能汽车图像画质的新标准,并支持前…

B站左神算法课学习笔记(P7):图

目录 一、图的存储方式(千奇百怪) 1)邻接表 2)邻接矩阵 3)其他 4)推荐存储方式(代码) 二、图的遍历 (1)宽度优先遍历 (2)深度…

深度解析「前缀和」与「差分法」:高效算法的基石

深度解析前缀和与差分法:高效算法的基石 在计算机科学和数据处理领域,前缀和(Prefix Sum)与差分法(Difference Method)是两种基础且高效的算法技术。它们在处理数组的区间查询和区间修改操作时&#xff0c…

2-1 基本放大电路

放大的概念 mV →V mA→A 特征:放大功率(电压与电流)。 本质:能量在控制下的转换。(外接供电电源) 必要条件:有源元件(能量控制原件) 前提:不失真 测试的…

详解接口的常见请求方式

详解接口的常见请求方式 一、 常见接口请求方式1. GET2. POST3. PUT4. DELETE5. PATCH6. HEAD7. OPTIONS 二、 实现方法1. 前端实现2. 后端实现 三、 作用与主要区别四、 举例讲解1. 创建 Spring Boot 工程2. 添加依赖3. 编写 Controller 实现接口关键点说明 4. 启动与测试5. 总…

【附代码】【MILP建模】3D装箱问题(3D-Bin Packing Problem)

文章目录 相关教程相关文献问题描述建模思路——carton 方向平行轴建模方法(9变量6约束)平行轴建模方法(4变量8约束)枚举建模方法(6变量1约束) 建模思路——carton 位置平行轴建模方法枚举建模方法 Bin长宽…

【计算机网络中的奈氏准则与香农定理】

文章目录 一、前言二、奈氏准则1. 概念2. 奈氏准则公式3. 奈氏准则的意义 三、香农定理1. 概念2. 香农定理公式3. 香农定理的意义 四、奈氏准则与香农定理的对比五、应用示例1. 奈氏准则示例2. 香农定理示例 六、总结 一、前言 在计算机网络中,数据的传输速率与信道…

【C++】回调函数和回调对象

文章目录 回调可调用对象函数指针作回调函数对象作回调函数对象的使用std::function【C11】作回调使用 【C11】Lambda表达式作回调【C11】bind对象作回调std::bind的使用作回调使用 回调 当发生某种事件时需要调用或触发另一个事件即为回调,回调的核心即为将可调用…

DeepSeek助力文案,智能音箱如何改变你的生活?

你好,我是三桥君 你有没有为写智能音箱的宣传文案而抓耳挠腮过?三桥君在这方面可是有些感想,今天就来给你唠唠怎么用DeepSeek写出超赞的智能音箱宣传文案。 首先,你得给DeepSeek喂足“料”。这就好比做饭,你得准备好各…

【区块链安全 | 第一篇】密码学原理

文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree(默克尔树)1.4 HMAC(哈希消息认证码) 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC(椭圆曲线密码学)2.4 Diffie-He…

基于websocketpp实现的五子棋项目

该博客对于学完C和linux操作系统,但不知道如何用C开发项目,已经不知道C如何使用第三方库的人来说一定很有帮助,请耐心看完! 先看一下游戏会显示的前端界面,对理解这个游戏的前后端交互过程会有帮助 1. 开发环境 1.1 …

基于Redis分布锁+事务补偿解决数据不一致性问题

基于Redis的分布式设备库存服务设计与实现 概述 本文介绍一个基于Redis实现的分布式设备库存服务方案,通过分布式锁、重试机制和事务补偿等关键技术,保证在并发场景下库存操作的原子性和一致性。该方案适用于物联网设备管理、分布式资源调度等场景。 …

RK3568笔记八十: Linux 小智AI环境搭建

若该文为原创文章,转载请注明原文出处。 最近小智AI火了,韦老师出了 Linux 小智 AI 聊天机器人 版本,想移植到 RK3568上, 由于和韦老师硬件不同,所以需要交叉编译一些库,为后续移植做准备。 一、环境 1、…

C# SerialPort 使用详解

总目录 前言 在工业控制、物联网、嵌入式开发等领域,串口通信(Serial Port Communication)是连接串行设备(如条码扫描器、GPS接收器等)与计算机的重要手段。C# 提供了内置的 SerialPort 类,简化了串口开发…

3D点云的深度学习网络分类(按照作用分类)

1. 3D目标检测(Object Detection) 用于在点云中识别和定位目标,输出3D边界框(Bounding Box)。 🔹 方法类别: 单阶段(Single-stage):直接预测3D目标位置&am…