zoukankan      html  css  js  c++  java
  • Git学习笔记

    Git 的教程:

    一:git的基础操作--提交,发布

        创建一个本地版本库: git init
        添加一个文件: git add
        提交一个文件到本地版本库: git commit -m 描述信息
        查看目前文档的状态: git status
       在add前查看修改的内容: git diff 文件名
       查看提交的日志: git log
    查看命令的历史: git reflog

    二:git的版本控制

        git的当前版本是HEAD,回到前一个版本是: git reset --hard HEAD^
        git回到任意版本是: git reset --hard commit——id
        放弃未add的版本: git checkout -- file
       一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
      一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
       场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

       场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

       场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
      查看远程库的信息: git remote -v

    删除: 如果在工作区删除了一个文件
     1. 如果你确定要删除,那使用 git rm file 从版本库中删除,并且commit
     2. 如果你是误删,则需要从版本库中恢复文件: git checkout -- file


    三:连接远程仓库:

     1. 生成密钥:ssh-keygen -t rsa -C "18500524969@qq.com",在用户目录下可以找到这个文件。
     2. 注册github账号,把密钥添加到gitHub
     3. 连接远程数据库
     1. 未创建本地仓库
        echo "# learngit" >> README.md
        git init
       git add README.md
       git commit -m "first commit"
       git remote add origin https://github.com/jiangerOne/learngit.git
       git push -u origin master
    2. 如果已经创建本地仓库
       git remote add origin https://github.com/jiangerOne/learngit.git
       git push -u origin master
    4. 从远程库克隆
      git clone git@github.com:jiangerOne/javaProject.git

    四:分支操作:

       1. 分支的基本操作: 某个分支的操作不会对其他分支的数据进行影响,如果要同步,则需要合并分支
         查看当前的分支: git branch
         创建一个新的分支: git branch dev
        切换到dev: git checkout dev
        git checkout -b dev = git branch+git checkout dev
        合并某分支到当前分支:git merge dev
        删除分支: git branch -d dev
      2. 分支冲突:
       当一个分支提交了改变的内容,另一个分支也提交了改变了相同行的内容时,分支合并会冲突。
        解决方案:首先解决冲突,可以使用git log --graph.
    3. 分支策略
        合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,
        能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
       在实际开发中,我们应该按照几个基本原则进行分支管理:
         1. 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
         2. 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,
           比如v10版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
        3. 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
       4.合并分支时,主分支不要提交,要合并
    4. 创建bug分支:
      1. 当你在dev上工作时,你突然发现一个bug,但是dev的工作还没有做完,你需要保存dev的环境
        跑到master创建bug分支,修复bug
         1. 保存dev的当时状态:git stash
         2. 切换到master分支上创建bug分支:
            git checkout master
            git checkout -b bug--01
       3. 修复完bug,合并bug分支,删除bug分支
          git merge bug--01
         git branch -d bug--01
    4. 回到dev,查看stash,删除stash,继续开始工作
         checkout dev
         git stash list
         git stash apply恢复
         git stash pop 恢复,删除
    5. 强行删除未合并的新分支: 开发一个新feature,最好新建一个分支;
         如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
    6. 多人合作:
       但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

       master分支是主分支,因此要时刻与远程同步;

       dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

       bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

       feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

    7. 多人合作分支:

    查看远程库信息,使用git remote -v;
    本地新建的分支如果不推送到远程,对其他人就是不可见的;

    从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

    在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

    建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

    五:标签管理:

    1. 标签的主要作用是更好的标识版本
    2. 创建一个标签
    命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

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

    git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;

    命令git tag可以查看所有标签。
    git show tag 可以查看tag的信息
    3. 删除一个标签:
    命令git push origin <tagname>可以推送一个本地标签;

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

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

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

    六:自定义git

    上颜色
    git config --global color.ui true
    配置别名:
    git config --global alias.st status


  • 相关阅读:
    PHP中的traits
    MySQL规范与疑难杂症
    从关系型数据库到非关系型数据库
    putty详细使用说明
    MySQL时间相关处理
    sendmail
    MongoDB简明教程
    assert()和eval()
    在NS3下如何用Python脚本,以及PyViz可视化
    八卦一下模型检验(二) (转自g9老大的博文)
  • 原文地址:https://www.cnblogs.com/grasser/p/8483837.html
Copyright © 2011-2022 走看看