前言

Git作为当今最流行的分布式版本控制系统,已经成为开发者必备的技能之一。无论你是独立开发者还是团队协作,掌握Git的基本操作都能极大提高工作效率。本文将详细介绍Git的常用命令,帮助你快速上手并精通Git的基本使用。

一、Git基础概念

在深入命令之前,我们先了解几个Git的核心概念:

  • 仓库(Repository):项目所在的目录,包含所有文件的历史记录
  • 工作区(Working Directory):你当前编辑的文件目录
  • 暂存区(Staging Area):准备提交的文件暂存区域
  • 提交(Commit):对文件更改的永久快照
  • 分支(Branch):独立开发线,默认有master/main分支
  • 远程仓库(Remote):托管在网络上的项目仓库

二、Git安装与配置

1. 安装Git

Windows: 下载Git for Windows (Git for Windows)
Mac: 使用Homebrew brew install git
Linux: sudo apt-get install git (Ubuntu/Debian) 或 sudo yum install git (CentOS)

2. 基本配置

# 设置用户名
git config --global user.name "Your Name"# 设置邮箱
git config --global user.email "your.email@example.com"# 查看配置
git config --list# 设置默认编辑器为VS Code
git config --global core.editor "code --wait"

三、Git常用命令详解

1. 创建和克隆仓库

# 在当前目录初始化新仓库
git init# 克隆远程仓库
git clone <repository-url># 克隆指定分支
git clone -b <branch-name> <repository-url># 克隆深度为1(只获取最新版本,节省时间空间)
git clone --depth 1 <repository-url>

2. 基本工作流程

# 检查当前文件状态
git status# 添加文件到暂存区
git add <file-name>       # 添加特定文件
git add .                 # 添加所有更改文件
git add -A                # 添加所有更改(包括删除的文件)
git add -u                # 添加已跟踪文件的更改# 提交更改
git commit -m "提交信息"# 提交并跳过暂存区(自动add已跟踪文件)
git commit -a -m "提交信息"# 修改最后一次提交
git commit --amend

3. 查看历史记录

# 查看提交历史
git log# 简洁版历史
git log --oneline# 显示文件更改详情
git log -p# 显示最近n条提交
git log -n <number># 图形化显示分支
git log --graph --oneline --all# 显示某个文件的修改历史
git log -p <file-name># 显示某人的提交
git log --author="name"# 按日期筛选
git log --since="1 week ago"

4. 分支管理

# 查看所有分支
git branch       # 本地分支
git branch -a    # 所有分支(包括远程)
git branch -v    # 查看分支最后提交# 创建新分支
git branch <branch-name># 切换分支
git checkout <branch-name># 创建并切换分支
git checkout -b <branch-name># 删除分支
git branch -d <branch-name>    # 安全删除(已合并)
git branch -D <branch-name>    # 强制删除(未合并)# 重命名当前分支
git branch -m <new-name># 合并分支
git merge <branch-name># 变基(将当前分支变基到目标分支)
git rebase <branch-name>

5. 远程操作

# 查看远程仓库
git remote -v# 添加远程仓库
git remote add <remote-name> <repository-url># 重命名远程仓库
git remote rename <old-name> <new-name># 删除远程仓库
git remote remove <remote-name># 获取远程更新但不合并
git fetch <remote-name># 拉取远程更新并合并
git pull <remote-name> <branch-name># 推送到远程
git push <remote-name> <branch-name># 推送并设置上游分支
git push -u <remote-name> <branch-name># 强制推送(谨慎使用)
git push -f# 删除远程分支
git push <remote-name> --delete <branch-name>

6. 撤销操作

# 撤销工作区修改(未add)
git checkout -- <file-name># 撤销暂存区修改(已add)
git reset HEAD <file-name># 撤销提交(保留更改在工作区)
git reset --soft HEAD~1# 撤销提交(保留更改在暂存区)
git reset --mixed HEAD~1    # 默认选项# 彻底撤销提交(丢弃更改)
git reset --hard HEAD~1# 恢复特定提交
git revert <commit-hash># 恢复丢失的提交(通过reflog)
git reflog
git reset --hard <commit-hash-from-reflog>

7. 储藏与清理

# 储藏当前更改
git stash# 储藏包括未跟踪文件
git stash -u# 查看储藏列表
git stash list# 恢复最近储藏
git stash apply# 恢复指定储藏
git stash apply stash@{n}# 删除储藏
git stash drop stash@{n}# 恢复并删除储藏
git stash pop# 清理未跟踪文件
git clean -n    # 预览将被删除的文件
git clean -f    # 删除未跟踪文件
git clean -fd   # 删除未跟踪文件和目录

8. 标签管理

# 列出标签
git tag# 创建轻量标签
git tag <tag-name># 创建附注标签
git tag -a <tag-name> -m "tag message"# 查看标签详情
git show <tag-name># 删除标签
git tag -d <tag-name># 推送标签到远程
git push <remote-name> <tag-name># 推送所有标签
git push <remote-name> --tags# 删除远程标签
git push <remote-name> :refs/tags/<tag-name>

9. 子模块管理

# 添加子模块
git submodule add <repository-url> <path># 克隆包含子模块的项目
git clone <repository-url>
git submodule init
git submodule update# 或者一步完成
git clone --recurse-submodules <repository-url># 更新子模块
git submodule update --remote

10. 高级操作

# 交互式暂存
git add -i# 交互式变基
git rebase -i HEAD~n# 二分查找引入bug的提交
git bisect start
git bisect bad
git bisect good <commit-hash>
# 测试后标记当前提交为good或bad
git bisect reset   # 结束二分查找# 重写提交历史(谨慎使用)
git filter-branch

四、Git最佳实践

  1. 提交规范
    • 提交信息要清晰明确
    • 遵循约定式提交(Conventional Commits)
    • 示例: feat: 添加用户登录功能fix: 修复登录页面样式问题
  1. 分支策略
    • 主分支(master/main)保持稳定
    • 功能开发使用feature分支
    • 修复bug使用hotfix分支
    • 长期维护使用release分支
  1. 工作流程
    • 频繁提交,小步前进
    • 一个提交只做一件事
    • 提交前检查更改git diff
    • 定期从上游拉取更新
  1. .gitignore文件
    • 忽略不需要版本控制的文件(如日志、构建产物等)

示例内容:

    • text
*.log
node_modules/
.DS_Store
*.exe

五、常见问题解决

  1. 冲突解决
    • 发生冲突时,Git会在文件中标记冲突部分
    • 手动编辑文件解决冲突
    • 使用git add标记冲突已解决
    • 完成合并git commit
  1. 撤销公共历史
    • 避免对已推送的历史进行reset --hard
    • 使用git revert创建反向提交
  1. 大文件处理
    • 使用Git LFS管理大文件
    • 避免将二进制文件加入Git
  1. 凭证存储
    • 使用SSH密钥避免每次输入密码

或配置凭证存储:

    • bashgit config --global credential.helper store

六、可视化工具推荐

  1. Git GUI客户端
    • GitHub Desktop
    • Sourcetree
    • GitKraken
    • Tower
  1. IDE集成
    • VS Code Git集成
    • IntelliJ IDEA Git工具
    • Eclipse EGit
  1. 在线工具
    • GitHub
    • GitLab
    • Bitbucket

结语

Git是一个功能强大且灵活的工具,本文介绍的只是最常用的命令和操作。随着使用经验的积累,你会逐渐发现更多高级用法来提高工作效率。记住,Git的核心思想是记录项目的历史变化,而不是简单地保存当前状态。掌握Git不仅能帮助你更好地管理代码,还能让你在团队协作中游刃有余。

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

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

相关文章

Vue-22-通过flask接口提供的数据使用plotly.js绘图(一)

文章目录 1 任务背景 2 Flask提供接口(server.py) 2.1 原始代码 2.2 跨域问题 3 Vue3获取数据并渲染Plotly图表 3.1 新建工程 3.2 程序 3.2.1 index.html(入口) 3.2.2 cpmponents/Plot.vue(子组件) 3.2.3 App.vue(父组件) 3.2.4 main.ts 3.3 展示 4 选择图表类型绘图 4.1 App.v…

【mysql】换主键

需求&#xff1a;曲库表的主键错了&#xff0c;原先设置的是(sang_id),应该设置为&#xff08;sang_name,singer&#xff09;联合主键。-- &#xff08;0&#xff09;先备份数据&#xff0c;我这里没备份 -- &#xff08;1&#xff09;进行主键的切换之前&#xff0c;要进行一些…

Redis原理之缓存

上篇文章&#xff1a; Redis原理之集群https://blog.csdn.net/sniper_fandc/article/details/149141342?fromshareblogdetail&sharetypeblogdetail&sharerId149141342&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 Redis作为MySQL…

关于集合的底层数据结构

单列集合Collection分为list集合和set集合list集合分为ArrayList和LinkedListArrayList--底层数据结构是数组1.通过索引查询快2.增删要重构索引,增删慢 LinkedList--底层数据结构是链表1.无索引查询慢2.通过改变前节点的尾指针和后节点的前指针指向可快速增删,增删快set集合(…

批量插入技巧:减少事务提交次数的性能提升

一、事务提交成本分析每次事务提交触发‌磁盘I/O同步‌&#xff08;WAL机制&#xff09;、‌日志写入‌和‌锁资源释放‌操作&#xff0c;高频独立提交会产生指数级开销‌。实验表明&#xff1a;MySQL提交1万次单条插入比单次批量插入‌慢20倍以上‌‌。高频提交还加剧锁竞争与…

importlib.import_module() 的用法与实战案例

&#x1f31f; 一、什么是 importlib&#xff1f; importlib 是 Python 的一个内置标准库&#xff0c;用于在程序运行时 动态导入模块。 &#x1f524; 对比&#xff1a;普通 import vs importlib方式示例特点静态导入import os编写代码时就确定要导入的模块动态导入importlib.…

Oracle 12c 创建数据库初级教程

1. 连接到Oracle sqlplus / as sysdba Oracle数据库名称默认为ORCL或sqlplus /ORCL as sysdba Oracle数据库名称默认为ORCL2. 创建表空间&#xff08;数据库&#xff09; create user YOUR_USERNAME identified by "YOUR_PASSWORD"; YOUR_USERNAME为数据库名称和登…

zabbix服务器告警处理

zabbix服务器告警&#xff0c;信息为&#xff1a;Utilization of poller processes over 75%处理办法为修改zabbix_server.conf配置文件&#xff0c;一般情况下为/etc/zabbix目录下。根据自己轮询器的类型修改对应的轮询器的数量&#xff1b;我这里把StartPollers&#xff0c;S…

随笔20250721 PostgreSQL实体类生成器

我来帮你创建一个C#程序&#xff0c;从PostgreSQL数据库读取表结构并生成对应的实体类文件。我已经创建了一个完整的PostgreSQL实体类生成器。这个程序包含以下主要功能&#xff1a;主要特性数据库连接: 使用Npgsql连接PostgreSQL数据库表结构读取: 自动读取所有表的结构信息类…

B树、B-树与B+树

B树、B-tree与B树 在计算机科学&#xff0c;尤其是数据库和文件系统的领域中&#xff0c;B树、B-tree和B树是理解数据如何被高效存储和检索的关键。它们之间关系紧密&#xff0c;但功能和应用上又存在着决定性的差异。 一、 核心概念澄清&#xff1a;B树就是B-tree 首先需要明确…

视频格式转换工厂v3.2.5,集音视频、图片处理78MB

今天&#xff0c;我们要介绍的是一款功能强大的视频处理软件——视频格式转换工厂。这款软件已经完美破解&#xff0c;无需登录即可享受全部高级功能。它不仅支持视频格式转换&#xff0c;还涵盖了音频、图片处理等多种功能&#xff0c;是一款真正的多媒体处理工具。 视频格式转…

VUE 中父级组件使用JSON.stringify 序列化子组件传递循环引用错误

背景 VUE 中父级组件使用JSON.stringify 序列化子组件传递的数据会报错 runtime-core.esm-bundler.js:268 Uncaught TypeError: Converting circular structure to JSON –> starting at object with constructor ‘Object’ — property ‘config’ closes the circle 原因…

HTTP,HTTPS

在网络工程师、开发工程师、运维工程师等岗位的面试中&#xff0c;​​HTTP/HTTPS​​ 是高频必考知识点&#xff0c;尤其在前端、后端、测试、DevOps等与网络通信相关的职位中。以下是系统化的核心考点梳理&#xff0c;涵盖基础概念、协议机制、安全特性及应聘高频问题。​​一…

Nginx访问日志分析在云服务器环境的技术实现与案例

在云计算时代&#xff0c;Nginx访问日志分析已成为服务器运维的关键环节。本文将深入解析如何通过日志切割、实时监控和可视化展示三大技术路径&#xff0c;实现云环境下Nginx日志的高效分析。我们将结合具体案例&#xff0c;演示从原始日志到运维决策的完整技术闭环&#xff0…

鸿蒙实现一次上传多张图片

记录初接触鸿蒙&#xff0c;遇到的一个问题&#xff0c;需求是点击一个图片上传的号图&#xff0c;访问本地图片&#xff0c;可以选择多张图片并上传。下面是图片上传后的方法&#xff1a;//选择图片并上传private async showPhotoPicker() {const maxImageCount 3;const rema…

【STM32】CRC 校验函数

先上一下 CRC校验 的源代码&#xff1a; void crc_check(unsigned char *ptr,unsigned int len) //crc为开源函数 {unsigned long wcrc0XFFFF;//预置16位crc寄存器&#xff0c;初值全部为1unsigned char temp;//定义中间变量int i0,j0;//定义计数for(i0;i<len;i)//循环计算每…

【Java】SVN 版本控制软件的快速安装(可视化)

目录 一、SVN 的概述 1.1 SVN 的概念 1.2 SVN 与 Git 的对比 1.3 SVN 软件 二、SVN 的安装 2.1 SVN 的工作流程 2.2 服务器端 SVN 的安装 三、SVN 服务器端的配置 3.1 搭建项目 3.2 权限控制 四、SVN 客户端的配置 4.1 SVN 客户端的下载 4.2 客户端连接 SVN 服务器…

Hadoop安全机制深度剖析:Kerberos认证与HDFS ACL细粒度权限控制

Hadoop安全机制概述在大数据时代&#xff0c;Hadoop作为分布式计算框架的核心组件&#xff0c;其安全性直接关系到企业数据资产的保护。随着数据价值的不断提升&#xff0c;Hadoop安全机制已从早期的"简单信任模式"演进为包含多重防护措施的综合体系&#xff0c;其重…

uniapp基本使用

资料 咸虾米视频 黑马视频 uniapp官方文档 hbuilder 1.uniapp页面生命周期 1.1 onLoad 还拿不到dom适合接受上页的参数&#xff0c;联网取数据&#xff0c;更新data。相当于created和beforeCreated期间主要的作用是比如说获取url上的query参数 *url: ***/**?name张三&…

ssh2-sftp-client 简化 sftp 文件传输的 node库

ssh2-sftp-client 极大地简化了通过 sftp 进行文件传输的复杂性。无论你是需要上传、下载、删除文件&#xff0c;还是列出目录内容&#xff0c;可当简易的部署脚步npm run deploy const SftpClient require(ssh2-sftp-client) const sftp new SftpClient()const config {hos…