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

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

相关推荐
Dovis(誓平步青云)23 分钟前
基于面向对象设计的C++日期推算引擎:精准高效的时间运算实现与运算重载工程化实践
开发语言·c++·经验分享·笔记
寂空_27 分钟前
【算法笔记】ACM数论基础模板
c++·笔记·算法
愚者大大35 分钟前
小白入门:GitHub 远程仓库使用全攻略
大数据·elasticsearch·搜索引擎
ALINX技术博客2 小时前
【ALINX 实战笔记】FPGA 大神 Adam Taylor 使用 ChipScope 调试 AMD Versal 设计
笔记·fpga开发
程序员沉梦听雨2 小时前
【Elasticsearch】DSL 篇
elasticsearch
关山煮酒2 小时前
【数据挖掘笔记】兴趣度度量Interest of an association rule
笔记·数据挖掘
机器视觉知识推荐、就业指导3 小时前
Qt/C++面试【速通笔记九】—视图框架机制
c++·笔记·qt
s_little_monster3 小时前
【Linux】socket网络编程基础
linux·运维·网络·笔记·学习·php·学习方法
汇能感知3 小时前
光谱相机的图像预处理技术
经验分享·笔记·科技
小蜗笔记4 小时前
path环境变量满了如何处理,分割 PATH 到 Path1 和 Path2
笔记