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+node.js+TDD

    目录 Git学习 node.js学习 用Nodejs和Git完成TDD编程 Git学习 Git是什么Git是一款免...

  • Git 学习笔记

    ----------------- Git 学习 ------------------ Git 简介 Git...

  • git 入门

    git 入门学习笔记----3个入门命令:git init、git add、git commit -v 学习场景(...

  • git技术,GitHub、GitLab

    git学习 Git教程(小白快速入门版) Git教程(简化版) git详细学习 Gitlab的管理使用手册git初...

  • Git常用命令与学习总结

    安装Git Git的下载地址:Git官网下载地址 学习网址 git 学习笔记- Book 在线练习地址 基础常用指...

  • Git学习之思维导图

    Git学习之思维导图 Git学习之思维导图

  • git记录

    Git Magic图解gitgit 学习笔记git游戏(学习)1、消除文档路径中文乱码git config --g...

  • git资源学习

    git资源学习 Git详解之一 Git起步 Git详解之二 Git基础 Git详解之三 Git分支 Git详解之四...

  • Git入门学习资源

    Git入门学习资料 廖雪峰 Git教程 Git官网 Pro Git git 简明指南 github-git-che...

  • 2018-04-18

    git学习小结 关于git init,git add,git commit 用法总结 1.首先配置git 全局配置...

网友评论

      本文标题:git学习

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