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.xdnf.cn/news/824033.html

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

相关文章

分类模型评估方法

1.数据集划分 1.1 为什么要划分数据集? 思考&#xff1a;我们有以下场景&#xff1a; 将所有的数据都作为训练数据&#xff0c;训练出一个模型直接上线预测 每当得到一个新的数据&#xff0c;则计算新数据到训练数据的距离&#xff0c;预测得到新数据的类别 存在问题&…

vscode软件安装步骤

目录 一、下载软件安装包 二、运行安装包后 一、下载软件安装包 打开vscode官方网址&#xff0c;找到下载界面 链接如下&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 我是windows电脑&#xff0c;各位小伙伴自己选择合适的版本&#xff0c;点击下载按钮…

LVS负载均衡配置虚拟引起微服务注册混乱

线上小程序突然报错&#xff0c;查看网关日志&#xff0c;访问下游微服务A时大量报错&#xff1a; 1&#xff09;检查微服务是否未注册。登录eureka页面&#xff0c;发现三个节点均正常注册 三个微服务节点地址分别为&#xff1a;13.9.1.91:8080&#xff0c;13.9.1.92:8080和1…

Chapter 7 - 8. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理

Stomped CRC Counters Stomped CRC counters help in finding the location of bit errors in a network that uses cut-through switches. More precisely, these counters help in finding where bit errors do not exist. Stomped CRC 计数器有助于在使用直通式交换机的网络…

c语言-指针练习题

目录 前言一、题目一二、题目二总结 前言 为了巩固c语言中关于指针知识点的掌握&#xff0c;本篇文章记录关于指针的练习题。 一、题目一 有n个整数&#xff0c;使前面各数顺序往后移动m个位置&#xff0c;最后m个数变成最前面的m个数 写一函数实现以上功能&#xff0c;在主函…

shiro1.10版本后-IniSecurityManagerFactory过期失效

1、问题概述&#xff1f; 今天在研究了shiro的新版本shiro1.13.0版本&#xff0c;发现用了很长时间的IniSecurityManagerFactory工厂失效了。 从下图中可以看出&#xff0c;在新版本中IniSecurityManagerFactory被打上了过期线了。 那么问题来了&#xff0c;新版本如何使用呢…

适用于 Mac 的 10 款顶级数据恢复软件分享

想要免费从Mac恢复永久删除的文件吗&#xff1f;这篇文章给你答案&#xff01; 在Mac上恢复已永久删除的文件并不难&#xff0c;只需找到合适的工具。今天&#xff0c;我们将为大家评测10款免费的Mac数据恢复软件&#xff0c;让你在拯救Mac数据时无需支付任何费用。这些软件在…

c++简易AI

今天小编一时雅兴大发&#xff0c;做了一个c的简易AI&#xff0c;还是很垃圾的&#xff01; 题外话&#xff08;每期都会有&#xff09;&#xff1a;我的蛋仔名叫酷影kuying&#xff0c;大家能加我好友吗&#xff1f; 上代码咯&#xff01; #include<bits/stdc.h> #in…

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络

深度 Q 网络&#xff1a;用深度神经网络&#xff0c;来近似Q函数 DQN&#xff08;深度 Q 网络&#xff09; 深度神经网络 Q-LearningQ-Learning模型结构损失函数经验回放探索策略流程关联 DQN 优化DDQN&#xff1a;双 DQN&#xff0c;实现无偏估计Dueling DQN&#xff1a;提高…

[Angular] 笔记 23:Renderer2 - ElementRef 的生产版本

chatgpt: Renderer2 简介 在 Angular 中&#xff0c;Renderer2 是一个服务&#xff0c;用于处理 DOM 操作的抽象层。它提供了一种安全的方式来操作 DOM&#xff0c;同时与平台无关&#xff0c;有助于维护应用程序的跨浏览器兼容性和安全性。 Renderer2 的作用是在 Angular 组…

学生数据可视化与分析工具 vue3+flask实现

目录 一、技术栈亮点 二、功能特点 三、应用场景 四、结语 学生数据可视化与分析工具介绍 在当今的教育领域&#xff0c;数据驱动的决策正变得越来越重要。为了满足学校、教师和学生对于数据深度洞察的需求&#xff0c;我们推出了一款基于Vue3和Flask编写的学生数据可视化…

Peter算法小课堂—浮点数危机

大家先想想下面这个代码运行结果&#xff1a; #include <bits/stdc.h> using namespace std; int main(){double x5.2;double y4.11.1;cout<<(x<y)<<endl;cout<<x-y<<endl;return 0; } 最终发现&#xff0c; &#xff1f;&#xff1f;&…

嘉立创免费领券打样--领券流程及地址

领券地址 https://member.jlc.com/复制到浏览器访问该地址 自行注册账号 注册完账号后往下翻,有一个 “优惠券中心” 点免费券领取 领取对应需要的打样券就可以了 一般情况下都是用1-4层专用券,如果上个月有消费的话(超过20)是可以领通用券的,专用权只能是立创eda画的pcb才能…

80多套 Python 数据可视化炫酷大屏模板,全网最新、最多,最全、最酷、最炫大数据可视化模板

80多套数据可视化炫酷大屏模板&#xff1b;包含行业&#xff1a;智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等&#xff0c;全网最新、最多&#xff0c;最全、最酷、最炫大数据可视化模板。 项目背景 由于自己公司项目里面用到一个数据可视化大…

centos 7.9 升级系统默认的python2.7到python 2.7.18

centos 7.9 升级系统默认的python2.7到python 2.7.18 备份旧版本 mv /usr/bin/python /usr/bin/python_2.7.5 下载新版本 Download Python | Python.org Python Release Python 2.7.18 | Python.org wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz cd /…

【23.12.30高可用篇】什么是SLA?

什么是SLA&#xff1f; ✔️简述✔️拓展知识✔️4个9、5个9 ✔️简述 SLA是Service Level Agreement的缩写&#xff0c;意为服务等级协议。它是指供应商和客户之间达成的一份正式协议&#xff0c;规定了供应商应该向客户提供的服务水平、质量、可靠性和响应时间等指标。 SLA通…

基于FPGA的数字电路(PWM脉宽调制)

一.PWM的制作原理 假如我们有一个锯齿波&#xff0c;然后在锯齿波上设置一个阈值&#xff08;黑色水平虚线&#xff09;&#xff0c;凡是大于该阈值时输出均为高电平&#xff0c;反之则为低电平&#xff0c;这样我们是不是就得到一个PWM信号呢&#xff1f;如果我们想调整它的占…

flutter打包后的msix安装程序提示:应用安装失败,错误消息: 已阻止程序包 com.flutter.XXXXX 的部署等解决办法

使用dart的依赖msix打包后的程序&#xff0c;提示&#xff1a; 应用安装失败&#xff0c;错误消息: 已阻止程序包 com.flutter.flutterapp_1.0.0.0_x64__fxkeb4dgdm144 的部署&#xff0c;因为提供的程序包具有与已安装的程序包相同的标识&#xff0c;但内容不相同。请提高要安…

Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】

完成登录且优化&#xff1a; 未优化做简单的判断&#xff1a; 全部异常抓捕 优化&#xff1a;返回的是json的格式 BusinessException&#xff1a;所有的错误放到这个容器中&#xff0c;全局异常从这个类中调用 BusinessException&#xff1a; package com.lya.lyaspshop.exce…

【网络安全 | CTF】FlatScience

该题考察SQL注入 正文 后台扫到robots.txt 页面内容如下&#xff1a; 进入login.php 页面源代码如图&#xff1a; 传参debug得到php代码&#xff1a; <?php if(isset($_POST[usr]) && isset($_POST[pw])){$user $_POST[usr];$pass $_POST[pw];$db new SQLite3…