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

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

code review!

文章目录

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

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

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

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/$branch
  git 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 命令以确保从远程获取最新的更新:

bash 复制代码
#!/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/$branch
  git 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 --hard 和 git clean -fd 是破坏性操作,会删除未提交的更改和未跟踪的文件。在运行此脚本前,请确保不需要这些更改,并且已经备份了重要数据。
  • 网络连接:确保在执行脚本时有稳定的网络连接,以便成功从远程仓库获取数据。

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

相关推荐
一隅论数智1 小时前
OWL(Web Ontology Language)介绍与使用举例(二)
大数据·经验分享·笔记·学习·自然语言处理·学习方法·政务
Elasticsearch4 小时前
使用 Lucene 搜索你的 beans —— Facets
elasticsearch
溪语流沙4 小时前
【Web全栈进阶】Alembic数据库迁移:改表结构不再删库
前端·数据库·python·elasticsearch·postgresql
sunoo-2294 小时前
【嵌入式Linux驱动学习】Day1-Day2 全流程梳理:环境搭建→U-Boot→内核→根文件系统→驱动基础
linux·运维·驱动开发·笔记·学习·阿里云·恩智浦
鬼手点金5 小时前
opencode-性能优化建议
java·人工智能·git·自动化·nanogpt
by209995 小时前
list:迭代器与资源管理实现的综合叙述(下)
数据结构·c++·笔记·list
wdfk_prog5 小时前
LWIP教程 03:从 `low_level_input()` 到 `pbuf_free()`——`pbuf` 的数据视图、Chain 与引用计数
运维·网络·笔记·学习
yi0116 小时前
Leetcode 49 用 “身份证‘‘巧解
人工智能·笔记·python·算法·leetcode·哈希表
ouynagda6 小时前
嵌入式Linux i.MX6ULL系统移植学习笔记
linux·笔记·学习
yi0116 小时前
DAY22: LeetCode 733:图像渲染——从二维网格开始理解 DFS 和 BFS
数据结构·笔记·python·算法·leetcode·深度优先·宽度优先