MAC编程:在MACOS安装和使用 Git 的方法

MAC编程:在MACOS安装和使用 Git 的方法

在MACOS安装和使用 Git 的方法

一、Git 介绍

Git 是一款开源的分布式版本控制系统,能够高效地跟踪文件变更、管理代码版本,是软件开发、文档协作等场景的核心工具。与集中式版本控制系统不同,Git 支持本地完整版本库存储,无需依赖网络即可完成大部分操作,同时具备强大的分支管理、协同开发能力,广泛应用于 GitHub、GitLab 等代码托管平台。在 macOS 系统中,Git 提供了多种安装方式,且操作逻辑与其他系统保持一致,本文将从安装到高级应用逐步讲解使用方法。

二、下载与安装 Git

macOS 下安装 Git 有 3 种主流方式,推荐根据自身需求选择,其中 Homebrew 安装 最便捷,适合大多数用户。

2.1 方式一:通过 Xcode Command Line Tools 安装(最简单)

macOS 自带的 Xcode 开发工具包含 Git,即使未安装完整 Xcode,也可单独安装其命令行工具:

  1. 打开「终端」(Terminal,可通过 Spotlight 搜索 Terminal 快速启动);
  2. 弹出安装弹窗后,点击「安装」,等待系统自动下载并配置完成;
  3. 验证安装:再次输入 git --version,若输出类似 git version 2.39.3 (Apple Git-145) 的版本信息,说明安装成功。

输入以下命令,系统会自动提示安装 Command Line Tools:

git --version 

2.2 方式二:通过 Homebrew 安装(推荐,版本可控)

Homebrew 是 macOS 下的包管理器,可快速安装/更新 Git,适合需要最新版本或自定义配置的用户:

  1. 验证安装:输入 git --version,输出类似 git version 2.45.1 的信息即成功(版本号可能随更新变化);

后续更新 Git 可执行:

brew update && brew upgrade git

安装完成后,执行以下命令安装 Git:

brew installgit

若未安装 Homebrew,先在终端执行以下命令安装(需联网,过程约 5-10 分钟):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2.3 方式三:通过 Git 官网安装包安装(手动配置)

适合习惯图形化安装的用户,步骤如下:

  1. 访问 Git 官网下载页面:https://git-scm.com/download/mac
  2. 点击下载对应 macOS 版本的 .dmg 安装包(自动适配 Intel/Apple Silicon 芯片);
  3. 打开安装包,按照向导提示点击「继续」「安装」,默认配置即可;
  4. 验证安装:打开终端输入 git --version,输出版本信息即成功。

三、Git 初级使用(基础操作入门)

初级使用聚焦「本地版本控制」核心功能,包括配置、创建仓库、提交变更、查看历史等,适合单独开发场景。

3.1 第一步:初始配置(必做)

安装后需配置用户名和邮箱,用于标识提交记录(与代码托管平台账号一致更佳):

查看配置是否生效:

git config --list 

输出中应包含上述配置的 user.nameuser.email

配置邮箱(替换为你的邮箱):

git config --global user.email "[email protected]"

配置用户名(替换为你的名称):

git config --global user.name "Your Name"

3.2 第二步:创建本地仓库

仓库(Repository)是 Git 存储文件版本的目录,可通过两种方式创建:

3.2.1 新建仓库(从零开始)

初始化仓库,生成 .git 隐藏目录(存储版本信息):

git init 

输出 Initialized empty Git repository in /Users/xxx/Documents/MyProject/.git/ 即成功。

终端中进入需作为仓库的文件夹(例如 Documents/MyProject):

cd ~/Documents/MyProject # 替换为你的文件夹路径
3.2.2 克隆远程仓库(从 GitHub 等平台获取已有项目)

若需获取远程仓库(如 GitHub 上的项目),使用 git clone 命令:

git clone https://github.com/username/repository-name.git # 替换为远程仓库地址

执行后会在当前目录创建与仓库同名的文件夹,包含完整项目文件和版本历史。

3.3 第三步:提交文件变更(核心流程)

Git 提交变更需经过「工作区 → 暂存区 → 版本库」三步,流程如下:

  1. 创建/修改文件:在仓库目录下新建文件(如 test.txt),或修改已有文件;
  2. 将文件添加到暂存区(暂存区用于临时存放待提交的变更):
    • 添加单个文件:git add test.txt(替换为文件名)
    • 添加所有变更文件:git add .(推荐,. 表示当前目录所有文件)
  3. 提交成功后,再次执行 git status,会显示 nothing to commit, working tree clean,表示工作区与版本库一致。

提交到版本库(生成永久版本记录,需填写提交说明,描述变更内容):

git commit -m "首次提交:添加 test.txt 文件"# 引号内为提交信息,需简洁明了

查看文件状态

git status 

输出中会标记「未跟踪文件(Untracked)」或「已修改文件(Modified)」;

3.4 第四步:查看版本历史

如需查看过往提交记录,执行:

git log 

输出内容包含:提交 ID(一串字母数字)、提交者、提交时间、提交说明;

  • 简化输出(只显示关键信息):git log --oneline
  • 退出 log 查看:按 q 键。

四、Git 中级使用(分支与远程协作)

中级使用聚焦「协同开发」核心功能,包括分支管理、远程仓库关联、拉取/推送代码等,适合多人协作场景。

4.1 分支管理(核心:避免开发冲突)

分支相当于项目的「平行副本」,可在分支上开发新功能,完成后再合并到主分支,不影响原有代码:

  1. 合并分支(新功能开发完成后,合并到主分支):
    • 先切换到主分支:git checkout main
    • 合并目标分支:git merge feature/login(将 feature/login 分支的代码合并到 main)

删除分支(合并后无需保留的分支):

git branch -d feature/login # 删除本地分支

切换回主分支

git checkout main # 或 master(根据实际主分支名称)

创建并切换到新分支(开发新功能时使用):

git checkout -b feature/login # 新建分支 feature/login 并切换(推荐)# 等价于:git branch feature/login(创建分支) + git checkout feature/login(切换分支)

查看当前分支

git branch 

输出中带 * 的分支为当前分支(默认主分支为 mainmaster);

4.2 远程仓库协作(关联 GitHub/GitLab)

远程仓库是代码的「云端存储中心」,用于多人共享代码,需先在 GitHub/GitLab 注册账号并创建仓库,再进行关联:

4.2.1 关联远程仓库
  1. 查看当前远程仓库关联:git remote -v(首次关联时无输出);

关联远程仓库(替换为你的远程仓库地址,从 GitHub 仓库页面复制 HTTPS 地址):

git remote add origin https://github.com/username/your-repo.git 

origin 是远程仓库的默认别名,可自定义)

4.2.2 推送本地代码到远程仓库

将本地版本库的代码推送到云端:

git push -u origin main # 首次推送,-u 绑定本地 main 与远程 main 分支(后续可简化为 git push)
  • 若提示需要登录:输入 GitHub/GitLab 账号密码(或使用 Token 登录,GitHub 已不支持密码直接推送,需在账号设置中生成 Personal Access Token)。
4.2.3 从远程仓库拉取代码

多人协作时,需先拉取远程最新代码,避免冲突:

git pull origin main # 拉取远程 main 分支的最新代码到本地
4.2.4 克隆远程仓库(再次获取)

若需在另一台设备获取远程仓库代码,直接克隆:

git clone https://github.com/username/your-repo.git # 自动关联远程仓库 origin

4.3 解决合并冲突(协作常见问题)

当多人修改同一文件的同一部分时,合并会出现冲突,需手动解决:

  1. 拉取代码时若提示冲突,终端会显示 Automatic merge failed; fix conflicts and then commit the result
  2. 编辑文件,删除冲突标记(<<<<<<<=======>>>>>>>),保留需要的代码;
  3. 重新提交:git add 冲突文件名git commit -m "解决合并冲突:保留本地与远程核心逻辑"
  4. 推送代码:git push

打开冲突文件,会看到类似以下标记:

<<<<<<< HEAD(当前分支的代码) 本地修改的内容 ======= 远程分支的代码 >>>>>>> origin/main(远程分支名称) 

五、Git 高级使用(效率提升与问题修复)

高级使用聚焦「效率优化」和「问题修复」,包括暂存变更、标签管理、忽略文件、撤销操作等,适合提升开发效率。

5.1 暂存变更(stash:临时保存工作区)

开发中若需切换分支,但当前工作区代码未完成不想提交,可使用 stash 暂存:

  1. 删除暂存:git stash drop stash@{0}(未恢复时删除)

恢复暂存的变更(回到原分支后):

git stash apply stash@{0}# 恢复第 0 个暂存(根据 stash list 显示的索引)# 恢复并删除暂存:git stash pop stash@{0}(推荐,避免暂存列表冗余)

查看暂存列表:

git stash list 

暂存当前工作区变更:

git stash 

暂存后工作区恢复干净,可切换分支;

5.2 标签管理(tag:标记重要版本)

标签用于标记重要版本(如发布版本 v1.0.0),方便后续回溯:

删除标签

git tag -d v1.0.0 # 删除本地标签git push origin --delete v1.0.0 # 删除远程标签

推送标签到远程仓库

git push origin v1.0.0 # 推送单个标签git push origin --tags # 推送所有标签

查看标签

git tag # 列出所有标签git show v1.0.0 # 查看标签详情

创建标签(在当前提交创建标签):

git tag v1.0.0 # 轻量标签(仅标记提交)# 带说明的标签(推荐,更详细):git tag -a v1.0.0 -m "版本 1.0.0:首次正式发布"

5.3 忽略文件(.gitignore:过滤无需跟踪的文件)

部分文件(如日志、缓存、IDE 配置文件)无需纳入版本控制,可通过 .gitignore 文件过滤:

  1. 保存文件后,执行 git add .gitignoregit commit -m "添加 .gitignore 文件",后续这些文件将不会被 Git 跟踪。

编辑 .gitignore,添加需要忽略的文件/目录(每行一个),示例:

# 忽略日志文件 *.log # 忽略缓存目录 node_modules/ # 忽略 IDE 配置文件 .idea/ .vscode/ # 忽略系统隐藏文件 .DS_Store 

在仓库根目录创建 .gitignore 文件:

touch .gitignore 

5.4 撤销操作(修改错误提交)

5.4.1 撤销工作区修改(未 add 到暂存区)
git checkout -- test.txt # 撤销 test.txt 文件的工作区修改(恢复到最近一次 commit 状态)
5.4.2 撤销暂存区修改(已 add 但未 commit)
git reset HEAD test.txt # 将 test.txt 从暂存区撤回到工作区
5.4.3 撤销最近一次提交(已 commit 但未 push)
git reset --soft HEAD~1 # 撤销最近一次 commit,保留工作区和暂存区修改(可重新提交)# 注意:--soft 保留修改,--hard 会删除修改(谨慎使用!)
5.4.4 修改最近一次提交说明(提交信息写错时)
git commit --amend # 打开编辑器修改提交说明,保存后覆盖最近一次提交

5.5 日志筛选与查找

当提交记录较多时,可筛选日志快速定位:

查看某两次提交之间的差异:

gitdiff 提交ID1 提交ID2 # 对比两个提交的代码差异(提交ID可通过 git log 查看)

查看指定文件的修改历史:

git log -- test.txt # 查看 test.txt 文件的所有提交记录

查找包含特定关键词的提交:

git log --grep "登录功能"# 查找提交说明包含「登录功能」的记录

六、常用命令

命令功能说明示例
git --version查看 Git 版本git --version
git config --global user.name配置全局用户名git config --global user.name "Your Name"
git config --global user.email配置全局邮箱git config --global user.email "[email protected]"
git config --list查看所有配置git config --list
git init初始化本地仓库cd ~/MyProject && git init
git clone <url>克隆远程仓库git clone https://github.com/username/repo.git
git status查看文件状态(未跟踪/已修改/已暂存)git status
git add <file>添加单个文件到暂存区git add test.txt
git add .添加当前目录所有变更到暂存区git add .
git commit -m "<msg>"提交暂存区变更到版本库git commit -m "添加登录功能代码"
git log查看提交历史git log
git log --oneline简化显示提交历史git log --oneline
git branch查看本地分支git branch
git branch <name>创建本地分支git branch feature/pay
git checkout <branch>切换分支git checkout main
git checkout -b <name>新建并切换分支git checkout -b feature/chat
git merge <branch>合并指定分支到当前分支git merge feature/chat
git branch -d <branch>删除本地分支(已合并)git branch -d feature/chat
git remote -v查看远程仓库关联git remote -v
git remote add origin <url>关联远程仓库git remote add origin https://github.com/username/repo.git
git push -u origin <branch>首次推送本地分支到远程git push -u origin main
git push推送已关联分支的变更git push
git pull origin <branch>拉取远程分支最新代码git pull origin main
git stash暂存当前工作区变更git stash
git stash list查看暂存列表git stash list
git stash apply <index>恢复指定暂存git stash apply stash@{0}
git stash pop <index>恢复并删除暂存git stash pop stash@{0}
git tag <tagname>创建轻量标签git tag v1.0.0
git tag -a <tagname> -m "<msg>"创建带说明的标签git tag -a v1.0.0 -m "正式发布1.0版本"
git tag查看所有标签git tag
git push origin <tagname>推送标签到远程git push origin v1.0.0
git checkout -- <file>撤销工作区文件修改git checkout -- test.txt
git reset HEAD <file>撤销暂存区文件(回到工作区)git reset HEAD test.txt
git commit --amend修改最近一次提交说明git commit --amend
git log --grep "<keyword>"按关键词筛选提交历史git log --grep "修复bug"
git diff <commit1> <commit2>对比两次提交的差异git diff a1b2c3d e4f5g6h

Read more

HDFS核心组件深度解析:分布式文件系统的架构基石

HDFS核心组件深度解析:分布式文件系统的架构基石

HDFS核心组件深度解析:分布式文件系统的架构基石 * 引言:HDFS——大数据的存储基石 * 一、HDFS架构全景 * 1.1 主从架构设计 * 1.2 核心组件概览 * 二、NameNode:HDFS的"大脑" * 2.1 核心职责 * 2.2 元数据存储结构 * 2.3 内存与持久化 * 2.4 单点故障问题 * 三、DataNode:HDFS的"数据仓库" * 3.1 核心职责 * 3.2 工作流程 * 3.3 数据存储结构 * 四、Secondary NameNode:NameNode的&

By Ne0inhk
Flutter 三方库 libsignal 的鸿蒙化适配指南 - 实现 Signal 协议加密通信、双大鼠(Double Ratchet)算法与前向安全性保障

Flutter 三方库 libsignal 的鸿蒙化适配指南 - 实现 Signal 协议加密通信、双大鼠(Double Ratchet)算法与前向安全性保障

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 libsignal 的鸿蒙化适配指南 - 实现 Signal 协议加密通信、双大鼠(Double Ratchet)算法与前向安全性保障 前言 在 Flutter for OpenHarmony 的高度安全通信领域,Signal 协议是目前全球公认的即时通讯加密标准。libsignal 是 Signal 协议的核心 Dart 实现。它能够为鸿蒙应用提供从身份认证到会话加密的全套解决方案,确保每一个字节的通信都具备前向安全性(Forward Secrecy)。本文将深入解析如何在鸿蒙端利用该库构建极致安全的加密通信能力。 一、原理解析 / 概念介绍 1.1 基础原理 Signal 协议的核心在于“双大鼠(Double Ratchet)”算法。它结合了 Diffie-Hellman

By Ne0inhk

OFA视觉蕴含模型GPU利用率优化:torch27环境下低显存高效推理实践

OFA视觉蕴含模型GPU利用率优化:torch27环境下低显存高效推理实践 1. 镜像简介与核心价值 如果你正在寻找一个开箱即用、无需折腾环境配置的OFA视觉蕴含模型推理方案,那么这个镜像就是为你准备的。它基于Linux系统和Miniconda虚拟环境构建,已经完整配置了OFA图像语义蕴含模型(iic/ofa_visual-entailment_snli-ve_large_en)运行所需的一切。 简单来说,这个镜像帮你解决了AI模型部署中最头疼的几个问题: * 不用手动安装各种依赖包,不用担心版本冲突 * 不用配置复杂的环境变量 * 不用等待漫长的模型下载和配置过程 * 不用处理各种奇怪的报错 模型本身的功能很明确:你给它一张图片,再给它两个英文句子(一个前提,一个假设),它就能判断这两个句子在图片内容的基础上是什么逻辑关系。输出结果有三种可能:蕴含(前提能推出假设)、矛盾(前提和假设冲突)、中性(两者没有明确的逻辑关系)。 2. 为什么选择这个镜像:四大核心优势 2.1 真正的开箱即用体验 传统部署一个AI模型有多麻烦?你可能需要: 1. 安装Pyth

By Ne0inhk
数据结构:kmp算法,Trie树,以及并查集的干货详解---小白也能看懂

数据结构:kmp算法,Trie树,以及并查集的干货详解---小白也能看懂

🎬 博主名称:个人主页 🔥 个人专栏: 《算法通关》,《Java讲解》 ⛺️心简单,世界就简单 序言 昨晚数据结构写了一半,做图太累了,文章写的比较慢,这篇应该就是第二篇,后面还有一篇,太困了,真不行了 今天讲一下 kmp算法,Trie, 并查集 目录 序言 KMP算法 原理 next数组 匹配过程 Trie树 并查集 KMP算法 这里说一下kmp的大致情况 用于处理字符串匹配问题,他也是十分的抽象                给一个S[]主串(比较长的那个),P[]为模板串,kmp我们一般用下标1来开始遍历 接下来我们需要去思考的是 1,暴力去怎么做 2,怎么去优化 下面是暴力的模板代码 大概意思就是,每当我们匹配到不一样的部位,我们的P就要从头开始再跟刚刚s的起点+1位置重新匹配,        这样就会造成串的长度很长时候,就会超时,所以我们就要从这个过程中找性质了

By Ne0inhk