Git使用介绍

对Git使用的一些基础介绍。

常用术语

首先让我们来对Git使用遇到的一些常用术语有个认识。

  1. 集中式:有一台专门的服务器作为版本库,其他人要上传更新代码都得先经过它才能进行。
  2. 分布式:每个人的电脑都有一个自己的版本库,不需联网就能本地进行代码版本管理。
  3. 工作区(Workspace):项目实际存放的目录。
  4. 仓库区(Repository):项目下的.git目录,一个本地的版本管理仓库。
  5. 暂存区(Index/Stage):一个缓存区用于保存临时的改动,.git目录下有个index用来记录这些信息。
  6. HEAD:指示当前分支的最后一次commit的节点。
  7. 远程仓库(Remote):专门的服务器来保存代码库,比如GitHub,GitLab。
  8. 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Merge)
  9. 获取(Fetch):从远程版本库获得最新版本。
  10. 合并(Merge):将两个分支代码进行合并操作。
  11. 添加(Add): 将修改内容添加到暂存区中。
  12. 提交(Commit):将所做的更改,提交到HEAD。
  13. 推送(Push):将所做的更改,存入远程版本库。
  14. 同步(Pull+Push):先将远程库拉取,再将本地库推送到远程库,相当于(Pull+Push)。
  15. 分支(Branch):一条新的版本记录线,有一个新的指针指向分支节点。
  16. 检出(Checkout):改变HEAD指向,可以用来切换分支或者检出某次提交恢复到工作区修改前的内容。
  17. 重置(Reset):可重置HEAD到暂存区和工作区或者重置暂存区或者重置工作区等。
  18. 还原(Revert):新增一个commit用来还原到指定的commit,替换后者的修改变化。
  19. 衍合/变基(Rebase):将某次提交后的所有提交按照需要应用到指定提交上。
  20. 标签(tag):相当于给commit的id(一串SHA-1值)取个别名,对于里程碑的提交节点进行标记,方便寻找。

基本概念

其次,我们需要对版本工具遇到的一些容易混淆的概念进行理解。

  1. 与传统版本控制工具区别
    传统的CVS及SVN都是集中式的版本控制系统,而Git是分布式的,相当于每个人本地都有一份完整的版本库备份,更加安全,还可进行离线版本控制最后统一推送。Git把内容按元数据方式存储,最小控制单位是提交,直接记录快照,Git只做增加操作即使是删除文件也是进行标志增加一个记录而非直接删除文件内容;而SVN是按文件进行存储,进行差异比较。Git的分支、撤销、重置等功能都相当于对改变当前HEAD指向的提交,所以速度很快,而SVN的分支功能相当于另外备份整个项目文件,所以基本没什么用。
  2. 文件状态
    • untracked:未添加。在仓库目录刚创建的尚未添加至 repo 的文件状态即是 untracked。也可以把已存在于 repo 中的文件从中删去,这时文件的状态也会回到了 untracked。
    • unmodified:新文件添加进来后并没有对照的历史版本,状态即 unmodified。
    • modified:unmodified 的文件发生修改、变动后其状态会改变为 modified。
    • staged:暂存状态。通过 add 命令记录待提交的文件,文件的状态会变味暂存状态。
    • commited:暂存文件提交后其状态即是 commited,当然也是 unmodified。

  1. 分支管理
    不同项目不同团队可按照具体的实际的开发过程进行自行创建分支并进行管理。

    • Master分支:默认分支,可用于发布生产版本。每次发布后,可用git tag进行标记。
    • Dev分支:开发分支,日常的开发活动在此分支进行。
    • Test分支:测试分支,用于发布测试环境的版本。
    • Feature分支:用于重大功能开发。
  2. reset、revert、checkout区别
命令\作用对象 文件 commit
reset 清除文件的未提交改动 丢弃私有分支中某次提交之后的所有提交,或者丢失未提交的改动
checkout 放弃工作目录中的所有改动 切换分支,或者检出某个版本的文件快照
revert 将公共分支的代码强制覆盖为某个版本的代码
  • Revert:将指定的历史commit版本反转,会生成一次新的提交,并作为最新版本提交,期间的所有commit保留在版本库中。

  • Reset:从版本库中删除该历史commit以后的所有commit。

当合并出现冲突,如果要撤销到未合并的状态,使用reset命令,不能用revert。

  1. rebase、merge区别

如图5,假设master分支也提交了一个快照C3,同时有个experiment分支在C2快照后提交了一个新的快照C4,使用git checkout master;git merge experiment会将把两个分支的最新快照(C3?和?C4)以及二者最近的共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照(并提交),如图6。

而使用git checkout experiment;git rebase master可将提交到某一分支上的所有修改都移至另一分支上,如图7。最后再使用{git checkout master;git merge experiment}进行一次快进合并,这样最终的分支树(版本历史)即看起来就清晰明了。

rebase 和 merge的另一个区别是rebase 的冲突是一个一个解决。

常用操作

接着,介绍一下使用git命令的一些基本操作流程。

  1. 创建一个新项目的仓库

  1. 本地已有项目,上传到远程仓库

  1. 本地已有仓库,修改要推送的远程仓库

  1. 多人协作开发,同步代码过程

  1. 合并dev分支到master分支,发布生产版本代码

  1. 代码撤销或回滚

  1. 使用stash缓存提交

使用IDE插件和图形化工具

使用IDEA git插件

  1. clone项目
  2. 提交代码并推送到远端仓库

  3. 由于本地代码不是最新版本推送失败,需要拉取代码进行合并解决冲突后再重新提交并推送,要使用rebase方式来进行拉取,方便版本历史查看。

  4. 切换分支、合并分支、撤销合并


  5. 使用rebase将当前分支的快照变基到选择的分支的快照之后(相当于将另一个分支的修改合并到当前分支,并且保持版本树的清晰)

    变基前
    变基后
  6. 切换分支,并将当前分支的快照变基到目标分支之后

    变基前
    变基后

使用Visual Studio git插件

  1. clone项目

  1. 拉取代码、解决冲突后重新提交并推送代码


  1. 切换分支、合并分支


使用TortoiseGit图形化工具

  1. 拉取代码、提交并推送代码



  1. 切换分支、合并分支、撤销提交


其他

.gitignore忽略文件使用

提交代码时有一些文件例如日志、临时文件、本地IDE配置文件、编译生成的中间文件、可执行文件等等没必要放到版本库中,可以在工作区中新建一个.gitignore文件,把要忽略的文件名填进去,提交代码时git就会忽略这些文件。不同类型项目的忽略文件模板可在https://github.com/github/gitignore这个链接上面下载,具体的忽略文件的语法规则可自行搜索。

.gitattributes 属性文件

可对特定的路径配置某些设置项。一个典型的用法是如果dev分支和master分支有一些config配置文件内容分别为开发环境和生产环境。每次合并dev分支到master分支的时候会出现冲突,此时可在master分支下新增.gitattributes文件,指定特定的文件合并分支时不进行合并,例如.gitattributes merge=ours、src/main/resources/jdbc.properties merge=ours指定.gitattributes本身文件合并策略为冲突时以当前分支的为准,配置完设置项后还需要执行git?config?merge.ours.driver?true命令启动设置项。以后在master分支下合并dev分支的代码时就不会合并那些文件。

参考资料

  1. git官方中文资料
  2. 廖雪峰的Git教程
  3. 阮一峰的常用Git命令清单
  4. Kxxoling的Git入门
  5. Git忽略提交规则
  6. Git撤销&回滚操作
  7. Git rebase&merge区别
  8. visual studio git插件使用
  9. TortoiseGit工具使用

原文地址:https://www.cnblogs.com/universal/p/10420221.html

时间: 2024-10-11 12:07:04

Git使用介绍的相关文章

git基础介绍

git基础介绍 这是git操作的基础篇,是以前的写的操作文档,就没有进行手打,直接把图片贴进来了,你们担待哈,有不正确的地方可以指正出来,我将在第一时间去修改,多谢哈! 一.文件状态:git系统的文件状态归属 二.主机之间的操作:克隆他人的项目:合并进行中的项目 三.git通讯录:设置推送的地址 四.git推送到github: github是目前最大的开源代码库,将自己创造的项目传到github,不仅可以让大牛们帮你优化不足,还能让后来的学弟们汲取你的精华,现在就开始练习使用github吧!

GIT入门介绍

现在git已经成为当下最流行的版本管理系统,不管是从事的是开发还是运维或者是与之相关的工作岗位,了解一下git的强大之处是非常有必要的.本文为自己的学习笔记,借鉴与廖雪峰老师的git教程,(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ )有不足之处大家可以互相交流. GIT介绍 "Talk is cheap, Show me the code." 说到git不得不提

git的介绍与使用

最近在学习一些开源技术,顺带想起了之前曾经别人推荐的git.作为一个程序员,肯定也都会很想要有一个自己的服务器,然后将一些重要数据备份在服务器中.如果是需要和朋友共同开发,那服务器更是不可或缺.但是你懂得,我等屌丝,木有钱购买自己的服务器,也不愿意去买一个服务器,嘿嘿,不是有开源的git么?正合我意,好吧,顺带日志也是需要记录的. 版本控制 本地 为了让某个文件能够恢复到之前的某个时间点,需要对文件进行版本控制.最开始的时候,可以在本地以时间为为单位,建立文件夹,使用copy文件到多个文件夹的技

Git简单介绍(一)

Git是什么? Git是目前世界上最先进的开源的分布式版本控制系统(没有之一),用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持. Git有什么特点? 简单的说就是:高端大气上档次! Git与SVN区别 GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系

git的介绍及使用

一.git是什么 Git是目前世界上最先进的分布式版本控制系统.svn也是版本控制系统. SVN与Git的最主要的区别: SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本. 然后干活,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就不好使了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电

Git入门介绍读后感

本章是Git使用的入门介绍.Git是linux之父linus编写的Git进行代码管理的.Git在各方面都有与其他同类的源代码管理软件.在学习android及linux内核.驱动开发的过程中都会涉及大量的源代码,因此本章中涉及到的Git的基本使用都是我们开发android系统是必要的准备条件. 使用Git之前应该先安装Git,安装时需要输入如下命令: # apt-get install git # apt-get install git-doc git-svn git-emall git-gui

Git基本介绍

序言:今天老师又讲了一下git,这是个复杂的东西,说实话班上大多是人还是没听懂. 然后又讲了zepto,这也是一个插件,与jquery基本上没有太大区别,直接在网上下载你需要的zepto.js插件:www.zeptojs.cn 一.Git的概念: Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Torvalds 开始着手开发 Git 是为了作

git 简单介绍

1.安装git,安装完成后进入git bash,输入配置信息  git config --global user.name "Your Name"  git config --global user.email "[email protected]" 若要修改: git config --global --replace-all user.name "your name" 查看全局信息: git config --list 2.git init

简单的git入门介绍及常用操作

集中式版本控制系统采用中央服务器上存储的所有文件和实现团队协作.但是CVCS主要缺点是中央服务器的单点故障,即故障.不幸的是,如果中央服务器宕机一小时,然后在该时段没有人可以合作.即使在最坏的情况下,如果中央服务器的磁盘被损坏,并没有采取适当的备份,那么将失去整个项目的历史. DVCS客户不仅检出的最新快照目录,但他们也完全反映资源库.如果SEVER停机,然后从任何客户端库可以复制回服务器,以恢复它.每个结账是完整的版本库备份. Git不会依赖中央服务器,这就是为什么可以执行许多操作,当处于脱机