Git 常用命令以及使用场景介绍

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

相信每个做开发的童鞋都了解、使用过Git,下面就介绍下Git的常用命令已经每个命令的使用场景

Git 与 SVN 区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。
Git 与 SVN 区别点:

  • GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  • GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  • GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  • GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  • GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git 常用命令&&使用场景

  1. git checkout
    这个命令用于检出某个分支、提交或者对应的某个分支、提交的文件。根据不同的参数来检出不同的内容;那么其常用场景如下:

    • git checkout . 用暂存区的内容覆盖当前工作区内容,那么可以达到用暂存区的内容来撤销本地分支的修改
      某些情况下,想在当前分支中做一下测试,这时修改了当前分支的多个文件,测试过后要撤销对当前分支的变更,这时可以使用git checkout . 命令; 注意:使用该命令需要注意一点:本地分支所有文件的变更都会被撤销
    • git checkout -b newBranchName origin/master 基于master创建一个新分支,并切换到新分支上
      避免了git branch完成此功能需要多执行一步
    • git checkout - 切换到 切换到当前分支之前的分支
      使用场景:开发本地创建多个分支来完成不同的需求,这时可能需要来回切换不同的分支,如在A分支开发时,提测的B分支有bug,qa要让fixed,这时就切换到B分支屁颠屁颠的修bug,完事之后要切换到A分支,此时可以使用快捷命令
    • git checkout commitId/branchName -- path 用指定的提交id或者分支的某个文件来替换本地与其对应的文件,达到该文件的内容变更的撤销
      使用场景:由于某种原因,在众多的文件变更中,只撤销某个指定文件的内容变更
  2. git branch
    用于创建、显示分支等与分支相关的命令,工作中常用到的情况

    • git branch branchName origin/master 基于master创建一个分支
      这种情况创建的分支要进行完整的开发,过程有些繁琐,需要:

    git branch branchName origin/master
    git checkout branchName
    但是在实际中,个人比较倾向于下面一种,只需两步即可:
    git checkout -b branchName origin/master

    • git branch -vv 查看本地分支的upstream的对应情况,一定要确保本地分支与服务器上分支的对应情况,因为不单独设立对应情况,新建分支默认与master是对应关系
    • git branch -remote 查看的是本地仓库的所有分支
    • git branch -D branchname 删除本地分支
      注意:需要切换到其他分支进行其操作,不能在当前分支删除当前分支,这是不允许的
    • git branch -a 查看远端和本地的所有分支
  3. git commit
    用于提交暂存区代码到本地仓库;说一下git commit --amend选项

    • git commit --amend 的使用场景:某次需求开发提交中,由于某种原因导致提交的结果不是期望的,需要重新提交,但是又不希望前一次的提交使git提交历史树变长,那么可以使用git commit --amend来用暂存区的内容修正前一次的提交。 如果不使用带--amend的提交,结果是git提交历史树会变长。
  4. git push
    用于与服务器仓库同步代码,该命令的用法不做赘述,该命令的一个常用情况就是删除服务器端某个指定的分支,命令如下:
    git push origin 空格:remote_branch_name
  5. git rm
    该命令用于删除分支中的文件,他可以只删除暂存区的文件,也可以同时删除暂存区和工作区的文件,参数不同,决定删除的文件范围也不同,具体如下:
    git rm --cached filename //删除暂存区的某个文件,工作区的不会删除
    git rm filename //同时删除暂存区和工作区的该文件
    git rm filename的场景:为满足某次需求,新增了一些代码文件,在开发中可能不小心将某个无用的新文件加到工作区而被git add到暂存区,这时需要同时删掉暂存区和工作区的该文件;
  6. git reset
    该命令用于重置指定区域的内容,可以操作提交,也可以操作文件;该命令的三个参数--hard、--mixed、--soft表示重置的范围,这个命令也是最常用的命令之一;
    使用该命令得记住一点,它会对git的提交历史做修改,可能会删掉一些历史提交点导致不能恢复。

    • git reset [--mixed] commitId 用commitId的内容重置暂存区的内容,工作区内容不会被覆盖,这样可达到撤销暂存区的变更;
      场景:某次变更的代码一不留意用git add添加到暂存区,但是想要撤销暂存区的内容而不会导致本地工作区代码丢失,这时可以使用git reset HEAD
    • git reset --hard commitId 用commitId的内容重置暂存区和工作区的内容
      场景:在某次升级某个稳定性不确定但是功能全面的框架,使用包管理机制下载最新的框架源码,开发一段时间后发现有很大问题,但是这时代码已经git add到暂存区,想要撤销掉工作区和暂存区的内容变更时,就可以使用git reset --hard HEAD
    • git reset commitId -- path 用指定commitId的文件内容替换掉暂存区对应文件,工作区的不便;
      注意:该操作不会修改git的提交历史
  7. .gitignore诠释
    使用.gitignore时,可能会发生这样一种情况:明明在.gitignore中设置了忽略某个文件,可以用git status查看时还是会追踪其变化*;遇到这种情况,如果想当然的认为配置到.gitignore中的文件不会被追踪,那么可能是你对.gitignore的有误解。

那么.gitignore的具体理解是什么样呢,具体有两个方面需要注意:

  • .gitignore只会忽略从未在git仓库中维护的文件,即自文件添加以后,从未 add 及 commit 过的文件;这时.gitignore中配置的文件是有效的,即git不会追踪其变化。
  • 已经在git仓库维护过的文件,即使在.gitignore中配置不要追踪其变化,一旦文件变化git还是会追踪的。
    通俗的说,就是已经维护起来的文件,即使加上了gitignore,也无济于事

标签: Git

发表评论: