0%

实用 Shell 脚本:自动拉取 Git 仓库所有远程分支代码到本地

在使用 Git 进行代码版本管理时,有时我们需要合并某个远程分支到本地当前分支,手动操作时,流程是这样的:

  1. git checkout 到远程分支对应的本地分支
  2. git pull 拉取远程分支并合并到其对应的本地分支
  3. git checkout 回到我们的本地目标分支
  4. git merge 合并远程分支对应的本地分支到本地目标分支

未免过于繁琐了,尤其是要处理多个远程分支时,而且有可能我们还没有创建远程分支对应的本地分支,或者合并前忘记拉取远程分支最新状态。

本着“效率为王”的理念,必须要自动化,下面这个 Shell 脚本即可实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

# clean remote branches history
git remote prune origin

current_local_branch=$(git branch | awk '/\*/ { print $2; }')
all_remote_branches=$(git branch --remotes | sed 's/origin\///g' | sed 's/HEAD -> master//g')
current_dir=$(pwd)
repo_dir=$(git rev-parse --show-toplevel)

cd $repo_dir

for remote_branch in ${all_remote_branches[*]}; do
git checkout $remote_branch
git pull
done

git checkout $current_local_branch
cd $current_dir

git remote prune origin 用于清理远程仓库已删除分支在本地仓库残留的追踪记录;

git rev-parse --show-toplevel 可以获取本地仓库的绝对路径。

具体使用时,将该脚本提交到我们的本地目标分支,不定期手动执行一下脚本,简单快捷(执行脚本前需要确保本地仓库的 working tree 是干净的,即工作区和暂存区没有未提交的修改)。

Thank you for your donate!