Git 常用操作

一、Git 常用操作

1、拉取代码

1.1、拉取(pull)和 获取(fetch)

在 Git 中,拉取(pull)获取(fetch) 是两个常用的操作,用于从远程仓库同步代码。它们的核心区别在于是否自动合并远程变更到本地分支,区别如下:

获取(fetch)

  • 作用:git fetch 会从远程仓库下载最新的提交、分支和标签,但不会自动合并或修改本地分支。
  • 原理:将远程仓库的最新提交下载到本地,更新本地的远程跟踪分支(如 origin/main)。

拉取(pull)

  • 作用:git pull 是 git fetch 和 git merge(或 git rebase)的组合操作。它会从远程仓库下载最新的提交,并自动合并到当前本地分支。
  • 原理:先执行 git fetch,下载远程仓库的最新提交。然后执行 git merge(默认)或 git rebase,将远程变更合并到当前分支。

注意:如果想要拉取远程仓库的所有分支,可以使用 git fetch 命令。git fetch 会从远程仓库下载所有分支的最新提交信息到本地仓库,但不会自动合并到本地分支。

1.2、变基(rebase) 和 合并(merge)

在执行 git pull 操作时,变基(rebase) 和 合并(merge) 是两种不同的整合分支变更的方式。以下是它们的区别以及工作原理

合并(merge)

  • 工作原理
    • git pull 默认使用合并方式。
    • 它会将远程分支的最新提交与当前分支的提交合并,生成一个新的合并提交(Merge Commit)。
    • 合并会保留两个分支的完整历史。
  • 图示
    在这里插入图片描述
    • F 是一个新的合并提交,将 main 和 feature 的变更整合到一起。
    • 提交历史保留了分支的分叉和合并记录。

变基(rebase)

  • 工作原理

    • 使用 git pull --rebase 时,当前分支的提交会“重新应用”到远程分支的最新提交之后。
    • 变基不会生成合并提交,而是将当前分支的提交“移动”到目标分支的最新提交之后。
    • 提交历史会变成一条直线。
  • 图示
    在这里插入图片描述

    • D’ 和 E’ 是 D 和 E 的副本,但它们基于 C 重新应用。
    • 提交历史变成一条直线,没有分叉。

1.3、标签与剪切

在使用 git pull 拉取代码时,标签剪切选项的作用如下:

标签

  • 作用:拉取所有远程标签(tags)。
  • 默认行为:git pull 通常只拉取分支更新,不包含标签。
  • 使用场景:当你需要同步远程仓库的所有标签时使用。

剪切

  • 作用:删除本地已不存在的远程分支的引用。
  • 默认行为:git pull 不会自动删除本地对已删除远程分支的引用。
  • 使用场景:当远程分支被删除后,清理本地的过时引用。

2、切换分支

git checkout命令可以用于三种不同的实体:文件,commit,以及分支。checkout的意思就是对于一种实体的不同版本之间进行切换的操作。checkout一个分支,会更新当前的工作空间中的文件,使其与检出分支的commit版本状况保持一致。切换分支工作原理如下:

  • Git 会检查目标分支是否存在。
  • 如果存在,Git 会更新 HEAD 指针,使其指向目标分支的最新提交。
  • Git 会将目标分支的最新提交内容更新到 工作目录 和 暂存区。
  • 如果工作目录或暂存区有未提交的更改,Git 会尝试合并这些更改。如果合并冲突,Git 会提示用户解决冲突。

在这里插入图片描述

注意:git checkout 主要用于切换分支、恢复工作区文件或者检出特定提交。它主要操作的是本地仓库,控制本地工作目录指向不同的分支或提交,并不涉及从远程仓库拉取最新修改的操作。

3、回退版本

通过日志可以看到提交记录,通过git reset命令可以回退到指定版本,如下:

在这里插入图片描述
在这里插入图片描述

重置代码时有三种类型:软重置、混合、硬重置,下面分别介绍这三种方式的区别

  • 软重置 - 仅仅移动版本库HEAD指针,其他什么事都不做,即索引文件(暂存区)、工作区不会重置
  • 混合 - reset默认的,不指定reset类型就是它,移动版本库HEAD指针,重置暂存区,但不重置工作区
  • 硬重置 - 移动版本库HEAD指针,重置暂存区和工作区。彻底回退到某个版本,本地的代码也会变为某个版本

注意:硬重置一定要慎用,在硬重置之前一定要保存副本

4、同步代码

Git 中的 摘取提交(Cherry-pick) 功能允许你将某个特定的提交(commit)应用到当前分支上。结合一个具体的示例,讲解下相关的操作流程,如下:

背景:

在master分支修改了一个Bug,现在要把这个修改同步到1230分支。

操作流程:

  • 代码仓先切换到1230分支。
  • 查看日志,并把日志分支切换到master。
    在这里插入图片描述
  • 选择要同步的记录,右键,选择"摘取此提交"。
  • 执行 git push 推送到远端仓库。

5、清理

Git 的清理功能主要通过 git clean 命令实现,其核心作用是清除工作目录中那些未被跟踪(untracked)的文件和目录,让工作目录更加整洁,避免无关文件干扰开发流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值