git学习

作者: 子皙丶 | 来源:发表于2020-01-24 16:38 被阅读0次

    分支模型

    1. 产品级的分支模型

    常驻分支(一旦创建不会轻易被删除):

    • master分支(也就是production分支)
    • development分支(从master创建的,开发分支)

    活动分支(创建后可能会被删除):

    • feature(从development创建,开发人员一般都用这个)
    • hotfix分支( 从master创建,产品发布后发现bug了,修改bug就在这个分支上)
    • release分支(从development创建,测试以及产品预发布用的)
    1. 开发线和发布线


      开发线.png
      发布线.png
    2. init status

    • git init 初始化一个仓库
    • git status 对目前的仓库状态的跟踪

    按照文件内容分:工作目录,暂存区index,提交区history
    按照文件状态分:未跟踪untrack,已跟踪track

    1. add
    • git add <file> 提交文件到暂存区,同时被跟踪
    • git add . 提交所有已修改的文件到暂存区,同时被跟踪
    1. .gitignore
    • # 此为注释 –,将被 Git 忽略
    • *.a 忽略所有.a结尾的文件
    • !lib.a 但lib.a 除外
    • /TODO 仅仅忽略项目根目录下的TODO文件,不包括subdir/TODO
    • build/ 忽略build目录下的所有文件
    • doc/*.txt 忽略doc/note.txt 但不忽略 doc/subdir/note.txt
    1. rm
    • git rm --cached <file>仅仅从暂存区删除文件(如果已经提交到暂存区了,此时再去gitignore中添加忽略文件是没有作用的,怎么办呢?那就是先删除暂存区中的被跟踪的文件,再添加忽略文件
    • git rm <file>从暂存区和工作目录中同时删除文件
    • git rm $(git ls-files —deleted) 删除所有已被跟踪,但是在工作目录中已经被删除的文件
    1. commit
    • git commit -m 从暂存区提交到提交区 m 是写的这次提交的注释
    • git commit -a -m 直接从工作区提交到提交区,不经过暂存区
    1. log
    • git log 显示提交的日志
    • git log —oneline 简化日志内容
    • git log --color --graph --pretty=format:'%Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit美化一下显示的日志

    这么长的命令怎么办呢?请看下一个命令

    1. alias
    • git config alias.shortname <fullcommand> 给命令起个别名,

    shortname就是起的别名
    fullcommand是命令

    例如上述的日志记录太长了,可以起个别名直接调用它(如下)
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    这样一来就可以这样使用了git lg就可以了

    alias这个命令的配置项都在.gitconfig中配置的

    1. diff
    • git diff工作目录和暂存区的差异
    • git diff --cached <reference>暂存区和某次提交的差异,reference是提交的hash值
    • git diff <reference> 如果reference是一个值则是工作目录和某次提交的差异,两个值则是两次提交的差异

    eg : git diff 951c4c6 则是工作目录和951c4c6提交那次的差异eg : git diff 951c4c6 a1b6ddc 则是两次提交的差异对比

    1. checkout
    • git checkout -- <file> 撤销工作目录的修改,也就是从暂存区复制到工作目录
    • git checkout HEAD -- <file>直接从上次提交区复制到工作目录(也就是history到index)
    1. reset
    • git reset HEAD <file> 撤销暂存区的内容,也就是把上次提交区复制到暂存区
    • git reset --mixed <reference> 回退到某个版本(mixed是默认的可以不写),此时head已经指向了新的版本节点,同时清空暂存区,工作目录不动,但是会把head移动所产生的内容变动以及暂存区的变动全部放到工作目录中
    • git reset --hard <reference> 回退到某个版本,此时head已经指向了新的版本节点,同时清空暂存区和工作目录的一切修改,保持和提交区一致的版本
    • git reset --soft <reference> 回退到某个版本,此时head已经指向了新的版本节点,但是工作目录和暂存区不动,并且会把head移动所产生的内容变更放到暂存区中

    HEAD~1 表示当前节点的上一个节点,也就是上一次提交,同理HEAD~n就是上n次提交(可以代替reference也就是hash值,表示起来更方便)
    HEAD^ 和 HEAD~1 一样,HEAD^^ 和 HEAD~2 一样

    总结.png
    1. branch
    • git branch <branchname> 新建一个分支
    • git branch -d <branchname> 删除某一个分支
    • git branch -v 列出所有的分支
    • git checkout <branchname> 切换分支
    • git checkout - 切换到上一个分支
    • git checkout -b <branchname> 创建分支并head指向这个分支
    • git checkout <reference> 会让head指向一次commit提交

    这种情况属于detached head状态,这种情况下是不能提交代码的,因为head此时没有指向任何一个分支,怎么解决呢?一种是将head指向某个分支,git checkout dev,然后在进行操作。一种是在当前位置,git branch new,创建一个新的分支,然后在进行操作

    1. stash
    • git stash save 'm' 假如我在这分支有一些操作,还没操作完,但是需要切换到别的分支,此时就可以使用这个命令,暂时把状态保存起来,m是注释,方便你切换回来的时候可以找到它
    • git stash list 列出所有的stash
    • git stash pop stash@{0} 想要切换回来时调用,stash{0}就是你要切换回来的那个stash,可以从list中查找
    1. merge
    • git merge <branch> 把分支合并到当前分支
    • git merge <branch1> <branch2> 合并两个分支到当前所在分支
    1. tag
    • git tag 设置别名,例如在发布一个版本后我想在这个版本上打个版本号

    git tag v0.1 <reference> 这样的话就知道这次的版本号是v0.1,我们获取代码的时候可以直接git checkout v0.1 就可以获取这个版本了

    起别名v0.1.png
    1. 远程仓库
    • git clone <远程仓库地址> 克隆一份远程仓库到本地
    • git push origin master 提交代码到远程仓库
    • git pull origin master 拉去最新的代码从远程仓库到本地
    • git remote -v 查看远程仓库的配置
    1. 整体配置

    一般都是在.gitconfig中进行配置的,文件位置在C:\Users\用户名.gitconfig

    将如下内容拷贝到配置文件中:

    [user]
        name = 你的名字
        email = 你的邮箱
    
    [alias]
        opush = push origin
        opull = pull origin
        br = branch
        co = commit
        st = status
        df = diff
        me = merge
        ch =checkout
        lg = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
        l = log
        lp = log --pretty=oneline
    
    [color]
        ui = auto
    
    [color "branch"]
        added = yellow
        changed = green
        untracked = cyan
    
    [color "diff"]
        meta = yellow
        frag = magenta bold
        commit = yellow bold
        old = red bold
        new = green bold
        whitespace = red reverse
    
    [color "diff-highlight"]
        oldNormal = red bold
        oldHighlight = red bold 52
        newNormal = green bold
        newHighlight = green bold 22
    

    相关文章

      网友评论

          本文标题:git学习

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