git 将所有分支重置为原点?
git reset all branches to origin?
我想将多个分支重置为它们的原始版本。所以,
git fetch --all
for b in master work; do
git switch $b; git reset --hard origin/$b
done
但是更简单?我考虑过删除所有分支以便重新创建它们,但是必须检查一个分支并且会出错。
编辑:场景是origin
经常重写多个分支而不受惩罚。下面的答案也给了我将各种状态保存到备份引用的想法——这是一个很好的奖励。
您不需要切换到分支机构。您可以简单地重新创建一个分支并将其指向任意任意 ref:
git branch -f branchname "$target"
(作为额外的好处,与 git reset --hard
相比,工作树中未暂存的更改不会受到影响,后者会清除任何本地更改。)
在脚本中使用时应避免使用git branch
,最好使用for-each-ref
:
git for-each-ref 'refs/remotes/origin' --format='%(refname:strip=3)' \
| while read ref; do
git branch -f "$ref" "origin/$ref";
done
如果您只对创建远程跟踪分支当前状态的“备份”感兴趣,git push
或 git fetch
可以通过使用当前克隆作为远程来提供帮助。
任一命令都会将 origin
远程的所有分支复制到前缀为 backup/
的新(本地)分支层次结构中,即 origin/dev
变为 backup/dev
:
git fetch . 'refs/remotes/origin/*:refs/heads/backup/*'
# or:
git push . 'refs/remotes/origin/*:refs/heads/backup/*'
或者直接从远程获取到一组单独的本地引用:
git fetch origin 'refs/heads/*:refs/heads/backup/*'
我想将多个分支重置为它们的原始版本。所以,
git fetch --all
for b in master work; do
git switch $b; git reset --hard origin/$b
done
但是更简单?我考虑过删除所有分支以便重新创建它们,但是必须检查一个分支并且会出错。
编辑:场景是origin
经常重写多个分支而不受惩罚。下面的答案也给了我将各种状态保存到备份引用的想法——这是一个很好的奖励。
您不需要切换到分支机构。您可以简单地重新创建一个分支并将其指向任意任意 ref:
git branch -f branchname "$target"
(作为额外的好处,与 git reset --hard
相比,工作树中未暂存的更改不会受到影响,后者会清除任何本地更改。)
在脚本中使用时应避免使用git branch
,最好使用for-each-ref
:
git for-each-ref 'refs/remotes/origin' --format='%(refname:strip=3)' \
| while read ref; do
git branch -f "$ref" "origin/$ref";
done
如果您只对创建远程跟踪分支当前状态的“备份”感兴趣,git push
或 git fetch
可以通过使用当前克隆作为远程来提供帮助。
任一命令都会将 origin
远程的所有分支复制到前缀为 backup/
的新(本地)分支层次结构中,即 origin/dev
变为 backup/dev
:
git fetch . 'refs/remotes/origin/*:refs/heads/backup/*'
# or:
git push . 'refs/remotes/origin/*:refs/heads/backup/*'
或者直接从远程获取到一组单独的本地引用:
git fetch origin 'refs/heads/*:refs/heads/backup/*'