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

    原文廖老师的Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

    一、Git的安装

     

    1.在Windows上安装Git

    从https://git-scm.com/downloads下载,然后按默认选项安装即可。

    2.安装完后的简单设置

    安装完成后,还需要最后一步设置,在命令⾏输⼊:

    $ git config --global user.name "Your Name"

    $ git config --global user.email "email@example.com"

    二、创建版本库

    版本库(repository)又名仓库,可以简单理解成一个目录,这个目录面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

             首先在一个合适的位置创建一个空目录:$ mkdir GitRepository

             进入该目录后,执行命令:$ git init

    三、版本的回退与切换

    1、添加文件到Git仓库

        第一步添加:git add readme.txt

        第二步提交:git commit –m “wrote a readme file”

     注:首先需要在git仓库目录下新建一个readme.txt文件;

     执行第一步后,没有消息显示说明添加成功,使用add可以一次提交多个文件;

      -m后面的参数是对本次提交的说明;

            $ git status可以命令查看当前Git仓库状态,有哪些文件需要add和commit;

            $ git diff 可以查看修改过的内容;

    2、版本回退

    应用场景:文件丢失的情况下,从最近的一次commit中恢复文件。

    $ git log 以倒序的方式查看提交日志;

    $ git reset --hard HEAD^ 回退到当前版本的上一个版本;

    $ git reset --hard “commitID”回退到具体哪次提交,commitID代表具体commit的版本号;

    $ git reflog 查看每一次命令,第一列显示有commit版本号

    3、工作区和版本库

    工作区:我们看到的目录,刚刚我们创建的GitRepository文件夹;

    版本库:我们执行git init后在生成的隐藏的.git文件夹;

    暂存区:.git目录下有一个stage或index目录即为暂存区;

          

    4、管理修改

    Git跟踪并管理的是修改,而非文件。未add到暂存区的修改是不能够提交到版本库的;

    $ git diff HEAD -- readme.txt  查看工作区和版本库里最新版本的区别

    5、撤销修改

    应用场景:把修改错误的文件add到了暂存区,但还未commit到版本库,想撤回本次add。

    (1)$ git reset HEAD readme.txt

    把暂存区的修改撤销掉,重新放回到工作区。

    (2)$ git checkout -- readme.txt

    丢弃工作区的修改,让该文件回退到最近一次的git add或git commit时的状态这里有两种情况:

    一种是readme.txt修改后还没有add到暂存区,命令执行后回到和版本库一样的状态。

    二种是readme.txt已经添加到暂存区,之后又做了修改,命令执行后,文件恢复为添加到暂存区的状态。

    6、删除文件

    (1)应用场景:确定要从版本库中删除某个文件

        第一步:$ git rm readme.txt

        第二步:$ git commit –m “delete readme.txt”

    (2)应用场景:工作区误删某文件,可以从版本库中恢复

        $ git checkout – readme.txt

    四、远程仓库

    1、添加公钥到github

             首先注册GitHub账号并登录,然后将自己的公钥添加到GitHub上。公钥即电脑用户名目录下的.ssh目录下id_rsa.pub文件里的内容。如果没有该目录,需要我们手动生成:

             $ ssh-keygen -t rsa -C "huozhifa@qq.com"

    然后在github里点击account setting   --> SSH Keys à Add SSH Key  --> title随意写,将密钥粘贴进去。

    2、添加远程仓库

    第1步:在GitHub上创建一个远程库:右上角“+”  -->  “New repositories ”;

    第2步:将本地库与远程库关联:

             $ git remote add origin git@github.com:你的用户名/learngit.git

        注:远程库的名字就是origin,这是Git默认的叫法,也可以改成别的。

    第3步:将本地内容推送到远程库:

        $ git push -u origin master

        注:用 git push命令,实际上是把当前分支master推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了 -u参数,Git不但会把本地的master分支内容推送的远程master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    3、从远程库克隆

    执行命令:$ git clone git@github.com:你的用户名/gitskills.git

    注:Git支持多种协议,还可以用 https://github.com/huozf/gitskills.git这样的地址。默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

    五、分支管理

    1、创建与合并分支


    Git都把它们串成一条时间线,这条时间线就是一个分支。截⽌止到目前,只有一条时间线,在Git里,这个分支叫主分支,即 master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

         


     (1)  创建并切换分支:$ git checkout –b dev
    当我们创建新的分支dev时,Git新建了一个指针叫dev,令dev指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

           

    注:“-b”参数表示创建并切换分支,相当于命令(2)、(3)之和。

    (2) 创建分支:$ git branch dev

    (3) 切换分支:$ git checkout dev

    (4) 查看当前分支: $ git branch

        注:该命令会列出所有分支,前边标有 * 的表示当前所在分支。

    (5) 合并指定分支到当前分支:$ git merge master

    (6) 删除分支: $ git branch –d dev

    2、解决冲突


    当我们新建一个分支后,master分支新建分支各自都分别有新的提交,这种情况下,Git⽆无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突

         

    这时候需要我们手动解决冲突,然后才能合并。合并后,查看分支合并图:

        $ git log --graph --pretty=oneline --abbrev-commit

    3、分支管理策略

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

    例如,新建并切换一个分支dev,修改文件并提交。然后切换回master分支,将dev分支合并到master分支:

    $ git merge --no-ff -m "merge with no-ff" dev

    注:“—no-ff”表示禁用“Fast forword”模式。

    此时,分支合并图变成:

           

    4、Bug分支
    支上合并就可以了。所以,团队合作的分支看起来就像这样:

    应用场景:当前工作还未完成且不能够提交,但上级要求立即修复项目中出现的bug,需要我们停下手头的工作。

    (1)$ git stash 将“工作现场”储存起来;

    (2)$ git stash list 列出所有已储存的“工作现场”;

    (3)$ git stash pop 恢复“工作现场”,且将stash里的最上一层内容删除,等同于(4)、(5)命令之和;

    (4)$ git stash apply 恢复“工作现场”,但stash里的内容并未删除;

    (5)$ git stash drop 删除最上一层“工作现场”;

    (6) $ git stash apply stash@{0} 恢复指定的stash内容;

    5、多人协作

    (1) $ git remote 查看远程库信息;

    (2) $ git remote –v 显示远程库更详细信息;

    (3) $ git push origin branch_name 推送到远程库的指定分支

    (4) $ git pull 从远程库拉取更新

    (5) git branch --set-upstream dev origin/<branch> 将本地库的分支与远程库指定分支关联起来

    注:多人协作的工作模式

    1. 首先,可以试图用 git push origin branch-name推送⾃自己的修改;

    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull试图合并;

    3. 如果合并有冲突,则解决冲突,并在本地提交;

    4. 没有冲突或者解决掉冲突后,再用$ git push origin branch-name推送就能成功!

    5. 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

    六、标签管理

    1、创建标签

    (1) $ git tag v1.0 默认给最近以此提交创建标签

    (2) $ git tag v0.9 66756 给指定的提交创建标签,66756为提交id

    (3) $ git tag -a v0.1 -m "version 0.1 released" 3628164   给指定的提交创建标签,-a 指定标签名,-m指定标签信息

    (4) $ git tag 列出所有标签

    (5) $ git show v0.1 查看指定标签的具体信息

    2、操作标签

    (1) $ git tag -d v0.1  删除指定标签

    (2) $ git push origin v1.0  推送某个标签到远程

    (3) $ git push origin --tags 一次性推送全部尚未推送到远程的本地标签

    (4) 如果标签已经推送到远程,要删除远程标签:

        ① 先从本地库删除:$ git tag -d v0.9

        ② 再从远程库删除:$ git push origin :refs/tags/v0.9

  • 相关阅读:
    测试计划设计
    测试方案
    使用gulp构建自动化工作流
    ESLint--定制你的代码规则
    Node.js学习笔记(一):快速开始
    React-Native性能优化点
    ES6笔记(一):ES6所改良的javascript“缺陷”
    windows下React-native 环境搭建
    使用ssh连接gitHub
    javascript中的prototype和constructor
  • 原文地址:https://www.cnblogs.com/huozf/p/10474009.html
Copyright © 2011-2022 走看看