美文网首页
3. 操作版本库

3. 操作版本库

作者: 牛崽儿酷 | 来源:发表于2017-03-22 14:28 被阅读0次

    重新设置user.name和user.email配置变量

    $ git config user.name "Tester"
    $ git config user.email "helloworld@gmail.com"

    新建分支

    Git的分支就是保存在.git/refs/heads/命名空间下的引用。引用文件的内容是该分支对应的提交ID。当前版本库中的默认分支master就对应于文件.git/refs/heads/master。
    若在GitHub版本库中创建分支,首先要在本地版本库中创建新的分支(即引用),然后用推送命令将本地创建的新的引用连同所指向的提交推送到GitHub版本库中完成GitHub上分支的创建

    • 本地版本库中建立新分支mybranch1
      创建分支有多种方法,如使用git branch命令,但最为便捷的就是git checkout -b命令,同时完成新分支的创建和分支切换。

    $ git checkout -b mybranch1
    Switched to a new branch 'mybranch1'

    • 为了易于识别,添加一个新文件hello1,并提交。

    $ touch hello1
    $ git add hello1
    $ git commit -m "add hello1 for mark."
    [mybranch1 f46a284] add hello1 for mark.
    0 files changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 hello1

    • 通过推送命令,将本地分支mybranch1推送到GitHub远程版本库,完成在GitHub上的新分支创建。

    $ git push -u origin mybranch1
    Counting objects: 4, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 281 bytes, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To git@github.com:gotgithub/helloworld.git
    * [new branch] mybranch1 -> mybranch1
    Branch mybranch1 set up to track remote branch mybranch1 from origin.

    在GitHub上查看版本库,会看到新增了一个分支mybranch1,不过默认分支仍为master

    设置默认分支

    可以通过Web UI改变GitHub上版本库显示的默认分支.设置了GitHub默认分支后,如果再从GitHub克隆版本库,本地克隆后版本库的默认分支也将改变。

    $ git clone git@github.com:yourname/helloworld.git helloworld-nb
    Cloning into 'helloworld-nb'...

    remote: Counting objects: 6, done.
    remote: Compressing objects: 100% (4/4), done.
    remote: Total 6 (delta 0), reused 6 (delta 0)
    Receiving objects: 100% (6/6), done.
    $ cd helloworld-nb
    $ git branch
    * mybranch1

    实际上修改GitHub上版本库的默认分支,就是将GitHub版本库的头指针HEAD指向了其他分支,如mybranch1分支。可以从git ls-remote命令看出头指针HEAD和引用refs/heads/mybranch1指向同一个对象的哈希值:

    $ git ls-remote origin
    4d970f2ac29554d18ae590747e59d47c5f7a0ceb HEAD
    1f1a4941c4ca9f83063c0e212de4bc47c69930d8 refs/heads/master
    4d970f2ac29554d18ae590747e59d47c5f7a0ceb refs/heads/mybranch1

    删除分支

    删除当前工作分支会报错。例如下面的命令试图分支mybranch1,但没有成功:

    $ git branch -d mybranch1
    error: Cannot delete the branch 'mybranch1' which you are currently on.

    错误信息显示不能删除当前工作分支。因此先切换到其他分支,例如从GitHub版本库中取出master分支并切换。

    $ git checkout master

    可以看出新的工作分支为master分支。

    $ git branch
    * master
    mybranch1

    现在可以删除mybanch1分支。下面的命令之所以使用-D参数,而非-d参数,是因为Git在删除分支时为避免数据丢失,默认禁止删除尚未合并的分支。参数-D则可强制删除尚未合并的分支。

    $ git branch -D mybranch1
    Deleted branch mybranch1 (was f46a284).

    现在只是本地分支被删除了,远程GitHub服务器上的mybranch1分支尚在。删除远程GitHub版本库中的分支就不能使用git branch命令,而是要使用git push命令.重新访问GitHub的项目管理页面,将缺省分支设置回master分支.

    $ git push origin :mybranch1 (冒号前为空)
    To git@github.com:yourname/helloworld.git
    - [deleted] mybranch1

    执行git ls-remote origin命令可以看到GitHub远程版本库已经不存在分支mybranch1。

    里程碑管理

    里程碑即tag,其管理和分支管理非常类似。里程碑和分支一样也是以引用的形式存在的,保存在.git/refs/tags/路径下。引用可能指向一个提交,但也可能是其他类型(Tag对象)。

    • 轻量级里程碑:用git tag <tagname> [<commit>] 命令创建,引用直接指向一个提交对象<commit>。
    • 带说明的里程碑:用git tag -a <tagname> [<commit>] 命令创建,并且在创建时需要提供创建里程碑的说明。Git会创建一个tag对象保存里程碑说明、里程碑的指向、创建里程碑的用户等信息,里程碑引用指向该Tag对象。
    • 带签名的里程碑:用git tag -s <tagname> [<commit>] 命令创建。是在带说明的里程碑的基础上引入了PGP签名,保证了所创建的里程碑的完整性和不可拒绝性。

    下面演示一下里程碑的创建和管理。

    • 先在本地创建一个新提交。

    $ touch hello1
    $ git add hello1
    $ git commit -m "add hello1 for mark."

    • 本地创建里程碑mytag1、mytag2和mytag3。

    $ git tag -m "Tag on initial commit" mytag1 HEAD
    $ git tag -m "Tag on new commit" mytag2
    $ git tag mytag3

    • 查看新建立的里程碑。

    $ git tag -l -n1
    mytag1 Tag on initial commit
    mytag2 Tag on new commit
    mytag3 add hello1 for mark.

    • 将本地里程碑推送到GitHub远程版本库。

    $ git push origin refs/tags/*
    Counting objects: 6, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (5/5), 548 bytes, done.
    Total 5 (delta 0), reused 0 (delta 0)
    To git@github.com:gotgithub/helloworld.git
    * [new tag] mytag1 -> mytag1
    * [new tag] mytag2 -> mytag2
    * [new tag] mytag3 -> mytag3

    • 删除本地里程碑。

    $ git tag -d mytag3
    Deleted tag 'mytag3' (was c71231c)

    • 删除GitHub远程版本库中的里程碑。

    $ git push origin :mytag3
    To git@github.com:yourname/helloworld.git
    [deleted] mytag3

    查看GitHub上的项目页-> releases,会看到已有两个里程碑

    相关文章

      网友评论

          本文标题:3. 操作版本库

          本文链接:https://www.haomeiwen.com/subject/nfjonttx.html