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

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

相关推荐
ReaF_star3 分钟前
K8s Pod调度【学习笔记】
笔记·学习·kubernetes
程序员大辉20 分钟前
Beaver Notes(海狸笔记)v4.4.0 中文版 ,开源免费、本地存储、零追踪的笔记软件
笔记·开源
叛逆的小小黄38 分钟前
maxent建模结果中响应曲线的美化
经验分享·笔记·r语言·maxent
handler011 小时前
Linux: 基本指令知识点(3)
linux·服务器·c语言·开发语言·c++·笔记
向上_503582911 小时前
解决git提交冲突
git
学习使我健康1 小时前
Git Submodule 深度避坑指南
git
程序猿乐锅1 小时前
Java第十三篇:Stream流
java·笔记
殷忆枫1 小时前
AI学习笔记三十六:基于 YOLOv8 与 Qwen3.5 的多模态视频行为分析系统
笔记·学习·yolo
小陈phd1 小时前
多模态大模型学习笔记(三十七)——模型管理平台实战:Ollama本地部署与全流程指南
笔记·学习
handler011 小时前
Linux 基本指令知识点(1)
linux·c++·笔记