zoukankan      html  css  js  c++  java
  • git的使用

    GIT是一个开源的分布式版本控制系统,用于敏捷高效地处理任何项目。它是Linux Torvalds为了帮助管理Linux内核而开发的一个开放源码的版本控制软件。Git与常用的版本控制工具SVN,CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

    一、GIT配置

    1、用户信息

    $ git config --global user.name "your_username" 
    $ git config --global user.email email_address
    

    2、查看配置信息

    $ git config --list
    $ git config user.name
    

    二、GIT工作流程

    • 克隆git资源作为工作目录
    • 在克隆的资源上添加或修改文件
    • 如果其他人修改了,你可以更新资源
    • 在提交前查看修改
    • 提交修改
    • 在修改完成后,如果发现错误,可以撤回提交,再次修改之后并提交
      GIT工作流程

    三、GIT工作区、暂存区和版本库

    • 工作区:就是在电脑里能看到的目录
    • 暂存区:英文叫stage或index。一般存放在.git目录下的index文件中,所以暂存区有时也叫作索引(index)
    • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库

    它们的关系图下图:
    关系图
    图中左侧为工作区,右侧为版本库。在版本库中标记为“index”的区域是暂存区(stage,index),标记为“master”的是master分支所代表的的目录树。
    图中我们可以看出此时“HEAD”实际是指向master分支的一个“游标”。所以图示的命令中出现HEAD的地方可以用master来替换。
    图中的objects标识的区域为Git的对象库,位于“.git/objects”目录下,里面包含了创建的各种对象及内容。
    当对工作区修改(或新增)的文件执行git add命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
    当执行提交操作git commit时,暂存区的目录树写到版本库(对象库)中,master分支会做相应的更新。即master指向的目录树就是提交时暂存区的目录树。
    当执行git reset HEAD命令时,暂存区的目录树会被重写,被master分支指向的目录树所替换,但是工作区不受影响。
    当执行git rm --cached命令时,会直接从暂存区删除文件,工作区则不作出改变。
    当执行git checkout .git checkout --命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
    当执行git checkout HEAD .git checkout HEAD 命令时,会用HEAD指向的master分支中的全部或者部分文件替换暂存区以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除暂存区中未提交的改动,也会清除工作区中未提交的改动。

    四、Git新建仓库

    1、git init

    Git使用git init命令来初始化一个Git仓库,Git的很多命令都需要在Git的仓库中运行,所以git init是使用Git的第一个命令。
    在执行此命令后,会生成一个.git目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

    2、使用方法

    初始化当前目录成为一个Git仓库

    $ git init
    

    也可以初始化一个指定的目录

    $ git init newrepo
    

    如果当前目录下有几个文件想要纳入版本控制,需要先用git add命令告诉Git开始对这些文件进行跟踪,然后提交:

    $ git add *.c
    $ git add README
    $ git commit -m 'commit message'
    #### 3、git clone
      可以使用**git clone**从现有Git仓库中拷贝项目
    ```shell
    $ git clone <repo>
    $ git clone <repo> <directory>
    

    五、Git基本操作

    1、获取与创建项目命令

    1)git init
    2)git clone

    2、基本快照

    1)git add

    注意这里,未git add之前,使用git status命令查看到的文件状态为??,使用git add之后,文件状态为A。此后,若工作区中的文件再被修改,此时使用git status命令查看到的文件状态为AM,此时需要再次对该文件执行git add

    2)git status

    用来查看在上次git add之后是否有修改。-s参数可以获得简短的结果输出。

    3)git diff

    执行git diff来查看执行git status的结果的详细信息。
    git diff命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff有两个主要的应用场景。

    • 尚未缓存的改动:git diff
    • 查看已缓存的改动:git diff --cached
    • 查看已缓存的与未缓存的所有改动:git diff HEAD
    • 显示摘要而非整个diff:git diff --stat
    4)git commit

    使用git add命令将想要快照的内容写入缓存区,而执行git commit将缓存区的内容添加到仓库中。
    Git为你的每一个提交都记录你的名字与电子邮箱地址,所以在一开始的时候需要配置用户名和邮箱地址。
    执行git commit之后,再执行git status会显示如下结果:

    $ git status
    # On branch master
    nothing to commit (working directory clean)
    

    还要注意一点,在使用git commit命令时,最好使用-m参数来填写提交信息。如果你没有在此刻填写提交信息,Git会默认打开vim。
    如果你觉得git add提交缓存的流程太过繁琐,Git也允许你用-a选项跳过这一步。命令格式如下:

    $ git commit -a
    
    5)git reset HEAD

    用于取消已缓存的内容。

    6)git rm

    要从Git中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以使用以下命令完成此项工作

    $ git rm <file>
    

    如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项-f
    如果把文件从暂存区移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用--cached选项即可。
    可以使用-r递归删除,即如果后面跟的是一个目录作为参数,则会递归删除整个目录中的所有子目录和文件
    进入某个目录中,执行下面的语句,会删除该目录下的所有文件和子目录。

    $ git rm -r *
    
    7)git mv

    用于移动或重命名一个文件、目录、软连接。

    六、Git分支管理

    几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
    创建分支命令:

    $ git branch branchname
    

    切换分支命令

    $ git checkout branchname
    

    当你切换分支的时候,Git会用该分支的最后提交的快照替换你的工作目录的内容,所以多个分支不需要多个目录。
    合并分支命令:

    $ git merge
    

    可以多次合并到统一分支,也可以选择在合并之后直接删除被并入的分支。

    1、Git分支管理

    1)列出分支

    列出分支的基本命令:

    $ git branch
    

    没有参数时,git branch会列出在本地的所有分支。

    $ git branch
    * master
    

    此例的意思就是,有一个叫做master的分支,并且该分支是当前分支。当我们执行git init的时候,默认情况下Git就会创建master分支。如果要手动创建一个分支,执行git branch branchname即可。
    当以此方式在上次提交更新之后创建了新分支,如果后来又有更新提交,然后又切换到了新分支中,Git将还原工作目录到创建新分支时的样子。
    我们也可以使用git checkout -b branchname命令来创建新分支并立即切换到该分支下,从而在该分支中操作。
    使用分支可以将工作切分开来,从而让我们能够在不同开发环境中做实,并来回切换。

    2)删除分支

    删除分支命令:

    $ git branch -d branchname
    
    3)分支合并

    一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。你可以使用以下命令将任何分支并合并到当前分支中去:

    $ git merge branchname
    
    4)合并冲突

    需要注意的是。在合并的时候不仅仅会出现文件的添加和移除等操作,经常会有同时存在但在分支中被修改的情况。
    当将分支合并到master分支出现合并冲突时,我们需要手动去修改它。
    在Git中,我们可以用git add告诉Git文件冲突已经解决。

    七、Git查看提交历史

    在使用Git提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用git log命令查看。
    我们可以用--online选项来查看历史记录的简洁版本。

    $ git log --online
    

    我们还可以用--graph选项,查看历史中什么时候出现了分时、合并。
    我们还可以用--reverse来逆向显示所有日志。
    如果只想查找指定用户的提交日志可以使用命令git log --author=username
    如果你要指定日期,可以执行几个选项:--sincebefore,以及--untilafter。例如:查看Git项目中三周前且在四月十八日之后的所有提交,并使用--no-merges选项以隐藏合并提交:

    $ git log --online --before={3.weeks.ago} --after={2020-04-18} --no-merges
    

    八、Git标签

    如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用git tag给它打上标签。

    git tag -a 1.0
    

    -a选项意为“创建一个带注解的标签”。如果不用这个选项,就不会记录这标签是什么时候打的,谁打的,也不会让你添加个标签的注解。当你执行git tag -a命令时,Git会打开你的编辑器,让你写一句标签注解,就像给提交写注解一样。
    打上标签之后,当我们执行git log --decorate时就可以看到我们的标签了。
    如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签。
    如果我们要查看所有标签可以用如下命令:

    $ git tag
    

    指定标签信息命令:

    $ git tag -a <tagname> -m "tag message"
    

    PGP签名标签命令:

    $ git tag -s <tagname> -m "tag message"
    

    九、Git远程仓库(Github)

    1、添加远程仓库

    要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:

    $ git remote add [alias] [url]
    

    查看当前的远程库:

    $ git remote
    $ git remote -v #可以看到每个别名的实际链接地址
    

    2、提取远程仓库

    Git由两个命令来提取远程仓库的更新

    $ git fetch alias   #从远程仓库下载更新的分支与数据
    $ git merge alias/branch   #把下载下来的alias/branch合并到当前分支
    

    3、推送到远程仓库

    推送新分支与数据到远程仓库:

    $ git push [alias] [branch]
    

    以上命令将[branch]分支推送成为[alias]远程仓库上的[branch]分支

    4、删除远程仓库

    $ git remote rm [alias]
    

    十、Gitee

    使用方法和Github基本一致。
    一个本地仓库可以同时关联多个远程仓库。例如,一个本地仓库可以既关联Github中的一个仓库,又关联Gitee中的一个仓库。示意图如下:
    示意图

    本文是我在菜鸟教程学习Git时的摘录,想要学习使用Git的朋友可以花一个下午到这里去学习一下。

  • 相关阅读:
    JavaScript基础1
    iOS开发之Quzrtz2D 一:认识Quzrtz2D
    ios开发抽屉效果的封装使用
    ios开发手势处理之手势识别二
    ios开发之手势处理 之手势识别一
    ios开发事件处理之 四:hittest方法的底层实现与应用
    ios开发事件处理之:三 :寻找最合适的view
    ios开发事件处理之 :二:事件的产生与传递
    ios开发事件处理之:一:UIView的拖拽
    ios开发transform属性
  • 原文地址:https://www.cnblogs.com/mryx/p/12968288.html
Copyright © 2011-2022 走看看