当您在github上分叉存储库时,您的分叉存储库包含所有分支和标记。
随着时间的推移,这些分支和标签会过时。
如何使用fork轻松确保您的fork具有所有分支和标签而无需重新拼接?
即。一个git magicpull --rebase upstream / * myremote / *
将获取上游的所有分支和标记,并确保myremote中存在相同的分支和标记。
答案 0 :(得分:40)
这假设您的“上游”遥控器名为“origin”,并且您的用户名下有自定义分叉(即“maxandersen”)
当你的克隆运行以下单行时(刷新Track all remote git branches as local branches:
)remote=origin ; for brname in `git branch -r | grep origin | grep -v master | grep -v HEAD | sed -e 's/.*\///g'`; do git branch --track $brname $remote/$brname ; done
这将为名为“origin”的远程中找到的所有分支设置跟踪分支。 如果您已经使用此分支机构进行结账,除非确保跟踪已到位,否则不会更改任何内容。
(可选)现在确保所有分支都是uptodate(如果您已经签出分支,则非常有用):
git pull --rebase --all
现在所有分支都设置为跟踪和uptodate将分支和标记推送到您的远程(用您的远程名称替换'maxandersen'):
git push --all maxandersen
git push --tags maxandersen
此后你的叉子同步。
以下脚本完成所有这些操作,包括要求确认:
## Checkout all branches from remote as tracking branches. Based on https://stackoverflow.com/questions/379081/track-all-remote-git-branches-as-local-branches/6300386#6300386
UPSTREAM=$1
MYREPO=$2
usage() {
echo "Usage:"
echo "$0 <upstream-remote> <target-remote>"
echo ""
echo "Example which ensures remote named 'maxandersen' have all the same branches and tags as 'origin'"
echo "$0 origin maxandersen"
exit 1
}
if [ -z "$UPSTREAM" ]
then
echo Missing upstream remote name.
usage
fi
if [ -z "$MYREPO" ]
then
echo Missing target remote name.
usage
fi
read -p "1. This will setup '$MYREPO' to track all branches in '$UPSTREAM' - Are you sure ?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
for brname in `git branch -r | grep "$UPSTREAM" | grep -v master | grep -v HEAD | sed -e 's/.*\///g'`; do git branch --track $brname $UPSTREAM/$brname ; done
fi
read -p "2. This will push all local branches and tags into '$MYREPO' - Are you sure ?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
git push --all $MYREPO
git push --tags $MYREPO
fi
将其保存为'updateallbranchestags.sh'并使用以下命令执行:
sh updateallbranches.sh origin maxandersen
来自'origin'的所有分支/标签都将在远程命名的'maxandersen'中提供
答案 1 :(得分:18)
你仍然需要一个本地克隆,它将:
origin
and upstream
in GitHub”
git push --all origin
(起源是你的分叉):假设:
答案 2 :(得分:2)
您可以直接推送遥控器。 显然这没有考虑到fork的变化,但它仍然回答了这个问题。如果更改有限,那么您可以使用本地分支轻松合并/重组它们。
git push -f origin refs/remotes/upstream/*:refs/heads/*
答案 3 :(得分:-2)
这里https://asciinema.org/a/lv9v5mh1GGQJsfKIzUSlzsg7i是一个毫不费力的实际演示,我如何同步从上游同步克隆的回购协议的master
和release-18.09
分支。