图片 27

入职体操

  • Git 实战-特性介绍
  • Git
    实战-添加、提交、推送
  • Git 实战-下拉
  • Git 实战-撤销、恢复
  • Git 实战-分支

 首先理解几个基本概念:

Stash


origin:默认远程版本库;

创建SSH Key

关于秘钥,如果~/.ssh里面没有key的话,参照如下方法:

  1. ssh-keygen -t rsa -C
    “your_email@example.com”
    2.一直按回车
    (在输入passphrase的时候也可以输入密码,但为了之后免密码操作,需要将本地的秘钥添加到ssh
    agent中,使用的命令:
    ssh-add .ssh/id_rsa

    3.pbcopy < ~/.ssh/id_rsa.pub 复制即可

其中配置参照了:

分支是 git 的核心。

master:默认开发分支;

Git

创建分支

 

迄今为止,最酷的教程

http://pcottle.github.com/learnGitBranching/?demo

git branch hotfix

初始化本地git仓库(创建新仓库)

Git 基本命令

  • 克隆代码库
    git clone
    ssh://git@git.sankuai.com/web/www.git
    # 其中www是要克隆的版本库,其它如mining, stat,
    mtpay等。美团的代码库暂时不是全开放的,需要申请访问权限。
    git clone
    ssh://git@git.sankuai.com/web/www.git
    mt # mt是指定克隆到的目录名,其他和上一个命令一样

  • 更新代码库到最新版本
    git pull

  • 查看工作区状态
    git status

  • 提交代码到本地仓库
    git add template/deal/default.php # 添加文件到暂存区
    git commit -m “update deal ui”

  • 推送到远程仓库
    git pull # 更新代码库到最新版本
    git push # 开始推送
    git push origin master #
    对新建远程仓库的第一次推送,需要指定主分支名master

  • 暂存区操作
    git add template/deal/default.php # 提交文件到暂存区
    git reset HEAD template/deal/default.php # 删除暂存区中的文件

  • 查看代码改动
    git diff # 查看工作区与暂存区的文件差异
    git diff –cached # 查看暂存区与最后一次本地提交的文件差异
    git diff HEAD # 工作区与最后一次本地提交之间的差异
    git diff origin # 工作区与本地仓库原始版本比较

  • 查看提交记录日志
    git log # 查看默认格式的提交记录
    git log -5 # 查看最近5条提交记录
    git log -p # 查看提交记录并显示代码改动内容
    git log -p –author=abc # 查看abc的提交记录并显示代码改动内容
    git log –since=2011-05-24 –until=2011-05-25 #
    查看从2011-05-24到2011-05-25的提交
    git log –name-only # 只显示文件名
    git log –pretty=oneline # 只显示一行
    git log –pretty=format:%h:%s # 自定义格式
    git log –graph # 图形化查看
    git log –stat # 查看修改文件统计

  • 文件操作
    git checkout file #
    检出最后一次提交的文件覆盖当前文件,或者说放弃当前文件的修改
    git rm file # 删除文件
    git mv file1 file2 # 移动或者重命名文件

如上创建了一个 hotfix 的分支,注意目前服务器上还不知道这个 hotfix。

git init

分支和合并命令

  • 创建分支
    git branch hotfix # 方法1,直接从当前分支创建hotfix分支
    git checkout -b hotfix #
    方法2,从当前分支创建hotfix分支,并切换到hotfix分支
    git checkout -b hotfix master #
    方法3,从master分支创建hotfix分支,并切换到hotfix分支

  • 切换分支
    git checkout hotfix # 切换到hotfix分支
    git checkout master # 切换到master分支

  • 分之合并
    git merge hotfix #
    合并hotfix分支到当前分支,使当前分支拥有hotfix分支的改动
    git merge hotfix –squash #
    合并hotfix分支到当前分支,但将分支上的提交压缩,然后手工提交变成一次提交。
    git merge origin/master # 合并远程的master分支到当前分支

  • 变基分支
    git rebase master # 将当前分支的修改重新变基到master分支上
    git rebase –on-to <new_base> <current_base> #
    将当前分支在<current_base>基础上的修改变基到<new_base>分支上

  • 分支管理
    git branch # 查看所有的分支,带*号的是当前所在分支
    git branch -d hotfix # 删除hotfix分支
    git branch -D hotfix # 强制删除hotfix分支
    git branch –merged #
    查看与当前分支合并过的分支,只要合并过的分支即使删掉也不用担心
    git branch –no-merged # 查看与当前分支没有合并过的分支

  • 远程分支
    git push origin abc # 将本地分支abc保存到远程
    git push origin :abc # 将远程分支abc删除
    git branch -a #查看目录下的所有分支

在www仓库约定只有以自己名字开头的分支才能新增和删除,比如对于panweizeng来说
git push origin panweizeng/abc # OK
git push origin fudongping/abc # FAIL

切换分支

配置用户名

GitWorkingFlow

图片 1

git checkout hotfix

git config --global user.name "xxx"  

从master分支建立develop分支,然后在develop分支上进行开发。

git checkout master # 切换到master分支
git checkout -b develop # 从master创建develop分支,并切换到该分支
git commit -m “fix bug 1” # 修复了bug1
git commit -m “fix bug 2” # 修复了bug2

注意这里是 checkout,前面见过 checkout 了吧,感觉 checkout
参数一变,功能大变啊,不管,就连官方也有这种感触。

配置邮件

在develop开发已经完毕(修复bug或者添加新特性),这时从develop创建mirror分支。

git checkout -b mirror # 从develop创建mirror分支,并切换到该分支

切换分支后,我们可以在 git 命令行中看到原来路径后面跟的 (master)
已经变成了 (hotfix)。

git config --global user.email "xxx@xxx.com"  

更新master到最新,把master的代码更新合并到mirror。如果有冲突,请解决冲突后提交。

git checkout master
git pull # 更新master到最新
git checkout mirror
git merge master # 合并master到mirror

切换分支后,我们工作区的文件也会发生变化,工作区文件也会切换到对应分支之前存储的内容。

git status等命令自动着色

把mirror分支的代码更新合并到master,然后推送到远程

git checkout master
git merge mirror –squash # 压缩合并mirror分支上的代码更新
git commit -a -m ‘xxxx’ #注意需要进行一次提交
git push # 推送到远程

想一步到位,创建分支同时切换分支?

git config --global color.ui true                        
git config --global color.status auto
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto

特点

  • 单主分支结构,即远程和本地都以master作为主分支,工程师在develop分支上开发
  • 本地master作为远程master和本地develop的桥梁,主要做pull和push的操作,保证和远程master同步
  • develop开发完成后,从develop创建mirror用于合并master上最新的改动,合并成功(可能要解决冲突)后,再在master上合并mirror分支并push到远程
  • 发布脚本更新发布机器上的master到最新版本,建立master的发布tag,然后开始线上部署
  • 线上代码稳定后,删除develop和mirror分支

git checkout -b hotfix

clone远程仓库

注意事项

  • 不要在master上进行开发,master分支是连接远程代码库和本地分支的桥梁,桥梁的功能只有一个就是连接;
  • mirror分支的作用是,如果合并发生冲突,可以保留一份干净的副本,如果改动很小,这个分支也可以不要;
  • develop和mirror分支的名字只要是非master的任意名字都可以,比如hotfix,
    new-mobile等等;

加个参数,checkout 又具备创建分支功能了。

git clone git+ssh://git@192.168.53.168/VT.git            

Git开发与上线流程

如果切换分支的时候,工作区文件有变更怎么办?

查看当前版本状态(是否修改)

Git开发

1.从master创建开发分支并提交修改

git checkout master
git pull # 切换到master,并更新到最新
git checkout -b develop # 创建develop分支,并切换到此分支
vim && rm && … # 任意发挥,随意修改添加代码
git add …(modified files) # 添加修改后的代码文件
git commit -m “some things” # 提交修改至develop分支

webreview username #提交review,例如webreview
weiziqian,会自动生成review页面并邮件通知
#或者使用stash,创建远程开发分支,然后checkout,开发完后使用pull
request提交review

如果切换分支的时候,有文件修改了,即使它已经 add
到暂存区,都不会切换成功,git 建议我们切换之前要么 commit 之,要么 stash
之。

git status                                               

Git上线

1.如果修改范围很大,则需要创建合并分支;否则此部分可以忽略

git checkout -b mirror # 从develop创建mirror分支,并切换到该分支

2.在镜像分支上合并修改

git checkout master
git pull # 首先切换并更新master到最新
git checkout mirror
git merge master # 合并master到mirror;如果冲突需解决冲突

3.提交合并后的代码

git checkout master
git merge mirror –squash # 压缩合并mirror分支上的代码
git commit -m ‘things again’ # 提交至master分支

4.同步至test.meituan并测试

sync.git sync
#同步本地master代码至线上test机器,后可以访问www.test.meituan.com来测试修改
#可以登录test机器修改自己的代码,比如添加debug日志,查看配置等
#ssh relay && ssh web-fe01
#cd /opt/meituan/test_www/

5.测试完成,正式提交

git push #推送本次修改至版本库。然后可以通知大神们更新线上代码了

查看分支

添加xyz文件至index

项目管理https://www.tapd.cn/

北京三快科技有限公司

git branch # 查看本地分支,其中当前分支前面有 *
git branch -r # 查看远程分支
git branch -a # 查看本地和远程分支,其中远程分支以 remotes 开头
git branch -v # 查看每个分支的最后一次提交
git branch –merged # 查看已经合并的分支
git branch –no-merged # 查看所有包含未合并工作的分支

git add xyz                                              

跳板机jumper

合并、删除分支

增加当前子目录下所有更改过的文件至index

git checkout master # 切换到 master 分支
git merge hotfix # 将 hotfix 分支合并到 master(当前分支)
git branch -d testing #
删除分支;如果是未合并分支,则会失败;如果要强行删除未合并分支,使用 -D
参数

git add .                                                

推送分支

提交

git push origin hotfix:hotfix

git commit -m 'xxx'                                      

origin 是默认的远程仓库名称,冒号前后分别表示本地、远程分支名称。

合并上一次提交(用于反复修改)

本地分支可以用 HEAD 表示(HEAD
表示当前分支),远程分支不行,远程分支这样写的话,会创建一个叫 HEAD
的分支。

git commit --amend -m 'xxx'                              

绑定分支,简化推送

将add和commit合为一步

前面推送的时候,需要指定远程仓库名称,本地、远程分支名称,比较麻烦,建议绑定。

git commit -am 'xxx'                                     

git push –set-upstream origin hotfix

删除index中的文件

这样本地分支和远程分支就绑定起来了,以后我们使用 git push 就可以推送
hotfix 了,不需要写那么长一串了。

git rm xxx                                               

拉取分支

递归删除

git pull origin hotfix:hotfix

git rm -r *                                              

此时冒号前面的是远程库中的分支,冒号右边的是本地库中的分支。

显示提交日志

  • Git 实战-特性介绍
  • Git
    实战-添加、提交、推送
  • Git 实战-下拉
  • Git 实战-撤销、恢复
  • Git 实战-分支
git log                                                  

显示1行日志 -n为n行

git log -1                                               
git log -5

显示提交日志及相关变动文件

git log --stat                                           
git log -p -m

显示某个提交的详细内容

git show dfb02e6e4f2f7b573337763e5c0013802e392818        

可只用commitid的前几位

git show dfb02                                           

显示HEAD提交日志

git show HEAD                                            

显示HEAD的父(上一个版本)的提交日志 ^^为上两个版本 ^5为上5个版本

git show HEAD^                                           

显示已存在的tag

git tag                                                  

增加v2.0的tag

git tag -a v2.0 -m 'xxx'                                 

显示v2.0的日志及详细内容

git show v2.0                                            

显示v2.0的日志

git log v2.0

显示所有未添加至index的变更

git diff                                                 

显示所有已添加index但还未commit的变更

git diff --cached                                        

比较与上一个版本的差异

git diff HEAD^                                           

比较与HEAD版本lib目录的差异

git diff HEAD -- ./lib                                   

比较远程分支master上有本地分支master上没有的

git diff origin/master..master                           

只显示差异的文件,不显示具体内容

git diff origin/master..master --stat                    

增加远程定义(用于push/pull/fetch)

git remote add origin git+ssh://git@192.168.53.168/VT.git

显示本地分支

git branch                                               

显示包含提交50089的分支

git branch --contains 50089   

显示所有分支

git branch -a      

显示所有原创分支

git branch -r    

显示所有已合并到当前分支的分支

git branch --merged    

显示所有未合并到当前分支的分支

git branch --no-merged  

本地分支改名

git branch -m master master_copy  

从当前分支创建新分支master_copy并检出

git checkout -b master_copy

上面的完整版

git checkout -b master master_copy 

检出已存在的features/performance分支

git checkout features/performance 

检出远程分支hotfixes/BJVEP933并创建本地跟踪分支

git checkout --track hotfixes/BJVEP933 

检出版本v2.0

git checkout v2.0 

从远程分支develop创建新本地分支devel并检出

git checkout -b devel origin/develop  

检出head版本的README文件(可用于修改错误回退)

git checkout -- README  

合并远程master分支至当前分支

git merge origin/master  

合并提交ff44785404a8e的修改

git cherry-pick ff44785404a8e 

将当前分支push到远程master分支

git push origin master    

删除远程仓库的hotfixes/BJVEP933分支

git push origin :hotfixes/BJVEP933  

把所有tag推送到远程仓库

git push --tags      

获取所有远程分支(不更新本地分支,另需merge)

git fetch            

获取所有原创分支并清除服务器上已删掉的分支

git fetch --prune  

获取远程分支master并merge到当前分支

git pull origin master

重命名文件README为README2

git mv README README2                                    

将当前版本重置为HEAD(通常用于merge失败回退)

git reset --hard HEAD                                    
git rebase

删除分支hotfixes/BJVEP933(本分支修改已合并到其他分支)

git branch -d hotfixes/BJVEP933

强制删除分支hotfixes/BJVEP933

git branch -D hotfixes/BJVEP933  

列出git index包含的文件

git ls-files    

图示当前分支历史

git show-branch                                          

图示所有分支历史

git show-branch --all                                    

显示提交历史对应的文件修改

git whatchanged                                          

撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818

git revert dfb02e6e4f2f7b573337763e5c0013802e392818      

内部命令:显示某个git对象

git ls-tree HEAD                                         

内部命令:显示某个ref对于的SHA1 HASH

git rev-parse v2.0                                       

显示所有提交,包括孤立节点

git reflog                                               
git show HEAD@{5}

显示master分支昨天的状态

git show master@{yesterday}                              

图示提交日志

git log --pretty=format:'%h %s' --graph                  
git show HEAD~3
git show -s --pretty=raw 2be7fcb476

暂存当前修改,将所有至为HEAD状态

git stash                                                

查看所有暂存

git stash list                                           

参考第一次暂存

git stash show -p stash@{0}                              

应用第一次暂存

git stash apply stash@{0}                                

文件中搜索文本“delete from”

git grep "delete from"                                   
git grep -e '#define' --and -e SORT_DIRENT
git gc
git fsck

 

git checkout — 文件名

把该文件在工作区的修改全部撤销,这里有两种情况:

一种是文件修改后还没有放到暂存区(也就是还没有执行git
add),现在撤销修改就回到和版本库一样的状态;

一种是文件修改后已经添加到暂存区(已经执行了git
add),又做了修改,撤销修改就回到了添加到暂存区后的状态;

总之,就是让这个文件回到最近执行git commit或git add时的状态。

注意中间的”–“很重要,没有“–”,就变成了“切换到另一个分支”的命令。

图片 2

 

git reset HEAD 文件名

把暂存区的修改撤销掉(unstage),重新放回工作区。

git
reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,当我们用HEAD时,表示最新的版本。

图片 3

 

 git rm 文件名

在工作区中增加一个文件,并添加到本地分支中。但是如果你不需要这个文件了。你直接用”rm
文件名”删除该文件。这个时候,Git知道你删除了文件,因此,工作区和版本库就不一样了。git
status可以查看当前的情况。

此时有两个选择:

1.确实要从版本库中删除该文件,就用命令”git rm 文件名”删掉,并且git
commit提交,此时该文件就真正从版本库中删除了。

2.另一种情况是删错了,因为版本库中还有该文件,所以可以把误删的文件恢复到最新版本,“git
checkout — 文件名”。“git
checkout”就是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

  

git remote add origin ***github仓库地址

关联一个远程仓库。在第一次提交之前进行。

git remote -v

查看远程仓库的地址。

git remote rm origin 

删除原来的远程仓库地址。

 

git push -u origin master

第一次推送master分支的所有内容。

 

git push origin master

以后每次的修改使用该命令。

 

关于分支:

在版本回滚里,每次提交,Git都把他们串成一条时间线,这条时间线就是一个分支。到目前为止,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD指针严格来说不是指向提交,而是指向master,master才是指向提交的。所以,HEAD指向的就是当前分支。

 

git checkout -b dev

创建一个dev分支,然后切换到dev分支。

图片 4.

 

(22)分支管理策略

1.通常合并分支时,如果可以,Git会使用Fast
Forward快进模式,但这种模式下,删除分支后,会丢掉分支信息。我们可以使用–no-ff方式的git
merge.

2.git checkout -b dev

仍然创建并切换到dev分支。

3.git add .

git commit -m “merge –no-ff”

在dev分支下进行提交。

4.git checkout master

切换到master分支下。

5.git merge –no-ff -m “merge with no-ff” dev

合并使用–no-ff参数,表示禁用Fast
Forward。因为本次合并要创建一个新的commit,所以加上-m参数。

6.git log –graph –pretty=oneline –abbrev-commit

查看分支历史。注意使用–abbrev-commit
参数可以把commit的40为hash值缩短为7位,方便查看。

图片 5

7.分支策略:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活。干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master上发布1.0版本。每个人都有自己的分支,时不时往dev分支上合并就可以了。

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出曾经做过合并。而fast
forward合并就看不出曾经做过合并。默认是“fast forward”.

  

Bug分支

每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

1.git stash

把当前的工作现场储藏起来,等以后回复现场后继续使用。

git stash list

查看当前分支中存储的stash

图片 6

 

2.git status

此时在dev分支中查看工作区,是干净的。因此可以放心的创建分支来修复bug。

图片 7

 

3.git checkout master

git checkout -b issue-101

首先确定要在哪个分支上修复bug,假定要在master分支上修复,就从master创建临时分支。

图片 8

 

4.在issue-101上修复bug,提交。

图片 9

 

5.git checkout master

git merge –no-ff -m “修复完成,合并issue-101分支” issue-101

git log –graph –pretty=oneline –abbrev-commit

合并bug分支。

图片 10

 

6.git branch -d issue-101

删除bug分支。

图片 11

 

7.git checkout dev

git status

再次回到dev分支干活,工作现场是完全干净的。

图片 12

 

8.git stash list

查看当前的工作现场。Git把stash内容存储在某个地方了。我们需要恢复现场。

图片 13.

 

9.git stash pop

git stash list

在恢复内容的同时把stash的内容也删了。

图片 14.

 

10.git stash apply

git stash drop

这两行命令相当于“git stash pop”. 用“git stash
apply”恢复,但是恢复后,stash内容并不删除,需要用“git stash
drop”来删除。

图片 15

 

11.git add .

git commit -m “在dev分支提交”

把dev分支工作的内容提交。等下要合并到master分支。

图片 16

 

12.git checkout master

git merge –no-ff -m “合并dev分支的工作内容” dev

如果有冲突,则手动修改。

图片 17

 

13.git add .

git commit -m “合并了dev后的master提交”

git branch -d dev

手动解决冲突后,在master提交,然后删除dev分支。

图片 18

 

14.小结:修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除。

当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

 

 

(24)Feature分支

1.添加一个新功能,你肯定不希望因为一些实验性质的代码,把主分支搞乱了。所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后删除feature分支。

当开发完成后,如果在还没有合并之前,这个新功能不需要了。就需要删除该分支。

git branch -d feature-net

图片 19.

 

2.git branch -D feature-net

注意:1中的删除无法成功,因为该分支还没有被合并,如果删除,将丢失修改。如果要进行强行删除,要使用”git
branch -D feature-net”命令。

图片 20

3.小结:开发一个新的feature,最好新建一个分支。如果要丢弃一个没有被合并过的分支,可以通过git
branch -D <name>强行删除。

 

(25)git remote 

查看远程库的信息。

git remote -v

显示详细信息。显示了可以抓取和推送的origin地址。如果没有推送的权限,就看不到push的地址。

图片 21

 

 

(26)多人协作

1.推送分支:就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上。

git push origin master

如果要推送到其他分支,比如dev,就改成:

git push origin dev

但是并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些分支不需要呢?

–master分支是主分支,因此要时刻与远程同步;

–dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

–bug分支只用于在本地修复bug,没必要推送到远程;

–feature分支可以看实际开发需要。

 

2.抓取分支

git checkout -b dev origin/dev 

创建远程origin的dev分支到本地。

 

git branch –set-upstream dev origin/dev

设置本地dev与远程origin/dev分支的链接。

 

3.多人协作的模式:

–首先,可以试图用git push origin branch-name推送自己的修改;

–如果推送失败,因为远程分支比你的本地分支版本新,需要先用git
pull视图合并;

–如果合并有冲突,则解决冲突,并在本地提交;

–没有冲突或者解决冲突后,再用git push origin branch-name推送就能成功。

–如果git pull提示“no tracking
information”,则说明本地分支和远程分支的链接关系没有创建,用命令”git
branch –set-upstream branch-name origin/branch-name”.

4.小结

–查看远程库信息,使用“git remote -v”;

–本地新建的分支如果不推送到远程,对其他人就是不可见的;

–从本地推送分支,使用“git push origin
branch-name”,如果推送失败,先用”git pull”抓取远程的新提交;

–在本地库创建和远程分支对应的分支,使用“git checkout -b branch-name
origin/branch-name”,本地和远程分支的名称最好一致;

–建立本地分支和远程分支的关联,“git branch –set-upstream branch-name
origin/branch-name”;

–从远程抓取分支,使用git pull.如果有冲突,要先处理冲突。

 

 

(27)标签管理

发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

Gitde
标签虽然是版本库的快照,但其实他就是指向某个commit的指针。所以,创建和删除标签都是瞬间完成的。

 

 

(28)创建标签

git tag v1.0

切换到要打标签的分支上,执行“git tag
v1.0”,默认是打在最新提交的commit上。

 

git tag 

查看所有的标签。

图片 22.

 

git tag v1.1 commit_id

标签可以打在任意一个提交上。

 

git show v1.0

查看标签信息。

图片 23.

 

(29)操作标签

1.git tag -d v1.0

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

图片 24

 

2.git push origin v1.0

推送某个tag到远程分支。

图片 25

 

 

3.git push origin –tags

一次性推送全部尚未推送到远程的本地标签。

图片 26

 

4.如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除

git tag -d v1.0

然后从远程删除。删除命令也是push,但是格式如下:

git push origin :refs/tags/v1.0

图片 27.

 

5.小结:

–命令“git push origin <tagname>”:可以推送一个本地标签;

–命令“git push origin –tags”:可以推送全部未推送的本地标签;

–命令”git tag -d <tagname>”:可以删除一个本地标签;

–命令“git push origin
:refs/tags/<tagname>”:可以删除一个远程标签。

发表评论

电子邮件地址不会被公开。 必填项已用*标注