git 如何同步本地、远程的分支和tag信息

git 如何在本地同步远程分支和tag

1.git如何同步本地分支与远程origin的分支
问题场景1:
同事A创建了本地分支branchA并push到了远程->同事B在本地拉取(git fetch)了和远程branchA同步的本地分支branchA->同事A开发完成将远程分支branchA删除(远程仓库已经不存在分支branchA)->同事B用git fetch同步远端分支,git branch -r发现本地仍然记录有branchA的远程分支

分析:远端有新增分支,git fetch可以同步到新的分支到本地,但是远端有删除分支,直接"git fetch"是不能将远程已经不存在的branch等在本地删除的

解决方法:
git fetch --prune #这样就可以实现在本地删除远程已经不存在的分支
或者简略:
git fetch -p
git fetch -p origin
git remote prune origin

branch常用的命令:
git branch -a #查看本地和远程所有的分支
git branch -r #查看所有远程分支
git branch #查看所有本地分支
git branch -d -r origin/branchA #删除远程分支

其他较常用的命令
git fetch #将本地分支与远程保持同步
git checkout -b 本地分支名x origin/远程分支名x #拉取远程分支并同时创建对应的本地分支

问题场景2:
本地分支提示:Git Your branch is ahead of ‘origin/master’ by X commits,你想让本地直接和远程保持同步,想让不再提示这个讨厌信息,那么如果你本地的commit确保不想要,可以如下操作:
解决方法:
1)git reset --hard origin/master

或者还有一个将本地代码与服务器代码更新一致的语句
2)git branch -u origin/master

如果想直接回退版本让远程和本地代码保持一致,那就确保本地代码没问题之后强制推到远程
git push -f origin master

2.git 如何同步本地tag与远程tag
问题场景:
同事A在本地创建tagA并push同步到了远程->同事B在本地拉取了远程tagA(git fetch)->同事A工作需要将远程标签tagA删除->同事B用git fetch同步远端信息,git tag后发现本地仍然记录有tagA

分析:对于远程repository中已经删除了的tag,即使使用git fetch --prune,甚至"git fetch --tags"确保下载所有tags,也不会让其在本地也将其删除的。而且,似乎git目前也没有提供一个直接的命令和参数选项可以删除本地的在远程已经不存在的tag(我目前是没找到有关这类tag问题的git命令~~,有知道的同学可以告知我下,互相进步)。
解决方法:

git tag -l | xargs git tag -d #删除所有本地分支
git fetch origin --prune #从远程拉取所有信息

#查询远程tags的命令如下:
git ls-remote --tags origin

tag常用git命令:
git tag #列出所有tag
git tag -l v1.* #列出符合条件的tag(筛选作用)
git tag #创建轻量tag(无-m标注信息)
git tag -a -m ‘first version’ #创建含标注tag
git tag -a f1bb97a(commit id) #为之前提交打tag

git push origin --tags #推送所有本地tag到远程
git push origin #推送指定本地tag到远程

git tag -d #删除本地指定tag
git push origin :refs/tags/ #删除远程指定tag

git fetch origin #拉取远程指定tag
git show #显示指定tag详细信息

参考阅读
http://smilejay.com/2013/04/git-sync-tag-and-branch-with-remote/
https://blog.zengrong.net/post/1746.html

  • 11
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Git介绍及基本概念 1. 分布式版本控制系统 Git是一个分布式版本控制系统,每个本地保留远程仓库的完整副本,在本地可以进行任何版本控制操作,比如修改,提交,创建分支,合并分支,回退等。需要时才推送到远程仓库。 2. Git文件保存 Git对每次提交,有变化的文件都会整个文件存储起来,而不是像其它版本控制系统,比如cvs,svn,perforce等存储的是文件的差异部分。但是git有package机制,适当的时候会自动运行git gc命令(也可以手动运行)对文件进行差异存储。当然为了节约空间,也会进行压缩。这种方式在分支方面会带来很大的好处,Git分支,其实本质上仅仅是指向提交对象的可变指针。 3. Git对数据的引用 Git中所有数据,包括提交,目录,文件等,在存储前都计算校验和,然后以校验和来引用,这个校验和相当于指针。Git用以计算校验和的机制叫做 SHA-1 散列(hash,哈希),这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373。 4. Git对象 Git有4种对象,blob对象(通常是文件),树(tree)对象(通常是目录),提交(commit)对象和标签(tag)对象。当使用 git commit 进行提交操作时,Git会先计算每一个文件的校验和,在Git仓库中保存为blob对象,然后计算每一个子目录的校验和,保存为树对象,随后,Git便会创建一个提交对象,它包含提交信息(比如提交者名字,邮件,提交时间等),指向这个树对象(项目根目录)的指针和父提交对象(第一次提交无父提交对象)。如此一来,Git 就可以追踪任何对象。标签对象实际上是一个加了标签信息的提交对象,它像是一个永不移动的分支引用——永远指向同一个提交对象,只不过给这个提交对象加上一个更友好的名字罢了。
同步本地tag远程tag,可以按照以下步骤进行操作。首先,同事A在本地创建tagA并将其推送到远程仓库。然后,同事B可以通过使用git fetch命令从远程仓库拉取tagA到本地。接下来,如果同事A需要删除远程标签tagA,可以使用git push命令将删除操作推送到远程仓库。最后,同事B可以使用git fetch命令同步远程信息,并使用git tag命令检查本地是否仍然记录有tagA。如果本地仍然记录有tagA,可以使用以下命令强制同步本地与远程tag: ``` git tag -l | xargs git tag -d # 删除所有本地tag git fetch origin --prune # 从远程拉取所有信息 ``` 这样就可以强制同步本地与远程tag了。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [git 如何同步本地、远程分支tag信息](https://blog.csdn.net/wei371522/article/details/83186077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【GitGit tag无法同步的解决方案](https://blog.csdn.net/plaxbsga/article/details/125328774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值