在git中,将+
放在refspec前面应该意味着“允许覆盖” - 即
git fetch origin +refs/heads/*:refs/remotes/origin/*
和
git fetch origin refs/heads/*:refs/remotes/origin/*
后一种形式是否会更新远程分支,除非它是来自现有远程分支的快进合并。
但似乎这对标签不起作用。无论我是否在前面添加+
,遥控器中的更新标签将在我获取后立即更新本地标签,并且唯一的指示是“{1}}标志为”成功标签更新“。
这是一个简单的复制(在Linux / cygwin / MinGW上):
t
最后一个命令的输出是:
mkdir repo1
cd repo1
git init
for i in `seq 10`; do echo $i > $i.txt; git add $i.txt; git commit -m "$i"; done
git branch branch10
git tag tag10
cd ..
git clone repo1 repo2
cd repo1
git branch -f branch10 branch10^ # move branch10 one commit back
git tag -f tag10 tag10^ # move tag10 one commit back
cd ../repo2
git fetch origin refs/heads/*:refs/remotes/origin/* refs/tags/*:refs/tags/*
提交被拒绝,正如预期的那样,但标签得到了快速更新。
我希望能够从遥控器中仅获取新标签,而无需担心更改现有标签。最好的方法是什么?