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.hqwc.cn/news/310151.html

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

相关文章

Spring Data Redis对象缓存序列化问题

相信在项目中&#xff0c;你一定是经常使用 Redis &#xff0c;那么&#xff0c;你是怎么使用的呢&#xff1f;在使用时&#xff0c;有没有遇到同我一样&#xff0c;对象缓存序列化问题的呢&#xff1f;那么&#xff0c;你又是如何解决的呢&#xff1f; Redis 使用示例 添加依…

IntelliJ IDEA常用快捷键

【1】创建内容&#xff08;新建&#xff09;&#xff1a;altinsert 【2】main方法&#xff1a;psvm 【3】输出语句&#xff1a;sout 【4】复制行&#xff1a;ctrld 【5】删除行&#xff1a;ctrly&#xff08;很多编辑器ctrly是前进操作&#xff0c;如果选择 Delete Line&…

40道MyBatis面试题带答案(很全)

1. 什么是MyBatis &#xff08;1&#xff09;Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了JDBC&#xff0c;开发时只需要关注SQL语句本身&#xff0c;不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接…

C++编程中级阶段

目录 1.模版 1.1函数模版 1.1.1函数模版语法 1.1.2函数模版注意事项 1.1.3函数模版案例 1.1.4普通函数与函数模板的区别 1.1.5普通函数与函数模板的调用规则 1.1.6模版的局限性 1.2类模版 2.STL处识 3.STL常用容器 3.1string容器 3.2vector容器 3.3deque容器 3.…

工作中常用的 git 命令

了解版本控制 什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 什么是分布式版本控制系统分布式版本控制系统( Distributed Version Control System&#xff0c;简称 DVCS )。 在这类系统中&#xff0c;像…

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分&#xff1a;数据安全防护(30%) 第二部分&#xff1a;数据安全管理(30%) 第三部分&#xff1a;数据安全处置(40%) 项目介绍…

【Transformer】深入理解Transformer模型2——深入认识理解(上)

前言 Transformer模型出自论文&#xff1a;《Attention is All You Need》 2017年 近年来&#xff0c;在自然语言处理领域和图像处理领域&#xff0c;Transformer模型都受到了极为广泛的关注&#xff0c;很多模型中都用到了Transformer或者是Transformer模型的变体&#xff0…

基于轻量级GhostNet模型开发构建生活场景下生活垃圾图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

2023年03月17日_微软和谷歌办公AI的感慨

2023年3月17日 最近这个科技圈的消息 有点爆炸的让人应接不暇了 各种大公司简直就是神仙打架 你从来没有见过这么密集的 这么高频的产品发布 昨天微软是发布了Office 365 Copilot 在里边提供了大量的AI的功能 然后谷歌呢也发布了这个Google Workspace AI 也是跟365 Cop…

macOS系统打开Linux的方法

第一步 按下[command空格键]调出搜索框&#xff0c;输入“终端”&#xff0c;打开图上第一个 第二步 如图先输入"sudo -i"&#xff0c;敲回车键&#xff0c;再输入开机密码&#xff0c;再敲回车键就可以打开。注意&#xff1a;这里的密码输入不会显示在页面。 如果要…

自然语言处理3——玩转文本分类 - Python NLP高级应用

目录 写在开头1. 文本分类的背后原理和应用场景1.1 文本分类的原理1.2 文本分类的应用场景 2. 使用机器学习模型进行文本分类&#xff08;朴素贝叶斯、支持向量机等&#xff09;2.1 朴素贝叶斯2.1.1 基本原理2.1.2 数学公式2.1.3 一般步骤2.1.4 简单python代码实现 2.2 支持向量…

宠物救助上门喂养系统宠物领养宠物寄养寻宠小程序宠物社区系统宠物托运宠物殡葬源码

后端php 前端uniapp mysql数据库 主要功能介绍&#xff1a; 1.根据当前位置 支持多城市切换 2.支持首页公告实时显示 3.支持 宠物救助&#xff0c;上门喂养&#xff0c;宠物领养&#xff0c;宠物寄养&#xff0c;寻宠&#xff0c;宠物社区&#xff0c;宠物托运&#xff…