git基础概念和常用命令(日常开发收藏备用)

news2024/11/24 2:19:10

目录

### 常用命令

### 远程仓库与克隆

### 分支管理

### 子模块(Submodule)

### 其他高级操作

### 交互式暂存(Interactive Staging)

### cherry-pick

### rebase

### reflog与reset

### 子树合并(Subtree Merge)

### 配置别名


Git是一个分布式版本控制系统,用于跟踪和管理代码的更改历史。在团队开发中,Git能够帮助开发者协同工作、分支管理、合并代码变更,并轻松回滚到任何提交点。以下是一些基本概念和常用命令的详解:

###基本概念
1. **仓库(Repository)**:存储所有项目文件及版本历史的地方。
2. **工作目录(Working Directory)**:开发者日常编辑代码的工作区。
3. **暂存区(Staging Area/Index)**:一个临时区域,用于保存准备提交到下一次提交中的改动。
4. **提交(Commit)**:一个提交代表了项目的一次快照,包含了相关修改信息以及一个唯一的哈希值标识。
5. **分支(Branch)**:允许在同一份代码库上并行开发不同功能或修复。每个分支都有自己的提交历史,可以随时合并回主分支或其他分支。

### 常用命令

- 初始化仓库:
  ```sh
  git init
  ```
  创建一个新的本地Git仓库。

- 配置Git:
  ```sh
  git config --global user.name "Your Name"
  git config --global user.email you@example.com
  ```
  设置全局用户名称和邮箱。

- 添加文件到暂存区:
  ```sh
  git add <file>
  ```
  或 `git add .` 以添加当前目录下的所有已修改或新文件。

- 提交暂存区的改动到仓库:
  ```sh
  git commit -m "Commit message describing changes"
  ```
  将暂存区的所有改动记录为一个新提交。

- 推送本地分支到远程仓库:
  ```sh
  git push origin <branch-name>
  ```
  将本地指定分支推送到名为origin的远程仓库。

- 创建与切换分支:
  ```sh
  git branch <new-branch-name>    # 创建分支
  git checkout <branch-name>      # 切换分支
  git checkout -b <new-branch>   # 创建并切换到新的分支
  ```

- 合并分支:
  ```sh
  git merge <branch-to-merge>     # 将指定分支合并到当前分支
  ```

- 删除分支:
  ```sh
  git branch -d <branch-to-delete>  # 删除已合并过的分支
  git branch -D <branch-to-delete>  # 强制删除未合并的分支
  ```

- 查看状态:
  ```sh
  git status                      # 显示当前工作目录的状态,包括哪些文件已修改、暂存等
  ```

- 撤销操作:
  ```sh
  git reset --hard HEAD~1         # 回退到上一个提交,会丢弃未提交的改动
  ```

这只是Git的基本操作集合,实际使用中还有许多更高级的操作,例如解决冲突、stash暂存改动、cherry-pick挑选特定提交应用到其他分支等。对于大型项目和团队协作来说,熟练掌握Git是必不可少的技能。

当然,Git的功能非常丰富,这里进一步详解一些关键概念和高级操作:

### 远程仓库与克隆

1. **远程仓库**:一个中心化的存储库,用于团队成员之间共享代码。比如GitHub、GitLab或自建的Git服务器。

   - 添加远程仓库:
     ```sh
     git remote add origin https://github.com/username/repo.git
     ```

   - 从远程仓库克隆项目到本地:
     ```sh
     git clone https://github.com/username/repo.git
     ```

2. **拉取(Pull)与推送(Push)**:
   - 从远程仓库获取最新提交并合并到本地分支:
     ```sh
     git pull origin <branch-name>
     ```
   - 将本地分支推送到远程仓库:
     ```sh
     git push origin <branch-name>
     ```

### 分支管理

- **查看所有分支**:
  ```sh
  git branch
  ```

- **合并冲突**:当两个分支对同一文件的同一部分进行了不同的修改,合并时会出现冲突。需要手动编辑冲突文件解决冲突,然后提交。

- **fetch与merge的区别**:`git fetch` 只是从远程仓库下载最新的数据到本地,但不会自动合并;而 `git pull` 则是 `fetch` 和 `merge` 的组合,它会将远程分支的更新直接合并到当前分支。

### 标签(Tag)

- **创建标签**:为了标记特定的提交(如版本发布),可以创建标签。
   ```sh
   git tag v1.0 <commit-hash>    # 给指定提交打标签
   git tag v1.0                 # 给当前HEAD指针指向的提交打标签
   ```

- **推送标签到远程仓库**:
   ```sh
   git push origin --tags
   ```

### 子模块(Submodule)

- **添加子模块**:在项目中嵌入另一个Git仓库作为子模块。
   ```sh
   git submodule add https://github.com/submodule-repo submodule-dir
   ```

-**更新子模块**
   ```sh
   git submodule update --remote
   ```

### 其他高级操作

- **暂存单个文件的部分改动**:通过 `git add -p` 或 `git add --patch` 进行交互式暂存。

- **stash功能**:临时保存工作区未提交的改动,以便切换分支或者清理工作区。
   ```sh
   git stash          # 暂存改动
   git stash list     # 查看stash列表
   git stash apply    # 应用stash中的改动
   git stash drop     # 删除stash中的某个或全部改动
   ```

- **重置与撤销**:除了上面提到的回退到上一次提交外,还可以使用 `git reset` 更精细地控制版本历史,例如硬重置、混合重置等。

以上内容仅为Git功能的一部分,实际使用中还有很多其他技巧和策略可以根据团队协作需求进行应用。

当然,以下是Git中更详细的几个高级概念和操作:

### 交互式暂存(Interactive Staging)

- 使用 `git add -p` 或 `git add --patch` 可以逐行或者逐块地选择性地将改动添加到暂存区。它会打开一个交互式的界面,询问你对每一部分改动如何处理(Stage this hunk、Discard this hunk等)。

### cherry-pick

- **cherry-pick**:用于从其他分支复制一个提交并应用到当前分支。
   ```sh
   git cherry-pick <commit-hash>
   ```
   这在需要获取特定提交的修复或特性时非常有用。

### rebase

- **rebase**:不同于合并,rebase是将一个分支的更改应用于另一个分支顶部的过程,从而创建一个新的线性历史。这通常使得项目的历史记录更加清晰。
   ```sh
   git checkout feature-branch
   git rebase master
   ```
   上述命令将会把feature-branch分支的所有提交重新应用到master分支的最新提交上。

### reflog与reset

- **reflog**:记录了HEAD指针的所有移动,包括切换分支、提交和回退操作。当需要找回因为误操作而丢失的提交时,可以参考reflog。
   ```sh
   git reflog
   ```

- **reset**:有多种模式,如`--soft`、`--mixed`(默认)、`--hard`。例如:
   ```sh
   git reset --hard HEAD~3    # 回滚到前3个提交,并丢弃所有未提交的改动
   git reset <commit-hash>     # 将HEAD指向指定提交,混合模式下工作目录也会恢复至该提交状态
   git reset --soft HEAD~1    # 回滚到前一个提交,但保留未提交的改动在工作目录中
   ```

### 子树合并(Subtree Merge)

- 当一个项目的子目录对应的是一个独立的Git仓库时,可以使用子树合并策略来管理这种关系。
   ```sh
   git subtree add --prefix=subdir https://github.com/external-repo.git master
   git subtree pull --prefix=subdir https://github.com/external-repo.git master
   ```

### 配置别名

- 为了简化常用命令,可以在Git配置文件中设置别名。
   ```sh
   git config --global alias.co checkout
   git config --global alias.br branch
   ```

以上内容仅为Git功能的一部分,实际使用中还有很多其他的工具和技术可以根据团队协作需求进行定制和优化。熟练掌握这些命令和概念可以帮助开发者更高效地使用Git进行版本控制和代码协同开发。

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

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

相关文章

【Maven】<scope>provided</scope>

在Maven中&#xff0c;“provided”是一个常用的依赖范围&#xff0c;它表示某个依赖项在编译和测试阶段是必需的&#xff0c;但在运行时则由外部环境提供&#xff0c;不需要包含在最终的项目包中。下面是对Maven scope “provided”的详细解释&#xff1a; 编译和测试阶段可用…

Vue3全局属性app.config.globalProperties

文章目录 一、概念二、实践2.1、定义2.2、使用 三、最后 一、概念 一个用于注册能够被应用内所有组件实例访问到的全局属性的对象。点击【前往】访问官网 二、实践 2.1、定义 在main.ts文件中设置app.config.globalPropertie import {createApp} from vue import ElementPl…

.NET国产化改造探索(二)、银河麒麟安装人大金仓数据库

随着时代的发展以及近年来信创工作和…废话就不多说了&#xff0c;这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来&#xff0c;看操作。 上一篇介绍了如何安装银河麒麟操作系统&#xff0c;这篇文章详细介绍下如何在银河麒麟操作系统上安装人大金仓数据库。 准备安…

LangChain.js 实战系列:搭配 LangSmith 实现调试、监控、测试

&#x1f4dd; LangChain.js 是一个快速开发大模型应用的框架&#xff0c;它提供了一系列强大的功能和工具&#xff0c;使得开发者能够更加高效地构建复杂的应用程序。LangChain.js 实战系列文章将介绍在实际项目中使用 LangChain.js 时的一些方法和技巧。 LangSmith 是 LangCh…

RK3568平台开发系列讲解(Linux系统篇)PWM系统编程

🚀返回专栏总目录 文章目录 一、什么是PWM二、PWM相关节点三、PWM应用编程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 PWM 的系统编程。 一、什么是PWM PWM,即脉冲宽度调制(Pulse Width Modulation)

2023年下半年信息系统项目管理师考试

目录 引言 结果 论文 案例分析 综合知识 总结 引言 2023年下半年参加了信息系统项目管理师考试&#xff0c;考试结果情理之中&#xff0c;意料之外。论文压线&#xff0c;综合和案例差一分。从个人参加考试的整个过程来看&#xff0c;属于历史性的突破。以本文&#xff…

稳定币记录

稳定币&#xff1a; 稳定币&#xff08;Stablecoin&#xff09;是一种加密货币&#xff0c;其设计目的是维持相对稳定的价值&#xff0c;通常与某种法定货币&#xff08;如美元、欧元&#xff09;或其他资产&#xff08;如黄金&#xff09;挂钩。稳定币通过将加密货币与相应的…

详解Vue3中的鼠标事件mousemove、mouseover和mouseout

本文主要介绍Vue3中的常见鼠标事件mousemove、mouseover和mouseout。 目录 一、mousemove——鼠标移动事件二、mouseover——鼠标移入事件三、mouseout——鼠标移出事件 下面是Vue 3中常用的鼠标事件mousemove、mouseover和mouseout的详解。 一、mousemove——鼠标移动事件 鼠…

DevC++ easyx实现视口编辑--像素绘图板与贴图系统

到了最终成果阶段了&#xff0c;虽然中间有一些代码讲起来没有意思&#xff0c;纯靠debug,1-1解决贴图网格不重合问题&#xff0c;这次是一个分支结束。 想着就是把瓦片贴进大地图里。 延续这几篇帖子&#xff0c;开发时间也从2023年的4月16到了6月2号&#xff0c;80小时基本…

【K8S 部署】基于kubeadm搭建Kurbernetes集群

目录 一、基本架构 二、环境准备: 三、安装部署 1、所有节点安装docker 2、、所有节点安装kubeadm&#xff0c;kubelet和kubectl 3、配置网络--flannel 4、测试 pod 资源创建 四、安装部署与k8s集群对接的Harbor仓库 五、Dashboard安装部署&#xff1a; 一、基本架构…

jupyter notebook打开其他盘的文件

jupyter notebook打开其他盘文件 打开jupyter notebook打开terminal输入&#xff1a;jupyter-notebook 路径打开你想打开的工程的文件 打开jupyter notebook 打开terminal 输入&#xff1a;jupyter-notebook 路径 打开你想打开的工程的文件

【中小型企业网络实战案例 六】配置链路聚合

相关文章学习&#xff1a; 【中小型企业网络实战案例 五】配置可靠性和负载分担 热门IT课程【视频教程】&#xff08;思科、华为、红帽、oracle等技术&#xff09;https://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 当CORE1或者CORE2的上…

【Elasticsearch源码】 分片恢复分析

带着疑问学源码&#xff0c;第七篇&#xff1a;Elasticsearch 分片恢复分析 代码分析基于&#xff1a;https://github.com/jiankunking/elasticsearch Elasticsearch 8.0.0-SNAPSHOT 目的 在看源码之前先梳理一下&#xff0c;自己对于分片恢复的疑问点&#xff1a; 网上对于E…

微服务雪崩问题及解决方案

雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 微服务之间相互调用&#xff0c;因为调用链中的一个服务故障&#xff0c;引起整个链路都无法访问的情况。 如果服务提供者A发生了故障&#xff0c;当前的应用的部分业务…

机器学习(二) -- 数据预处理(2)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 未完待续…… 目录 系列文章目录 前言 四、【数…

7、InternVL

简介 github demo 使用网络获取的油画图片&#xff0c;InternVL识别还算可以。 使用stable diffusion生成的图片&#xff0c;InternVL能很好的识别。 权重 huggingface地址 模型搭建 github地址 下载源码 git clone https://github.com/OpenGVLab/InternVL.git创建环…

提高软件测试效率:Mock 测试实战教程

在软件工程的套路中&#xff0c;虚拟化测试&#xff0c;又称 Mock 测试&#xff0c;扮演一个无可或缺的角色。Mock 测试允许工程师仿制和操控对象、服务或者系统组件等的行为&#xff0c;使得人们能在一个干净独立的环境里测试特定功能。这种方法能确保测试聚焦于代码逻辑&…

RocketMQ源码解析-主从同步原理(HA)

1、关键组件 主从同步的实现逻辑主要在HAService中&#xff0c;在它的构造函数中实例化了几个对象同时在start()方法内执行启动&#xff1a; public class HAService {public HAService(final DefaultMessageStore defaultMessageStore) throws IOException {this.defaultMes…

如何本地快速部署Apache服务器并使用内网穿透工具实现公网访问内网服务

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…

Python零基础入门技能学习,实现办公自动化与数据分析

一、教程描述 Python零基础入门&#xff0c;写下你的第一行人工智能代码&#xff0c;Python实现办公自动化&#xff0c;这是比同事早下班2小时的技能&#xff0c;Python实现网络爬虫&#xff0c;用Python抓取网页信息提升职场竞争力&#xff0c;Python实现数据分析&#xff0c…