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

目录

### 常用命令

### 远程仓库与克隆

### 分支管理

### 子模块(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.mzph.cn/news/587440.shtml

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

相关文章

JavaScript 中的 Currying 是什么

Currying 是一种将函数转换为一系列接受单个参数的函数的技术。这意味着一个拥有多个参数的函数可以被转换成仅接受一个参数的函数序列。 在 JavaScript 中&#xff0c;Currying 可以通过使用闭包和函数返回来实现。下面是一个简单的例子&#xff1a; function add(a) {retur…

【LearnOpenGL基础入门——5】着色器

目录 一.简介 二.GLSL 三.数据类型 四.输入与输出 五.Uniform 六.更多属性 一.简介 着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说&#xff0c;着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立…

【基础】【Python网络爬虫】【5.数据解析】bs4、Xpath、Parsel模块、正则表达式(附大量案例代码)(建议收藏)

Python网络爬虫基础 数据解析1. 为何数据解析2. 常见的数据类型结构化数据半结构化数据非结构化数据 3. 爬虫项目实现步骤 数据解析模块1. Bs4环境安装bs4解析流程案例 - bs4碧血剑文本爬取 2. Xpath环境安装xpath解析的编码流程xpath表达式如何理解&#xff1f;案例 - 简历模板…

C# Word Excel Could not load file or assembly ‘office, Version=15

C# Word Excel Could not load file or assembly ‘office, Version15 vs2022创建的windows窗体应用程序非.netframework调用Microsoft.Office.Interop.Word;创建word文档时运行时出现未能加载文件或程序集“Microsoft.Office.Interop.Word, Version15.0.0.0, Cultureneutral, …

第3课 使用FFmpeg获取并播放音频流

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 FFmpeg作为一套庞大的音视频处理开源工具&#xff0c;其源码有太多值得研究的地方。但对于大多数初学者而言&#xff0c;如何快速利用相关的API写出自己想要的东西才是迫切需要…

Android studio 多界面的跳转和返回

一、新建一个Empty Activity项目&#xff1a; 二、修改activity_main.xml布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/a…

【Android Gradle 插件】ProductFlavor 配置 ( consumerProguardFiles 配置 | dimension 配置 )

Android Plugin DSL Reference 参考文档 : 文档主页 : Android Plugin 2.3.0 DSL Reference android 模块配置文档 : AppExtension - Android Plugin 2.3.0 DSL Reference ProductFlavor 文档 : ProductFlavor - Android Plugin 2.3.0 DSL Reference 一、ProductFlavor 配置…

10 Screen安全策略

一,关于安全策略 关于Screen安全策略的章节是为系统集成商准备的 root: # on -u qnxuser -T drm_t drm-intel ,他们负责实施和执行安全策略,以创建和维护一个可信赖的执行环境。 系统集成商使用QNX Neutrino安全策略来定义规则,并赋予Screen实用程序和应用程序procm…

【头歌实训】PySpark Streaming 入门

文章目录 第1关&#xff1a;SparkStreaming 基础 与 套接字流任务描述相关知识Spark Streaming 简介Python 与 Spark StreamingPython Spark Streaming APISpark Streaming 初体验&#xff08;套接字流&#xff09; 编程要求测试说明答案代码 第2关&#xff1a;文件流任务描述相…

什么是ajax,为什么使用ajax?

概念&#xff1a;ajax是一种现有的技术集合&#xff0c;技术内容包括&#xff1a;HTML或XHTML&#xff0c;CSS&#xff0c;JavaScript&#xff0c;DOM,XML,XSLT,以及最重要的XMLHttpRequest。用于浏览器与服务器之间使用异步传输&#xff0c;做到局部请求以实现局部刷新。 作用…

llvm后端之指令选择源码分析

llvm后端之指令选择源码分析 引言1 主要流程1.1 参数降级1.2 构建DAG1.3 类型合法化1.4 向量合法化1.5 DAG合法化1.6 DAG合并 2 目标实现2.1 TargetLowering2.2 SelectionDAGISel 引言 llvm后端指令选择主要是class SelectionDAGISel的子类实现。整个过程将llvm IR转为有向无环…

逆矩阵:解开线性代数之谜的魔法钥匙

逆矩阵&#xff1a;解开线性代数之谜的魔法钥匙 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同深入探讨线性代数中的重要主题——逆矩阵…

Resolume Arena(VJ音视频软件):创意无限,视听艺术的新境界

Resolume Arena是一款领先的VJ音视频软件&#xff0c;为创意人士提供了丰富的视觉效果和音频处理功能。无论是在舞台演出、音乐会还是派对活动中&#xff0c;Resolume Arena能够将音乐、视频和图像无缝地结合&#xff0c;创造出引人入胜的视听体验。 Resolume Arena具备强大的…

Nginx快速入门:nginx实现正向代理|反向代理和正向代理的区别(八)

0. 引言 我们之前讲解的一直是nginx的反向代理配置&#xff0c;关于正向代理的实现一直没有涉及&#xff0c;但在实际生产中正向代理也有非常广泛的应用场景&#xff0c;因此&#xff0c;今天我们将针对正向代理来深入学习。 1. 相关概念 1.1 什么是反向代理 所谓反向代理&…

如何利用多开软件在Windows电脑上优化游戏效果?

当今&#xff0c;许多玩家都希望在Windows电脑上通过多开软件来优化游戏效果。多开软件可以让玩家同时在一台电脑上打开多个游戏实例&#xff0c;从而提升游戏体验和效率。接下来&#xff0c;我将为大家介绍如何在Windows电脑上利用多开软件来优化游戏效果。 首先&#xff0c;…

读算法霸权笔记08_反馈

1. 关开门 1.1. clopening 1.2. 指的是一个职员工作到很晚&#xff0c;关闭门店或者咖啡店&#xff0c;几小时后又在天亮之前回来开门 1.3. 极度不规律的工作时间安排越来越常见 1.3.1. 首当其冲的是星巴克、麦当劳和沃尔玛等企业的低薪职工 1.3.2. 不规律的工作时间安排是…

云安全指的是什么,云安全产品有哪些,有什么作用

云安全是什么意思呢&#xff1f;简单来说云安全是指基于云计算商业模式应用的安全软件&#xff0c;专门保护云计算系统的网络安全学科。那么云安全和传统安全有什么区别呢&#xff1f;云安全包括在基于在线的基础架构、应用程序和平台上保持数据的私密和安全比起传统的安全要求…

Java加密算法工具类(AES、DES、MD5、RSA)

整理了有关加密算法工具类&#xff0c;结合了几个博客以及自己改良后可直接使用&#xff0c;主要介绍以下四种加密方式&#xff1a;AES、DES、MD5、RSA&#xff0c;详细介绍都在注释里面有讲。 一、AES import com.alibaba.fastjson.JSONObject; import java.nio.charset.Sta…

信号与线性系统翻转课堂笔记17——z变换及其性质

信号与线性系统翻转课堂笔记17——z变换及其性质 The Flipped Classroom17 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、要点 &#xff08;1&#xff09;序列的z变换…

Serverless架构:无服务器应用与AWS Lambda-读书笔记

Serverless架构&#xff1a;无服务器应用与AWS Lambda-读书笔记 好的架构可以成就软件&#xff0c;缺乏架构则会破坏软件。 一、Serverless 架构的来龙去脉 在典型的Web应用程序中&#xff0c;服务器接受前端的HTTP请求并处理请求。在保存到数据库之前&#xff0c;数据可能会…