zoukankan      html  css  js  c++  java
  • git入门 创建版本库, 版本管理 分支 标签

    参考: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

     

    GIT最流行的分布式版本控制系统

    分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

     

    第一步: 安装

    我用的mac, 之前装了homebrew, 安装git很简单,

    brew install git

     

    第二步: 创建版本库(仓库)

    选择一个合适的地方,创建一个空目录

    $ mkdir ggg
    $ cd ggg
    $ pwd
    /Users/Newly/Desktop/ggg

    通过git init命令把这个目录变成Git可以管理的仓库:

    $ git init
    Initialized empty Git repository in /Users/Newly/Desktop/ggg/.git/

    把你要管理的文件 放入ggg文件夹

    第三步: 开始你的表演

    1. 设置邮箱 名字

    git config --global user.name'yourname'

    git config --global user.email 'xxx@xx.com'

     

    2. 添加文件到仓库缓存区

    —————— 工作区 -----------------

    git add 文件名 可反复多次使用,添加多个文件

    git add . 添加所有文件

    git status 查看状态

    On branch master

    No commits yet

    Changes to be committed:
    (use "git rm --cached <file>..." to unstage)

    new file:   gitbull/.idea/dictionaries/Newly.xml
    new file:   gitbull/.idea/encodings.xml
    new file:   gitbull/.idea/gitbull.iml
    ...

    3. 提交到仓库

    —————— 缓存区 ----------------

     

    git commit -m '详细的介绍'

     

    —————— 版本库 ---------------

    再次查看

    git status

    On branch master
    nothing to commit, working tree clean

     

    4. git用法操作

    修改一个文件, 然后查看状态 git status

    On branch master
    Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   gitbull/.idea/workspace.xml
    modified:   gitbull/templates/index.html

    no changes added to commit (use "git add" and/or "git commit -a")

     

    想要看修改后的文件 和 之前提交的文件有何不同

    在add添加之前执行查不同

    git diff

     

    git log 当前版本之前的提交记录

    git reflog 查看全部的

     

    git checkout — file;撤销对工作区修改;这个命令是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file;这个命令改变的是工作区

    git checkout 2c1170e

    出现在 “Changes not staged for commit” 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。要暂存这次更新,需要运行 git add 命令

    git reset HEAD — file;清空add命令向暂存区提交的关于file文件的修改(Ustage);这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何改变

     

    快照

    写到一半时候不想写了, 可以保存工作区快照

    git stash

    然后恢复到最新提交的状态

    想接着写了 就恢复那个快照

    先查看快照列表

    git stash list

    恢复之前写到一半的状态并删除快照

    git stash pop

    其他快照用法:

    删除快照

    git stash drop 7a8a720

    恢复快照

    git stash drop 7a8a720

     

    分支

    查看分支

    git branch

    创建 git branch dev (开发的代码 未上线的)

    git branch dev

    切换并创建分支

    git checkout -b bug

    删除分支

    git branch -d name

    切换分支

    git checkout master

    分支合并

    需要合并到哪儿 就到哪个分支

    git checkout master    
    git merge bug

     

    创建标签

    在Git中打标签非常简单,首先,切换到需要打标签的分支上:

    $ git branch
    * dev
    master
    $ git checkout master
    Switched to branch 'master'

    然后,敲命令git tag <name>就可以打一个新标签:

    $ git tag v1.0

    可以用命令git tag查看所有标签:

    $ git tag
    v1.0

    默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?

    方法是找到历史提交的commit id,然后打上就可以了:

    $ git log --pretty=oneline --abbrev-commit
    12a631b (HEAD -> master, tag: v1.0, origin/master) merged bug fix 101
    4c805e2 fix bug 101
    e1e9c68 merge with no-ff
    f52c633 add merge
    cf810e4 conflict fixed
    5dc6824 & simple
    14096d0 AND simple
    b17d20e branch test
    d46f35e remove test.txt
    b84166e add test.txt
    519219b git tracks changes
    e43a48b understand how stage works
    1094adb append GPL
    e475afc add distributed
    eaadf4e wrote a readme file

    比方说要对add merge这次提交打标签,它对应的commit id是f52c633,敲入命令:

    $ git tag v0.9 f52c633

    再用命令git tag查看标签:

    $ git tag
    v0.9
    v1.0

    注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息:

    $ git show v0.9
    commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9)
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 21:56:54 2018 +0800

      add merge

    diff --git a/readme.txt b/readme.txt
    ...

    可以看到,v0.9确实打在add merge这次提交上。

    还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

    $ git tag -a v0.1 -m "version 0.1 released" 1094adb

    用命令git show <tagname>可以看到说明文字:

    $ git show v0.1
    tag v0.1
    Tagger: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 22:48:43 2018 +0800
    
    version 0.1 released
    
    commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (tag: v0.1)
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 21:06:15 2018 +0800
    
        append GPL
    
    diff --git a/readme.txt b/readme.txt
    ...
    

    注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

    小结

    • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

    • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

    • 命令git tag可以查看所有标签。

     

    操作标签

    如果标签打错了,也可以删除:

    $ git tag -d v0.1
    Deleted tag 'v0.1' (was f15b0dd)
    

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

    如果要推送某个标签到远程,使用命令git push origin <tagname>

    $ git push origin v1.0
    Total 0 (delta 0), reused 0 (delta 0)
    To github.com:michaelliao/learngit.git
     * [new tag]         v1.0 -> v1.0
    

    或者,一次性推送全部尚未推送到远程的本地标签:

    $ git push origin --tags
    Total 0 (delta 0), reused 0 (delta 0)
    To github.com:michaelliao/learngit.git
     * [new tag]         v0.9 -> v0.9
    

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

    $ git tag -d v0.9
    Deleted tag 'v0.9' (was f52c633)
    

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

    $ git push origin :refs/tags/v0.9
    To github.com:michaelliao/learngit.git
     - [deleted]         v0.9
    

    要看看是否真的从远程库删除了标签,可以登陆GitHub查看。

    小结

    • 命令git push origin <tagname>可以推送一个本地标签;

    • 命令git push origin --tags可以推送全部未推送过的本地标签;

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

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

    常用命令

    • git init 初始化git仓库

    • git add file或者是. 将工作区的内容提交到缓存区

    • git commit -m "信息" 将缓存区的内容提交到版本库

    • git status 查看git的状态

    • git log 获取当前版本之前的提交记录

    • git reflog 获取所有的提交记录

    • git reset --hard md5 回退版本库

    • git reset HEAD file 将缓存区的文件还原到工作区

    • git checkout file 将工作区的文件回退到上次提交的地方

    • git stash 创建一个快照

    • git stash list 查看所有的快照

    • git stash pop 提取快照的内容,并删除快照 = git stash apply +git stash drop

    • git stash drop 删除快照

    • git stash apply 提取快照的内容

    • git branch 查看分支信息

    • git branch -d name 删除分支

    • git checkout -b name 创建分支并切换分支

    • git checkout name 切换分支

    • git merge name 在合并到的分支上执行

  • 相关阅读:
    【C#】工具类-FTP操作封装类FTPHelper
    网盘搜索网站
    在线服务
    Windows下安装NTP服务器
    vue 组件间的传值 + 路由守卫
    功能6 -- 选项卡数据缓存
    vue2.0/3.0
    vuex
    mySql笔记
    Typescript
  • 原文地址:https://www.cnblogs.com/niuli1987/p/10574337.html
Copyright © 2011-2022 走看看