zoukankan      html  css  js  c++  java
  • 版本控制工具-git

    SCCS:源代码控制系统

    RCS:版本控制系统

    CVS:并发版本控制系统(联网)

    Git:分布式的版本控制系统

    https://www.liaoxuefeng.com/wiki/896043488029600

    廖雪峰 git使用

       

    Linux目录配置
    目录的四个类型为 可分享 不可分享 可变动 不可变动

    git bash中
    git status 显示当前文件夹仓库与当前文件夹之间那些文件被修改
    git diff 显示当前文件夹下的文件 与 仓库中的文件之间的具体差异
    两个指令的另外一个区别是:在修改过的文件,执行git add 指令之后,git diff不会显示任何内容、即比较的是当前文件夹文件与暂存区文件之间的区别,add后两者相同而不会显示任何内容 git status会显示文件被修改,此时字体为绿色(add前为红色)
    而git commit 是会更新仓库内容
    git用到的指令

    git本地仓库 常用指令
    pwd cd ls rm vim cat 等linux常用指令
    git add xxx.xx //添加本地代码到暂存库
    git commit -m "" //更新仓库内容 ""中写本次更新的log
    git status //查看本地文件有无变化 是否有未处理任务
    git diff //查看变化 区别见上
    git log //查看commit代码的log 显示版本号(复杂的十六进制数字)
    git reset --hard HEAD^ //回退到上一个版本
    git reset --hard HEAD^^ //回退到上上个版本
    git reset --hard *** //***为想要回退的版本号
    git reflog //查询每一次仓库操作命令 及当时对应的版本号(用来查询版本号)
    git checkout -- readme.txt //撤销对readme.txt的修改 让这个文件回到最近一次git commit或git add状态
    1.修改没有被add 则退回上一次commit状态
    2.修改被add 则退回上一次add状态
    远程仓库常用操作
    在建立本地与远程仓库链接之前 需要先对本地进行commit所有变化
    //将本地仓库内容推送到GitHub仓库建立两个仓库间的链接// @github.com:tju-wang/learngit.git
    git remote add origin git@github.com:tju-wang/learngit.git

    //取消与远程仓库已经建立的链接

    git remote remove origin
    //将本地仓库所有内容推送到远程仓库 将当前分支master推送到远程
    git pull origin master
    //拉取远程仓库master分支 并合并到本地分支
    git pull origin master --allow-unrelated-histories
    //本地与远程仓库完全无关联时(均为独立创建 非clone关系) 使用上句
    git push -u origin master //-u 参数 Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    git push origin master //把本地master分支的最新修改推送至GitHub

    GitHub创建好远程仓库 克隆远程仓库到当前
    git clone git@github.com:michaelliao/gitskills.git

    分支管理
    创建分支
    git checkout -b dev //-b 参数表示创建并切换 相当于一下两条指令

    git branch dev
    git checkout dev

    //查看当前分支 当前分支前 会有*
    git branch
    //在当前分支下 add status commit 等操作 均是对于当前分支的 即*指向的分支

    //切换回主分支
    git checkout master

    //将分支工作 合并到master上 更新master的操作
    git merge dev

    //合并(指针切换指向)后,可以删除掉dev分支
    git branch -d dev

    冲突
    在分支上修改文件 在master也修改了同一个文件 且二者都进行了commit
    在merge合并分支时,会有conflict导致合并失败
    需要人为解决冲突后 再进行merge
    git status 会显示文件冲突 查看冲突文件的内容 直接修改该文件 然后再提交
    此时 master 分支 的该文件内容都会更新
    可以使用
    git log --graph --pretty=oneline --abbrev-commit //查看处理冲突修改的文件

    分支管理策略
    通常 团队协作开发时 master为release上线版本
    dev为修改测试的beta版本
    而每个人工作时 需要先clone最新内容 然后创建属于自己的分支 再修改代码
    分支确认后 merge到dev上

    Bug分支
    处理的问题是,当前正在进行的开发未结束 又有新的任务 需要在master的基础上进行修改 -->譬如 release版本的bug修复问题
    此时通过git提供的
    git stash函数 保存当前的工作现场(在保存前需要add操作) 然后在需要修改的master目录下,创建bug修复分支
    bug修复完毕 提交到master bug修复结束,返回dev分支(之前正在工作的分支)
    git stash list //查看当前被保存的所有工作现场
    git stash pop//恢复工作现场 并删除stash保护区域 --》多个工作现场时,用 git stash apply stash@{0} 分别操作



    开发一个新feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过
    git branch -D <name>强行删除。

    //多人协作
    git remote -v //查看远程库的信息

    git push origin master //将本地仓库主分支推送到远程仓库
    git push origin dev //将本地仓库 dev 分支推送到远程仓库


    因此,多人协作的工作模式通常是这样:
    首先,可以试图用
    git push origin <branch-name>推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用
    git push origin <branch-name>推送就能成功!如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令
    git branch --set-upstream-to <branch-name> origin/<branch-name>。这就是多人协作的工作模式,一旦熟悉了,就非常简单。

    Rebase //变基操作 将分差的提交图变为直线--》详询 Git Book

    标签管理tag
    tag是一个让人容易记住的有意义的名字,它跟某个commit绑定在一起
    创建tag
    在最近一次提交的commit上 进行打标签 切换回master分支
    git tag v1.0.0
    指定标签名字并附有文字说明 为1094adb的id打标签
    git tag -a v0.1 -m "version 0.1 released" 1094adb
    git tag //查看所有标签
    git tag -d v0.1 //打错了 删除标签v0.1
    git push origin <tagname> //可以推送一个本地标签
    git push origin --tags //可以推送全部未推送过的本地标签
    git push origin :refs/tags/<tagname> //删除一个远程标签

    使用git 参与开源项目
    1.Fork一个开源项目 此时在自己的git下也出现了同样的仓库
    2.从自己的仓库拉取代码 修复bug或添加新功能
    3.使用pull request 给官方仓库贡献代码

    配置使git自动忽略一些文件(由编译器编译过程产生的中间文件、含有重要信息的文件、不希望被上传的文件等)
    添加xxx.gitignore文件 在文件中写明文件格式
    想提交给github符合忽略规则的某文件 要用
    git add -f App.class // -f 关键字
    git check-ignore -v App.class //查看.gitignore中 哪条规则屏蔽了APP.class文件 方便修改

    配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
    git命令可以配置别名

    搭建Git服务器非常简单,通常10分钟即可完成;
    要方便管理公钥,用Gitosis;
    要像SVN那样变态地控制权限,用Gitolite。

  • 相关阅读:
    LeetCode——加油站
    LeetCode——分发糖果
    LeetCode——单词拆分 ii
    LeetCode—— 单词拆分
    LeetCode——重排链表
    IAR ARM、IAR STM8、IAR MSP430共用一个IDE
    OSAL多任务资源分配机制
    Win7系统Matlab2013a安装.m文件不自动关联到MATLAB.exe解决方法
    Java SE/ME/EE的概念介绍
    STL,ATL,WTL之间的联系和区别
  • 原文地址:https://www.cnblogs.com/Mrwang-tju/p/12468622.html
Copyright © 2011-2022 走看看