git总结(6)里程碑,分支,远程版本库

git总结(6)

里程碑

先从命令开始

    git tag ##查看里程碑
    git tag -n1##查看里程碑包含说明,n后面的数字代表最多显示几行
    git tag -l my*##过滤自己想要的里程碑
    git log --decorate ##可以查看提交对应的里程碑,及其他引用
    git describe ##显示当前提交对应的里程碑,如果当前提交没有对应的里程碑就显示最近的里程碑-距离-id
    git describe --dirty ##如果工作区对文件有修改就可以通过--dirty表示出来
    git name-rev HEAD ##默认优先显示分支名
    git name-rev --tags##优先使用里程碑名

    ##创建里程碑

    git tag <tagname>[<commit>]##创建轻量级里程碑,不建议使用,git describe 默认不显示轻量级里程碑
    git tag -a <tagname>[<commit>]
    git tag -m <message> <tagname>[<commit>] ##和上面一样创建里程碑的同时带上说明

    git tag -s <tagname>[<commit>]
    git tag -u <keyid> <tagname>[<commit>]创建带签名的里程碑
  • 轻量级里程碑使用cat .git/refs/tags/<tagname>对应一个id,这个id就是所对应提交的id
  • 带说明的里程碑和带签名的里程碑 cat .git/refs/tags/<tagname>对应一个id这个id对应的是一个tag对象其中包含里程碑对应的提交,里程碑的名字,里程碑的说明,提交人等信息
  • 尽量不要使用轻量级里程碑,git describe 默认不显示轻量级里程碑,如果要显示需要加上–tags参数、
  • git tag -d <tagname>删除里程碑,然后会返回一个Id可以根据这个id 执行 git tag<tagname> <id>重新恢复里程碑
  • git push <tagname>将里程碑共享到远程版本库中
  • git pudh :<tagname>将远程版本库中的里程碑删除
  • 里程碑需要显示推送,但pull的时候默认会自动拉取远程版本库中的里程碑
  • 里程碑推送之后最好不要更改,如果非要更改必须加上-f参数,重新将里程碑推送到远程版本库
  • 更改后的里程碑不会重新拉取,因为git默认不会对同名的里程碑再次拉取,必须手动执行 git pull origin refs/tags/<tagname>:refs/tags/<tagname>

分支

先从命令开始

git branch ##查看分支
git branch -r ##查看远程分支
git branch <分支名> ##新建分支
git checkout -b <分支名> ##新建并切换到新的分支上
git branch -d ##删除分支
git branch -D  ##默认git是不会删除尚未合并的分支,这个命令可以强制删除
git branch -m ##修改分支名
git branch -M强制修改分支名

分支的应用

分支是代码管理很重要的工具,很多协同管理模式,都是通过分支的创建合并等操作完成的。灵活使用分支才能感觉到git 的强大那么先简单说几种类型的分支

发布分支

发布分支又称bug分支,传统的开发流程是当发现bug后在本地修复bug然后将bug修复完成后并将新的进度注销,然后将改好的代码重新编译发给用户,这个过程非常繁琐,而且会导致bug接着bug ,很不好用。
那么git 的发布分支是怎样的呢?
假设这样一个场景:
我们的应用程序发布了v1.0版本编译后交给用户使用,然后用里程碑在这个位置打上标记,然后我们接着在主线上提交代码,这时候用户反映有bug ,我们当然知道这bug是v1.0的因为我们正在开发的代码还没上线。那么首先要做的是针对v1.0里程碑新建一个发布分支,git checkout -b bugfix v1.0,接着我们在这个分支上面将bug 解决测试无误后提交,然后编译,将其交给用户。接着我们切回master 这时同样的bug也出现在master分支,因为master分支也是从v1.0来的,我们可以使用git cherry-pick <commit>将刚刚的提交拣选到master分支上,接着继续之前的开发。用户再报出bug就继续重复上面的步骤,切到v1.0修复bug提交,交给用户,切回master,将修复bug的提交拣选到master分支。

特性分支

什么情况下要使用特性分支呢?
* 实验性的探索性的功能使用特性分支
* 功能复杂开发周期长的部分可以使用特性分支
* 会更改软件 架构,破坏软件集成或者容易导致冲突影响他人开发的部分要建立特性分支

特性分支,就是在一个分支上面进行上述的开发和主分支并行开发。

卖主分支

所谓卖主分支就是在项目中需要引入第三方的软件,或者说我们的项目是在第三方软件上进行二次开发和定制。这样我们需要在git中为上游的软件(第三方)建立一个卖主分支,当上游有更新时,我们将其pull到我们的卖主分支,然后将最新的变动,cherry-pick进我们的主分支。

如果我们对上游软件改动过大,其中冲突解决起来可能非常复杂,后面的topgit协同模型,会介绍一个,
解决此问题的更好方案。

远程分支

当我们从远程版本库克隆一个项目时执行 git branch 会发现找不到远程版本库的分支
想查看远程版本库的分支需要执行 git show-ref 可以看到 refs/remote/heads下的分支是远程分支
或者使用git branch -r 查看远程分支,我们可以针对远程分支检出一个新的分支,简单命令是git checkout -b <branchremote> 检出远程分支,但如果远程本地分支有和远程重名的就需要使用命令 git checkout <newbranch> origin/<branchname>

远程分支的追踪

如果是用上面的两个命令根据远程分支创建本地分支,会自动对远程分支进行跟踪,可以在 配置文件中看到如下配置
[branch “hello-1.x”]
remote = origin
merge = refs/heads/hello-1.x
其中remote 代表分支所对应的远程版本库,merge是执行pull执行合并操作时所对应的分支名称
针对本地创建分支是没有分支追踪功能的需要加上参数–trach这样,根据本地分支创建的分支也具有了分支追踪的功能。

在分支上执行push pull(不带参数) 操作默认会推动到origin是因为配置了 上面配置了分支的remote =origin ,我们可以改变remote所对应的分支名,这样就改变了默认pull push (不带参数)操作所针对的远程版本库

远程版本库

先从命令开始

git remote ##查询远程版本库
git remote add <newremote> <url> ##新增远程版本库
git remote remove <remotename>##删除远程版本库
git remote rename <oldname> <newname>##改变远程版本库对应的名字
git remote set-url <remotename> <newurl>##设置远程版本库的url
git remote set-url --push <remotename> <url>##单独设置远程版本库的push url
git remote -v ##查询远程版本库并显示fetch url 和 push url

执行git remote add <newremote> <url> 新增远程版本库会在config文件中增加类似如下配置
[remote “new-remote”]
url = file:///path/to/repos/hello-world.git/
fetch = +refs/heads/:refs/remotes/new-remote/
url 代表的就是远程版本库的地址
fetch 代表fetch 时执行的默认操作 +refs/heads/:refs/remotes/new-remote/就是将远程版本库中refs/heads/的分支强制覆盖到本地的refs/remotes/new-remote/下

可以使用git remote -v 查看push 操作 和 fetch url对应的url这两个url可以是不一样的。

git remote rename <oldname> <newname>更改远程版本库的名字,并且配置文件和远程版本库下的分支也会做相应的修改,执行git remote -v 和git branch -r 会发现相应的版本库名字都发生了变化。

如果版本库太多想同时更新 可以执行 git branch update批量对版本库进行更新操作,如果不想某个版本库在执行git branch update时做出更新可以使用git config remote.<remotename>.skipDefaultUpdate true.

如果不想获取某个远程版本库上的里程碑 可以在git fetch 后面加上–no-tags 或者 -n 也可以在新增远程版本库时git remote add –no-tags <remotename> <url>

一些安全上的设置

可以通过设置git config –global core.logallrefupdates true来让版本库建立的每个分支都创建对应的reflog
git config –global receive.denyNonFastForwards true 关闭非快进式提交
git config –global receive.denyDeletes 关闭分支删除功能
在后面服务器搭建的时候会有更详细更精确的策略来既保证版本库的安全又不会矫枉过正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值