zoukankan      html  css  js  c++  java
  • git


    安装git完成后
        $ git config --global user.name "Your Name"
        $ git config --global user.email "email@example.com"

    把目录变成Git可以管理的仓库
        $ git init

    把文件添加到版本库
        把文件添加到仓库(可以多次add不同的文件)
        $ git add readme.txt

        把文件提交到仓库,-m后面输入的是本次提交的说明(历史记录)
        $ git commit -m "wrote a readme file"

    版本回退
        查看提交的历史记录
        git log

        HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,
        当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
        $ git reset --hard HEAD^

        恢复未来的版本/commit id 版本号没必要写全
        $ git reset --hard 1094a

        查看每一次的指令(忘记commit id的话)
        git reflog

    工作区和暂存区
        工作区:就是你在电脑里能看到的目录
        版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,
    还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

    添加文件时
    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区
    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

        查看状态
        git status

    管理修改
        Git管理的是修改,而不是文件
        第一次修改 -> git add -> 第二次修改 -> git commit
        第二次修改没变

    撤销修改
        $ git checkout -- readme.txt
        一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
        一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
        就是让这个文件回到最近一次git commit或git add时的状态

    删除文件
        在文件管理器中把没用的文件删了,或者用rm命令删了
        $ rm test.txt
        要从版本库中删除该文件
        $ git rm test.txt

    添加远程库
    现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步

        1、首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库

        2、在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库

        3、关联一个远程库
        git remote add origin git@server-name:path/repo-name.git;

        4、第一次推送master分支的所有内容;
        git push -u origin master

        此后每次本地提交后,使用命令git push origin master推送最新修改;

    从远程库克隆
    假设我们从零开发,最好的方式是先创建远程库,然后从远程库克隆
    首先,登陆GitHub,创建一个新的仓库,名字叫gitskills:
    勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件
    创建完毕后,可以看到README.md文件:

    现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

    $ git clone git@github.com:huang/gitskills.git

    分支管理
    创建与合并分支
       HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支
      每次提交,master分支都会向前移动一步
      当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上
      从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变
      在dev上的工作完成了,就可以把dev合并到master上。最简单的方法,就是直接把master指向dev的当前提交,就完成了合并
      合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉

        创建dev分支,然后切换到dev分支
        -b参数表示创建并切换,相当于以下两条命令:
        $ git branch dev
        $ git checkout dev

        $ git checkout -b dev

        查看当前分支
        git branc

        在dev分支上正常提交

        dev分支的工作完成,我们就可以切换回master分支
        $ git checkout master

        把dev分支的工作成果合并到master分支上(合并指定分支到当前分支)
        $ git merge dev

        删除dev分支
        $ git branch -d dev


    解决冲突
        当在两个分支进行同一文件不同修改并提交,然后合并分支,会产生冲突
        当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

        解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

        用git log --graph命令可以看到分支合并图。


    分支管理策略
        通常合并分支时,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
        如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,从分支历史上就可以看出分支信息。

        合并dev分支,请注意--no-ff参数,表示禁用Fast forward
        $ git merge --no-ff -m "merge with no-ff" dev

        因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
        合并后,我们用git log看看分支历史

    在实际开发中,我们应该按照几个基本原则进行分支管理:
    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    干活都在dev分支上,也就是说,dev分支是不稳定的
    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。


    Bug分支
        修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

        当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;

        在master分支上修复的bug,想要合并到当前dev分支(修复dev跟master同样的bug),可以用git cherry-pick <commit>命令,
        把bug提交的修改“复制”到当前分支,避免重复劳动。

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

    多人协作
        首先,可以试图用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>。

        查看远程库信息,使用git remote -v;

    Rebase
        rebase操作可以把本地未push的分叉提交历史整理成直线;
        rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
        $ git rebas


    创建标签
        新建一个标签,默认标签是打在最新提交的commit上的
        git tag <tagname>

        根据commit id 添加标签,可以为以前的commit id
        $ git tag v0.9 f52c633

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

        查看所有标签。
        git tag
        标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息

        还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
        $ git tag -a v0.1 -m "version 0.1 released" 1094adb

    操作标签
        git push origin <tagname>可以推送一个本地标签;

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

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

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

    使用GitHub
        在GitHub上,可以任意Fork开源仓库;

        自己拥有Fork后的仓库的读写权限;

        可以推送pull request给官方仓库来贡献代码。

  • 相关阅读:
    深度学习丨Deep Learning学习资源整理
    机器学习丨《机器学习》、《统计学习方法》思维导图
    概率统计丨陈希孺《概率论与数理统计》思维导图
    数据科学丨DataScience工具速查卡
    线性代数丨《线性代数及其应用》思维导图
    Api接口加密策略
    tomcat重启警告:Abandoned connection cleanup thread 服务器宕机解决方案
    spring mvc多环境下配置文件的设置
    mysql中将查询结果进行拼接处理及concat、group_concat的使用
    JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置
  • 原文地址:https://www.cnblogs.com/huangyuanning/p/11961209.html
Copyright © 2011-2022 走看看