实用指南:【Git】项目管理全解

news/2025/10/15 16:00:19/文章来源:https://www.cnblogs.com/tlnshuju/p/19143600

实用指南:【Git】项目管理全解

2025-10-15 15:57  tlnshuju  阅读(0)  评论(0)    收藏  举报

写在前面

之前写的git攻略太过粗略,故决定更新一篇更加完整的

概念定义

数据流转路径
工作区 -> (add) -> 暂存区 -> (commit) -> 本地仓库 -> (push) -> 远程仓库
远程仓库 -> (pull / fetch) -> 本地仓库 -> (checkout / merge) -> 工作区

https://www.runoob.com/wp-content/uploads/2015/02/1352126739_7909.jpg
https://www.runoob.com/wp-content/uploads/2015/02/git-command.jpg
上图均来自菜鸟教程

Git常用指令解析

1. 初始配置 (全局只需一次)

第一次使用 Git 时,需要配身份信息,这些信息会记录在每一次提交中。

2. 创建与克隆仓库
  • git init

    • 使用场景: 将一个现有的本地项目目录初始化为 Git 仓库,或者创建一个全新的空仓库。
    • 使用方法:
      # 进入你的项目目录
      cd my-project
      # 初始化
      git init
      执行后,目录下会多出一个隐藏的 .git 文件夹,所有版本控制信息都存放在这里。
  • git clone

    • 使用场景: 从远程仓库(如 GitHub)下载一个项目的完整副本到本地。这是参与一个现有项目的标准方式。
    • 使用方法:
      git clone <repository_url>
      例如,从 GitHub 克隆一个项目:
      git clone https://github.com/example/repo.git
3. 日常修改与提交 (最常用的操作)

这是开发过程中使用最频繁的指令组合。

  • git status

    • 使用场景: 查看当前工作区和暂存区的状态。可以知道哪些文件被修改了、哪些文件还未被跟踪等。
    • 使用方法:
      git status
  • git add

    • 使用场景: 将工作区的修改添加到暂存区,准备进行下一次提交。
    • 使用方法:
      # 添加单个文件
      git add <file_name># 添加多个文件git add file1.txt file2.js# 添加当前目录下所有修改(最常用)git add .
  • git commit

    • 使用场景: 将暂存区的所有内容提交到本地仓库,形成一个新的版本记录(一个 commit)。
    • 使用方法:
      git commit -m "Your descriptive commit message"
      -m 参数允许你直接在命令行中添加提交信息。提交信息应该清晰、简洁地描述这次提交做了什么,例如 "feat: 添加用户登录功能""fix: 修复了首页的显示 bug"
  • git log

    • 使用场景: 查看项目的提交历史。
    • 使用方法:
      # 查看完整的提交历史
      git log
      # 查看简化的单行历史
      git log --oneline
      # 查看带分支图形的历史
      git log --graph --oneline --decorate --all
4. 分支管理 (团队协作与功能开发的核心)

分支是 Git 最核心的功能,它允许开发者从主线(通常是 mainmaster)分离出去,进行独立的开发工作,完成后再合并回来。

  • git branch

    • 使用场景: 查看、创建或删除分支。
    • 使用方法:
      # 查看所有本地分支(当前分支会用 * 标记)
      git branch
      # 创建一个新分支
      git branch <branch_name># 删除一个已经合并的分支git branch -d <branch_name># 强制删除一个未合并的分支(慎用)git branch -D <branch_name>
  • git checkout (在较新版本的 Git 中,推荐使用 git switchgit restore)

    • 使用场景: 切换到不同的分支,或者恢复工作区的文件。
    • 使用方法:
      # 切换到一个已存在的分支
      git checkout <branch_name># 创建并立即切换到一个新分支(常用)git checkout -b <new_branch_name>
  • git switch (推荐使用)

    • 使用场景: 专门用于切换分支。
    • 使用方法:
      # 切换到一个已存在的分支
      git switch <branch_name># 创建并切换到一个新分支git switch -c <new_branch_name>
  • git merge

    • 使用场景: 将一个分支的修改合并到当前所在的分支。
    • 使用方法:
      # 1. 首先,切换到你希望接收合并的分支(例如 main)
      git switch main
      # 2. 然后,执行 merge 命令,指定要合并过来的分支
      git merge <feature_branch_name>
      解决冲突:如果两个分支都修改了同一个文件的同一部分,git merge 会失败并提示冲突。你需要手动打开冲突文件,解决冲突内容,然后再次 git add .git commit 来完成合并。
5. 远程协作
  • git remote

    • 使用场景: 管理与本地仓库关联的远程仓库。
    • 使用方法:
      # 查看关联的远程仓库
      git remote -v
      # 添加一个新的远程仓库
      git remote add <remote_name> <repository_url># 通常默认的远程仓库名为 origingit remote add origin https://github.com/user/repo.git
  • git push

    • 使用场景: 将本地仓库的提交推送到远程仓库,这样其他团队成员才看到你对代码的修改。
    • 使用方法:
      # 将当前分支的提交推送到名为 origin 的远程仓库
      git push origin <branch_name># 如果本地分支与远程分支同名,可以简写git push# 首次推送一个新创建的本地分支时,需要设置上游(upstream)git push -u origin <branch_name>
  • git pull

    • 使用场景: 从远程仓库获取最新的修改,并自动与本地当前分支合并。这是保持本地代码与团队同步的常用方式。
    • 使用方法:
      git pull origin <branch_name># 如果当前分支已经与远程分支关联,可以简写git pull
      git pull 实际上是 git fetch + git merge 两个命令的组合。
  • git fetch

    • 使用场景: 从远程仓库获取最新的信息(如新的分支、新的提交),但不会自动合并到你的本地分支。这让你可以在合并前先查看远程的修改。
    • 使用方法:
      git fetch origin
      执行后,你可以通过 git log origin/main 来查看远程主分支的最新提交。
6. 版本回退与撤销
  • git reset

    • 使用场景: 将当前分支的 HEAD 指针移动到指定的提交,同时可以选择性地修改暂存区和工作区。用于回退版本。
    • 使用方法:
      # 回退到上一个版本,但保留工作区的修改
      git reset --soft HEAD^
      # 回退到上一个版本,同时重置暂存区(工作区不变)
      git reset HEAD^
      # 彻底回退到上一个版本,工作区和暂存区的修改都将丢失(危险!)
      git reset --hard HEAD^
      # 也可以指定 commit_id
      git reset --hard <commit_id>
  • git revert

    • 使用场景: 创建一个新的提交,内容与指定的旧提交相反。这是一种更安全的回退方式,因为它不会修改项目历史,而是以一次新的提交来“撤销”之前的修改。非常适合在公共分支上使用。
    • 使用方法:
      git revert <commit_id>
  • git restore (推荐使用)

    • 使用场景: 专门用于恢复工作区的文件或撤销暂存区的修改。
    • 使用方法:
      # 撤销工作区中某个文件的修改(从暂存区恢复)
      git restore <file_name># 将文件从暂存区中移除(unstage),但保留工作区的修改git restore --staged <file_name>

日常开发工作流

个人开发流程:

  1. git initgit clone 开始项目。
  2. 修改代码。
  3. git status 查看状态。
  4. git add . 将修改添加到暂存区。
  5. git commit -m "完成xx功能" 提交到本地仓库。
  6. 重复 2-5 步。
  7. git push 推送到远程仓库备份。

团队协作流程:

  1. git clone 克隆项目到本地。
  2. git pull 开始工作前,先拉取最新代码保持同步。
  3. git switch -c feature/new-login 创建并切换到一个新的功能分支。
  4. feature/new-login 分支上进行开发和提交(add -> commit)。
  5. git push -u origin feature/new-login 将功能分支推送到远程。
  6. 在 GitHub/GitLab 上发起一个 Pull Request (或 Merge Request),请求将你的功能分支合并到 main 分支。
  7. 代码被审查(Code Review)通过后,由项目负责人合并到 main 分支。
  8. 切换回主分支 git switch main,然后 git pull 获取包含你代码的最新版本。

但也不是说个人工作流一定不需要git pull,比如我有多个机器人,但是它们之间只有参数的区别,在机器人A上增加了新功能,然后我推一次到远程仓库,在其他机器人上拉下来;如果每次开发前都记得本地程序是否最新,那也行,但是通常会忘记,所以每次开发前还是拉一次比较好

关于独占文件的管理

比如我自己开发了一个调试用的插件或上位机,但是我不希望被其他同事看见,或者说我不希望被别人同步走;或者说有多个机器人共享同一套控制程序,但是它们各自的配置文件是不同的,我们不希望每次同步配置文件会被篡改;再或者说,工程内部存在一些调试临时生成的日志、保存、存档等,它们也没有必要被push到远程
这时候就需要.gitignore了,它可以把配置文件的管理责任从 Git 中分离出去,Git 只负责同步控制程序

# .gitignore
# 忽略所有具体的配置文件
config.json
# 其他需要忽略的文件,如日志、临时文件等
*.log
# / 表示该目录下的所有文件
tmp/

其中所有文件的路径均相对于项目的根目录,也就是.git文件夹所在的位置,.gitignore同样存放在同一目录

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

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

相关文章

在浏览器播放多个视频 opencv+Nicegui

效果图代码: from nicegui import ui, native import cv2 import numpy as np import base64 import time import threading import osclass VideoStream:"""单个视频流管理类"""def _…

WSL2内部挂载NFS共享文件夹

启动NFS服务端 sudo systemctl start nfs-server 编辑/etc/exports可以新增共享目录,下面是例子 # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(…

2025 年电力金具厂家最新推荐排行榜:覆盖出口 / 玛钢电力金具 / 联板 / 横担等品类,权威解析优质厂家选择方向

引言当前电力行业快速发展,电力金具作为电力输送系统的核心部件,其质量直接影响电力供应的安全与稳定。但市场上电力金具品牌繁杂,既有深耕多年的老牌企业,也有新兴厂商,产品质量、工艺水平、服务能力差异显著,采…

达梦定时任务更新阻塞信息到表

数据库阻塞,一些原因,查不到历史的阻塞信息。配置存储过程,把一些阻塞信息更新到表,然后配置定时任务,定时更新--STEP1:创建辅助记录表: CREATE TABLE TRX_WAIT("STATTIME" TIMESTAMP,"SS" …

左值,右值和移动语义

左值、右值和移动语义 左值和右值 C++的表达式分为左值表达式和右值表达式,右值又分为纯右值和将亡值。 左值和右值的定义:指代非临时对象且不可移动的表达式被称为左值表达式;当对象被用左值时,被使用的是对象的身…

2025年千斤顶厂家最新权威推荐排行榜:液压千斤顶、机械千斤顶、电动千斤顶源头厂家综合实力深度解析

2025年千斤顶厂家最新权威推荐排行榜:液压千斤顶、机械千斤顶、电动千斤顶源头厂家综合实力深度解析行业背景与发展趋势千斤顶作为工业领域不可或缺的起重设备,其技术发展与制造业升级息息相关。随着基础设施建设的持…

VKD104CR是永嘉微VINKA推出低功耗2路触摸芯片该芯片具有较高的集成度

VKD104CR是2通道触摸检测芯片,功耗低、工作电压范围宽以及稳定的触摸检测效果可以广泛的满足不同应用的需求,此触摸检测芯片是专为取代传统按键而设计,内建稳压电路,提供稳定电压给触摸检测电路使用,触摸检测PAD的…

Cookie如何设置HTTPOnly和Secure 以防止XSS跨站脚本攻击

设置HttpOnly和Secure标志于Cookie中是增强Web应用安全性的重要措施。这两个标志帮助防止跨站脚本攻击(XSS)和中间人攻击(MitM)。下面是关于如何设置这些标志的具体步骤: PHP: 在发送cookie时使用setcookie()函数…

STM32学习路线!600+讲课程!软硬件兼修:裸机+RTOS+LVGL+硬件设计+项目实战 (STM32多核心开发板)

私信小编,备注“103开发板”,免费领取教程/源码/项目资料~ 在智能设备深度整合与万物互联加速推进的当下,STM32正从单一功能控制走向复杂系统集成。从智能家居的精准传感控制到工业物联网的实时数据采集,从AIoT终端…

Vue中展示字符串,有换行符的怎么换行展示

Vue中展示字符串,有换行符的怎么换行展示1 简介 1)字符串带了换行符 "你好\r\nhello\r\nworld" 2)使用{{}}直接展示{{rowdetail.lastWeekContent}} 3)展示效果发现没有换行 2 处理 1)使用<pre&g…

zerotier自建planet内网穿透详细配置教程 - IT苦行僧

zerotier自建planet内网穿透详细配置教程 配置过程,遇到不懂的问题,可以直接复制代码或者报错信息给AI,帮助你答疑解惑。 前言 本文使用Zerotier,这个软件官方也提供免费通道,但是很不稳定,所以本文是自建Planet…

【2025-10-11】适应变化

20:00劳作是眼能看见的爱。如果你进行劳作时不是满怀着爱,而是带着厌恶心里,还不如丢下工作,到庙门去等待高高兴兴劳作者们的周济——纪伯伦人性最厌讨的事物之一就是变化。但是,人类的发展只能依靠变化。所以,克…

C语言的学习——常量

常量的输出方式有四种 1.第一种是输出整数整数的输出需要用d来表示占位符 2.第二种是输出小数小数的输出需要用f来表示占位符 3.第三种是输出字符字符的输出需要用c来表示占位符,同时也需要用引号来引注输出的内容 4.…

会充电的CANoe,高效完成即插即充(PnC)智能充电功能测试

ISO 15118-2标准中描述的PnC功能,可以实现插枪即充电,识别、计费信息、充电参数都通过高级别通信在EV和EVSE之间自动交换。简化了电动汽车的充电过程,提高了用户体验,为电动汽车行业带来了更智能、更便捷的充电解决…

Bridge 2025超详细保姆级下载安装全教程(含软件下载)

目录一、Adobe Bridge 2025 软件介绍二、Adobe Bridge 2025 下载方式三、Adobe Bridge 2025 详细安装步骤步骤 1:解压 Bridge 2025 安装包步骤 2:以管理员身份运行安装程序步骤 3:选择是否修改安装路径步骤 4:自定…

legit torrents, legit trackers

http://www.legittorrents.info/ is dead.but that site recommends the following ones:PlaneShift Revision3 gameupdates.org vodo.net Pure Pwnage Cube 2: Sauerbraten Linuxtracker Public Domain Torrents

python 数学计算 32位精度

from decimal import Decimal, getcontext# Set precision high enough to handle 32 decimal places getcontext().prec = 50# Calculate step by step result = Decimal(20) / Decimal(6) / Decimal(3) / Decimal(3)…

2025年锅炉厂家最新权威推荐榜:燃气采暖锅炉/电热水锅炉/生物质锅炉/真空热水锅炉/蒸汽发生器全品类深度解析

2025年锅炉厂家最新权威推荐榜:燃气采暖锅炉/电热水锅炉/生物质锅炉/真空热水锅炉/蒸汽发生器全品类深度解析行业背景与发展趋势锅炉作为工业生产与民用供热领域的核心设备,其技术发展与市场需求正经历深刻变革。随着…

容器技术k8s - 指南

容器技术k8s - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…

c语言之对齐函数代码示例

#define ALIGNMENT 8// 内存对齐:将size向上对齐到最近的ALIGNMENT倍数 static size_t align_size(size_t size) {if(size==0)return ALIGNMENT;// 对齐公式:(size + 对齐数 - 1) & ~(对齐数 - 1)return (size +…