当前位置: 首页 > news >正文

git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净,像刚clone下来一样

git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净,像刚clone下来一样

在这里插入图片描述

code review!

文章目录

  • git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净,像刚clone下来一样
    • 1.实现该功能的 Bash 脚本示例
    • 2.改进版:增加了git fetch

要让本地仓库的所有分支都重置到与远程完全一致的状态,可以使用以下脚本。这个脚本会执行以下步骤:

  1. 获取所有本地跟踪的分支。
  2. 对于每个分支,切换到该分支并从远程拉取最新的更改,强制覆盖本地更改(包括未提交的更改、冲突等)。
  3. 重置工作目录和索引到最新拉取的状态。
  4. 清理可能存在的未跟踪文件。

1.实现该功能的 Bash 脚本示例

#!/bin/bash# 获取当前所在的分支
initial_branch=$(git rev-parse --abbrev-ref HEAD)# 获取所有的本地跟踪分支
branches=($(git branch -r | grep -v '\->' | while read remote; do echo ${remote#origin/}; done))# 遍历每个分支
for branch in "${branches[@]}"; do# 切换到该分支git checkout $branch || { echo "无法切换到分支: $branch"; continue; }# 从远程拉取最新代码并强制更新git reset --hard origin/$branchgit clean -fd# 输出信息echo "分支 $branch 已重置为与远程保持一致。"
done# 返回到最初的分支
git checkout $initial_branch

在运行此脚本之前,请确保了解它的作用,并且备份重要数据,因为这将删除任何未提交的更改,并将本地仓库状态重置为与远程仓库完全一致。此外,如果有未推送的本地分支,这些分支不会被处理,除非它们也在远程存在并且被跟踪。

注意:

  • git reset --hard 会丢弃所有未提交的更改。
  • git clean -fd 会删除所有未跟踪的文件和目录。
  • 这个脚本假设想要同步所有远程分支。如果只想同步特定的分支,可以修改 branches 数组来只包含那些分支名称。

2.改进版:增加了git fetch

在执行 git reset --hard origin/$branch 之前,必须先通过 git fetch 更新远程跟踪分支。否则,reset 操作可能会基于过时的信息进行。

以下是修改后的脚本,添加了 git fetch 命令以确保从远程获取最新的更新:

#!/bin/bash# 获取当前所在的分支
initial_branch=$(git rev-parse --abbrev-ref HEAD)# 从远程拉取所有最新的信息
git fetch --all# 获取所有的本地跟踪分支
branches=($(git branch -r | grep -v '\->' | while read remote; do echo ${remote#origin/}; done))# 遍历每个分支
for branch in "${branches[@]}"; do# 切换到该分支git checkout $branch || { echo "无法切换到分支: $branch"; continue; }# 从远程拉取最新代码并强制更新git reset --hard origin/$branchgit clean -fd# 输出信息echo "分支 $branch 已重置为与远程保持一致。"
done# 返回到最初的分支
git checkout $initial_branch

关键点:

  1. git fetch --all:这个命令会从所有配置的远程仓库中获取最新的数据,包括新的分支、标签和提交。
  2. git reset --hard origin/$branch:这将把当前分支重置到远程分支的状态,丢弃所有本地未提交的更改。
  3. git clean -fd:这将删除所有未跟踪的文件和目录。

注意事项:

  • 数据丢失风险git reset --hardgit clean -fd 是破坏性操作,会删除未提交的更改和未跟踪的文件。在运行此脚本前,请确保不需要这些更改,并且已经备份了重要数据。
  • 网络连接:确保在执行脚本时有稳定的网络连接,以便成功从远程仓库获取数据。

这样,脚本就能确保每个本地分支都与远程仓库保持完全一致。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 高级java每日一道面试题-2024年9月22日-数据库篇-char和varchar的区别是什么?
  • BERT训练之数据集处理(代码实现)
  • 展锐平台的手机camera 系统开发过程
  • Python项目的质量保证
  • C++——打印以下图案:用string方法。
  • 左值引用与右值引用
  • Tauri 应用 input 输入自动大写问题定位解决
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 9 撤回通知扩展消息
  • 【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))
  • Paper 0 | Visual Instruction Tuning
  • sqli-lab靶场学习(四)——Less11-14(post方法)
  • Centos7 配置yum源详解
  • express的Router,配置 post 请求方法
  • linux-网络管理-网络配置
  • QEMU:模拟 ARM 大端字节序运行环境
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • JavaScript-Array类型
  • Just for fun——迅速写完快速排序
  • Node + FFmpeg 实现Canvas动画导出视频
  • spring cloud gateway 源码解析(4)跨域问题处理
  • vue 配置sass、scss全局变量
  • vue.js框架原理浅析
  • Wamp集成环境 添加PHP的新版本
  • Yii源码解读-服务定位器(Service Locator)
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 笨办法学C 练习34:动态数组
  • 大主子表关联的性能优化方法
  • 基于axios的vue插件,让http请求更简单
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 浏览器缓存机制分析
  • 使用 @font-face
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  •  一套莫尔斯电报听写、翻译系统
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # Kafka_深入探秘者(2):kafka 生产者
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (55)MOS管专题--->(10)MOS管的封装
  • (C语言)字符分类函数
  • (八十八)VFL语言初步 - 实现布局
  • (二)Linux——Linux常用指令
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (六)DockerCompose安装与配置
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)基于IDEA的JAVA基础12
  • 、写入Shellcode到注册表上线
  • .NET BackgroundWorker
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET 设计模式初探