zoukankan      html  css  js  c++  java
  • Git入门

    Git 下载地址:

    https://git-scm.com/download

    1.为什么要进行版本管理

    1).明确分工

    2)提高协同,多人开发的速度

    3)提高代码质量,取出僵尸代码

    2.git是什么:

    目前世界上最先进的分布式版本控制系统

    3.历史:

    作者:Linux 两周时间用C写了一个分布式管理控制系统

    4.集中式和分布式版本控制的主要区别

      1.集中式版本控制(svn)

        完全依赖中央服务器

      2.分布式版本控制

        每个人的电脑就是一个服务器

    远程仓库(不是必须的)的作用:数据备份 远程交互

    5.git原理以及常用命令

    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

     

    把文件往Git版本库里添加的时候,是分两步执行的:

    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

    你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

    工作区(work tree):存放所有当前文档。此目录下的文件才会被Git管理

    本地仓库:管理并保存所有的文档变化及历史状态。

    创建版本库的步骤

    1) 进入需要管理的目录

    2) 执行 git init 命令

    将一个文件添加到本地仓库,分两步:

    3) 使用 git add <file> 命令,添加文件。可以一次添加多个文件。

    4) 使用 git commit 命令提交一次即可

     差异比较

    git diff -- readme.txt命令可以查看工作区和版本库里面最新版本的区别

    日志查看

    我们通过 git log 命令可以查看历史的每次提交信息: 

    如果嫌输出信息太多,可以加上--pretty=oneline参数:

     查看所有关联日志

    我们可以通过git reflog命令看到以前的每次执行动作

    指令git reset --hard {commit id}

    如果要进行版本回退或前进一般分两步

    1) 通过git log  git reflog 查看操作日志吗,查找版本的commit id

    2) 通过 git reset --hard <commit id> 设置HEAD到指定版本

    其实版本的回退仅仅是修改HEAD指针的位置而已因此Git进行版本的切换svn要快的多

    撤销修改分两种情况

    1) 撤销工作区修改,使用git checkout -- <file>

    2) 撤销暂存区修改分两步

    a) 使用git reset HEAD <file>来撤销暂存区修改。

    b) 使用git checkout -- <file>来撤销工作区修改

    文件删除

    使用 git rm <file>删除文件可以使用git reset –hard 版本编号 恢复文件

     总结

    git init 创建版本库

    git add <file> 或者git add . 添加文件

    git commit –m “” 提交文件

    git diff  文件比较差异

    git status 查看文件状态

    git log  查看此版本之前的提交日志

    git reflog 查看此分支所有提交日志

    git reset HEAD <file> 来撤销暂存区修改。

    git checkout -- <file> 来撤销工作区修改

    git rm <file>来删除文件

    6.客户端工具TortoiseGit

    小乌龟就是一个UI界面,很方便,相关操作底层走的其实都是命令行操作.

    安装以及安装中文语言包

    创建本地仓库

    在任意目录下新建文件夹-->进入文件夹-->鼠标右键-->Git在这里创建版本库

    注意:一般不勾选纯版本库

    添加文件并提交

    创建一个文件-->编写内容-->文件夹中右键选择TortoisGit(T)-->添加(等同于 git add)-->写日志-->提交

    差异对比

    修改文件-->文件夹中右键选择TortoisGit(T)-->比较差异

    提交修改

    文件夹中右键选择TortoisGit(T)-->Git提交->"master"

    查看提交日志

    文件夹中右键选择TortoisGit(T)-->显示日志

    版本回退

    直接在日志显示日志界面

    选中要返回的提交,然后右键,选中:重置“master”到这个版本-->重置类型Hard-->确定

    版本回退到回退之前的版本

    文件夹中右键选择TortoisGit(T)-->选中 显示引用记录-->

    找到需要回退的提交,右键,选中:重置“master”到这个版本

    撤销修改

    文件夹中右键选择TortoisGit(T)-->还原

    7.Git分支管理原理


    第一次提交--第二次提交--第三次

    谁在工作区工作就指向谁(如果在第三次,那么Head-->Master(指针)指向第三次)

    第四次修改

    Head-->Dev分支指向第四次

    第五次修改

    Head-->Dev分支指向第五次

    返回到第三次做修改(head指向第三次)

    所以切换分支,只需要把HEAD指向另一个分支即可,所以Git分支实现了光速切换!

    假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并,

    合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支,

    Git的分支管理基本就是创建新的指针改变HEAD指向删除指针等操作几乎没有文件的增删.

    8.分支管理tortoise操作) 

    创建分支

    文件夹中右键选择TortoisGit(T)-->写入分支名称(这里我们用dav)和说明

    切换分支

    文件夹中右键选择TortoisGit(T)-->切换/检出-->

    选择要切换的分支(dav)

    在dav分支修改文件,并提交,然后切换回master

    查看文件内容,发现并没有变化,因为刚才的修改是在dev完成的,master没有影响。

    合并分支

    文件夹中右键选择TortoisGit(T)-->合并-->选择合并的分支dav-->查看内容

    解决冲突

    切换到dav修改,提交

    切换到master修改,提交

    用master合并dav(会失败,因为发生冲突)

    查看文件-->手动解决冲突(根据需求处理)

    然后文件夹中右键选择TortoisGit(T)-->解决冲突-->提交

     9. 分支管理git命令(命令行了解)

    创建分支

    git checkout -b 分支名  创建并切换到新的分支

    相当于以下两条命令:

    git branch dev    # 创建分支

    git checkout dev  # 切换到具体分支

    git branch 查看所有分支当前分支前面会有一个*表示

    dev分支上进行修改和提交

    此时dev分支已经比master领先了一次提交,并且HEAD指向的是dev

    合并分支

    使用git checkout master切换回master分支

     查看内容:

      发现readme并没有改变,因为刚才修改的是dev分支,此时的HEAD已经指向了master.

    使用git merge dev命令将 dev分支的修改合并到master分支

    删除分支 

    使用git branch -d dev 命令删除dev分支,dev就是具体的分支名

    制造冲突

    新建一个分支dev,修改分支上的文件,提交

    切换master分支,修改文件,提交

    解决冲突 

    自动合并失败必须先解决文件冲突才能提交

    根据实际情况进行冲突解决,再次提交

    可以利用

    git log --graph --pretty=oneline --abbrev-commit命令来查看所有分支

    最后删除分支

     总结

    1) 使用git branch 分支名 创建分支

    2) 使用git checkout 分支名 来切换分支

    3) 也可以使用 git checkout -b 分支名 来完成 创建并切换分支的操作

    4) 使用git merge 分支名 来合并分支到当前分支

    5) 使用git branch -d 分支名 来删除指定分支,注意:要删除一个未合并的分支。需要使用-D参数进行强制删除

    10.保存工作区状态(命令行)

    把当前工作区的内容进行“快照”,等待以后恢复使用

    场景:

    创建并切换到dev分支,修改文件,查看状态,有修改待提交。但是现在我们需要去进行紧急的BUG修复,没办法继续开发dev

    使用git stash命令 保存工作区

    切换回master

    假设bug修复完成,然后我们再次回到dev分支去查看

    通过git stash list命令来查看

    有两个方法进行恢复stash内容

    1) 方式1:用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    2) 方式2:用git stash pop,恢复的同时把stash内容也删了:

    3) 注意以上指令都可以在后面紧跟 stash的序号,来操作指定stash,例如: git stash apply stash@{0}

    总结

    git stash 保存工作区;

    git stash list 查看工作区;

    git stash apply stash@{编号} 恢复工作区,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    git stash pop  stash@{编号},恢复工作区的同时把stash内容也删了。

     

  • 相关阅读:
    深入JavaScript之获取cookie以及删除cookie
    js 首次进入弹窗
    jquery 点击加载更多
    express 设置允许跨域访问
    微信小程序之全局储存
    jquery 在页面上根据ID定位(jQuery锚点跳转及相关操作)
    我也想聊聊 OAuth 2.0 —— 基本概念
    一行代码,发送邮件
    【Git使用】强制推送代码到多个远程仓库
    一秒钟生成自己的iOS客户端
  • 原文地址:https://www.cnblogs.com/WonderfulU/p/11178171.html
Copyright © 2011-2022 走看看