zoukankan      html  css  js  c++  java
  • Git总结

    1-0.创建版本库

    1   $ mkdir learngit    //创建一个空目录
    2   $ git init          //初始化一个Git仓库;
    3   $ git add <file>    //可反复使用;
    4   $ git commit        //完成提交;

    2-0 时光机穿梭

    1   $ git status        //时刻掌握仓库当前的状态;
    2   $ git diff <file>  //查看版本之间的不同;

    2-1 版本回退

     1   $ git log           //显示从最近到最远的提交日志;
     2   $ git log --pretty=oenline
     3   //将版本号和Msg显示在一行;
     4   $ git reflog        //查看命令历史;
     5   $ git reset --hard HEAD^
     6   //当前文件回退到上一个版本;
     7   $ git reset --hard 5134513<版本号>
     8   //回退到指定版本;
     9 
    10   //Git的版本回退速度很快,因为Git在内部有个指向当前版本的HEAD指针;当执行回退版本时,Git仅仅把HEAD指向设定的版本;

    2-2 工作区/暂存区和版本库

    1   工作区(Working Directory):电脑里能看到的目录;
    2   版本库(Repository):工作区里的隐藏目录.git;
    3   //Git的版本库存了很多东西,最重要的称为stage暂存区;
    4   //Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD;
    5   //git add命令实际上就是把提交的所有修改放到暂存区,然后执行git commit就可以一次性把暂存区的所有修改提交到版本库;

    2-3 管理修改

    1   Git追踪并管理的是修改,而非文件;每次修改,如果不add到暂存区,那就不会被commit到版本库中;
    2   $ git diff HEAD -- <file>
    3   //查看工作区和版本库里面最新的版本的区别;

    2-4 撤销修改

    1   $ git checkout -- <file>    //工作区;
    2   //可以撤销工作区的修改;
    3 
    4   $ git reset HEAD <file>     //暂存区;
    5   //可以撤销add到暂存区的修改;
    6   //git reset命令既可以回退版本,也可以把暂存区的修改退到工作区;当我们用HEAD时,表示最新的版本;
    7   
    8   //commit到版本库的修改只能用版本回退的方法;  //版本库

    2-5 删除文件

    1   //commit到版本库的文件,本地删除时,在版本库也要进行remove;
    2   $ git rm <file>           //删除文件;
    3   $ git commit -m "rm file"
    4 
    5   //工作区误删文件时
    6   $ git checkou -- <file>   //从版本库还原到工作区;

    3-0 远程仓库

    1   $ ssh-keygen -t rsa -C "email@example.com"
    2   //创建公钥;

    3-1 添加远程库

    1   $ git remote add origin git@github.com:xxx/learngit.git
    2 
    3   //将本地库推送到远程库
    4   $ git push -u origin master

    3-2 从远程库克隆

    1   $ git clone git@github.com.xxx/gitskill.git
    2   //Git支持多种协议,包括https和ssh,但通过ssh支持的原生git协议速度最快;

    4-0 分支管理

    1   Git分支无论创建/切换和删除,速度都很快;

    4-1 创建和合并分支

     1   //HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支;
     2   //一开始,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点;
     3   //当创建新的分支dev时,Git新建了一个指针dev,指向master相同的提交,再把HEAD指向dev,就表明当前分支在dev上;
     4   //Git创建一个分支,除了增加一个dev指针,改变HEAD的指向,工作区没有任何变换;
     5   //此时工作区的修改和提交都是针对dev分支了;
     6   //当dev上的工作完成时,就可以把dev合并到master上;直接把master指针指向dev的当前提交,就完成合并;
     7 
     8   $ git checkout -b dev   //创建并切换分支;
     9 
    10   $ git add readme.txt
    11   $ git commit -m "branch test"   //在dev分支上完成提交;
    12   [dev fec145a]
    13 
    14   $ git checkout master       //切换到master分支;
    15   $ git merge dev             //指定dev分支合并到当前分支;
    16 
    17   $ git branch -d dev         //删除dev分支

    4-2 解决冲突

    1    $ git merge feature1
    2   //CONFLICT (contetn):Merge conflict in readme.txt
    3   //此时需手动解决发生冲突的文件;

    4-3 分支管理策略

    1   //Git合并分支时会用Fast-forward模式,但这种模式下,删除分之后,会丢掉分支信息;
    2   $ git merge --no-ff -m "merge with no-ff" dev
    3   //禁用Fast-forward;因为本次合并要创建一个新的commit,所以加上-m参数;
    4 
    5   //master分支应该是非常稳定的,仅用来发布新版本;
    6   //dev分支是开发版本,稳定下来之后就merge到master;
    7   //guosk分支是自己单独开发的分支;完成任务向dev合并;

     4-4 Bug分支

     1   //执行stash命令,将当前工作现场"储藏"起来;
     2   $ git stash
     3   Saved working directory and index state WIP on dev:6224937 add merge
     4 
     5   //执行 $ git stash list,查看储藏的stash;
     6   $ git stash list
     7   stash@{0}:WIP on dev:6224937 add merge
     8 
     9   //执行 $ git stash apply恢复内容到工作区,恢复后stash内容并不删除;
    10   //执行 $ git stash drop来删除;
    11   $ git stash aply stash@{0}    //恢复指定的stash;
    12   
    13   //执行 $ git stash pop,恢复的同时将stash内容删除;

    4-5 Feature分支

    1   $ git checkout -b feature     //创建并切换;
    2 
    3   $ git branch -d feature       //删除分支;
    4   error:The branch 'feature' is not fully merged.
    5   //提示该分支未合并;
    6   
    7   $ git branch -D feature       //强制执行;
    8   Deleted branch feature (was 756d4af).

    4-6 多人协作

     1   //从远程库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来,并且,远程仓库的默认名称是origin;
     2   $ git remote        //查看远程库的信息;
     3   $ git remote -v     //显示远程库的更多信息;
     4 
     5   >.推送分支
     6   //把该分支上所有本地提交推送到远程库;推送时,要指定本地分支,Git就会把该分支推送到远程库对应的远程分支上;
     7   $ git push origin master
     8 
     9   >.抓取分支
    10   //从远程克隆master分支到本地
    11   $ git clone git@github.cm:xxx/learngit.git
    12 
    13   //创建远程origin的dev分支到本地;
    14   $ git checkout -b dev origin/dev
    15 
    16   //从远程库获取更新
    17   $ git branc --set-upstream dev origin/dev   //设置dev和origin/dev的连接;   直接pull会失败,因为没有指定本地dev分支与远程origin/dev分支的链接;
    18   $ git pull      //pull之后手动解决冲突;
    19 
    20   //1.首先,试图git push origin <branch-name>推送分支;
    21   //2.若推送失败,则因为远程分支比本地分支版本高,需要先用pull试图合并;
    22   //3.若合并有冲突,则解决冲突,并在本地提交;
    23   //4.没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送成功;
    24 
    25   //如果git pull提示"no tracking information",则说明本地分支和远程分支的链接关系没有创建,执行命令:git branch --set-uptream <branch-name> origin/<branch-name>

    5-0 标签管理

    1   //发布一个版本时,通常在版本库中打一个标签,这样就确定了打标签时刻的版本;选取标签时,就是把打标签的时刻的历史版本取出来;所以版本也是版本库的一个快照;
    2   
    3   //Git的标签虽然是版本库的快照,但其实它是指向某个commit的指针;

    5-1 创建标签

    1   $ git tag v1.0            //创建标签;
    2   $ git tag                 //查看所有标签;
    3   $ git tag v0.9 6224937    //为对应的版本号打标签;  
    4   $ git tag -a v0.1 -m "version 0.1 released" 3628164
    5   //创建带有说明的标签; "-a"指定标签;  "-m"指定说明

    5-2 操作标签

    1   $ git tag -d v0.1         //删除标签;
    2   $ git push origin v0.1    //推送标签;
    3   $ git push origin --tags  //推送全部标签;
    4   $ git push -d v0.9        //删除本地标签;
    5   $ git push origin :refs/tags/v0.9   //删除远程标签;

    6-0 配置别名

    1   $ git config --global alias.st status 
    2   //git st == git status 
    3 
    4   >.配置文件
    5   //配置Git的时候,加上"--global"是针对当前用户起作用的;如果不加,那只是针对当前的仓库起作用;
    6   //每个仓库的Git配置文件都放在.git/config文件中;
    7   //当前用户的Git配置文件放在用户主目录下的.个itconfig中;
  • 相关阅读:
    prism.js——让网页中的代码更好看
    WebAPI之FormData
    ES6背记手册
    搭建本地的百度脑图
    webpack到底是干什么用的?
    浅拷贝和深拷贝
    vue 中使用 watch 的各种问题
    跳一跳外挂的python实现--OpenCV步步精深
    Opencv基础课必须掌握:滑动条做调色盘 -OpenCV步步精深
    Opencv稍微高级点的鼠标事件-OpenCV步步精深
  • 原文地址:https://www.cnblogs.com/yizihan/p/4237177.html
Copyright © 2011-2022 走看看