0


git的简单介绍和使用

git学习

1. 概念

Git是一个免费和开源的分布式版本控制系统。相较于SVN具有便于本地分支等特性。

git和svn的区别和优势

1.1 区别

  • SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
  • Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

1.2 git优势

  1. 容易分支;git鼓励创建一个或多个本地分支进行开发且代价极小。与此对应SVN的分支基本上等于将整个项目进行拷贝,成本大。
  2. 速度快;大部分操作都在本地进行,如查看提交记录。但是在拉取的时候会慢,SVN拉取的是最新版本,而GIT会拉取整套版本;
  3. 分布式;与SVN集中式管理相比,GIT每个用户都是主服务的一个完整备份;
  4. 有暂存区;可用于提交部分文件;
  5. 数据安全;每个文件与每次提交都会被验证

2. git的三个状态和三个阶段

  • 三个状态:已修改,已暂存,已提交
  • 三个阶段:工作区,暂存区,仓库

三个状态分别对应三个阶段

2.1 三个状态:

  • 已修改(modified):表示修改了文件,但还没保存到仓库中。
  • 已暂存(staged):已暂存,表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交(committed):表示数据已经安全地保存在本地仓库中。

2.2 三个阶段:

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库
  • 工作区(Working Directory):对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区(Staging Area):保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
  • 仓库(Repository): Git用来保存项目的元数据和对象数据库的地方,分为本地仓库与远程仓库。

3. 常用的git命令

3.1 下面是最常用的命令

序号命令名称****描述1git clone克隆复制远程仓库包含历史版本在内的几乎所有数据至本地仓库。2 ❤git pull拉取将远程仓库的最新内容数据下载到你的本地仓库并尝试合并。3 ❤git fetch获取将远程仓库的最新内容数据下载到你的本地仓库但不会自动合并。4git checkout检出多用途命令,从Git仓库提取文件、撤销修改、切换分支等。5git diff比较未暂存文件与最后一次提交的文件或者已暂存文件差异。6 ❤git add跟踪跟踪新文件并使之处于暂存状态或合并时将冲突文件标识为已解决等。7 ❤git commit提交将未暂存的或已暂存的文件保存至本地仓库。8 ❤git push推送将文件推送到远程仓库。9git log查看提交历史。10❤git branch分支创建或查看分支。11❤git merge合并合并分支。
fetch和pull的区别:

  • 拉取pull和获取fetch的区别就是是否会自动合并代码;
  • 此外获取fetch除了不会自动合并代码,还可以提前预知远程分支做了哪些提交

3.2 git命令操作流程图如下:

对应三个阶段+三个状态进行学习
在这里插入图片描述

4. 分支内容学习

4.1 项目远程仓库

共分为两个分支。

  • master分支:主干分支。用于发布生产环境。
  • dev分支:开发分支。(一般我们都是从dev拉取版本)接收本地dev分支的合并。测试无误后才合并至master分支,后续根据情况决定是否建立测试分支。

4.2 项目本地仓库

  • 包括一个dev分支与多个功能及bug修复分支。
  • dev分支用来合并其它功能分支的提交,同时用来推送远程dev分支。
  • 功能分支及bug修复分支是临时分支,用于开发具体功能和修复bug,开发完成合并至本地dev分支后可删除;注意线上的bug修改分支需要从远程master分支进行拉取。

4.3 生产环境从远程master分支拉取打包,暂不设置“integration manager”角色,每位开发人员均可以向master分支合并。

5. 具体开发步骤

  1. 拉取远程最新提交的dev分支至本地dev分支,保证本地dev分支代码为最新版本。
  2. 从本地dev分支拉取新的功能分支dev-temp-xxx并在其上进行开发> 就是新建一个dev-temp-xxx分支
  3. 本地功能开发分支在开发完成并且自测无误后进行代码提交commit(commit是提交到本地仓库)。> ps:只是提交到本地仓库,并不是合并merge;> > 每个temp分支和dev都有指针指向自己的版本,在没有合并之前是不会产生新的版本的;
  4. 切换到本地dev分支从远程dev分支拉取最新提交。> 保证本地dev最新;因为在我们第一次拉取远程dev进行功能开发期间,可能其他人已经push了一个版本修改了相同的功能,这个时候我们就得重新拉取远程dev到本地dev,以便于解决 / 避免冲突
  5. 将功能分支dev-temp-xxx合并(merge)到本地dev分支,此过程可能产生冲突,解决冲突。> 再本地dev重新拉取以后,我们在把temp分支合并到本地
  6. 推送本地dev分支到远程dev分支。
  7. 将新建的功能分支dev-temp-xxx删除。

个人 具体理解如下:

6. 如何解决冲突

  1. 冲突发生时首先备份自己开发的内容。
  2. 然后用他人的版本解决冲突。> 舍弃自己的版本,直接用他人的版本作为merge的父类;
  3. 将自己新开发的内容回添到已解决冲突的文件中。> 不是简单的复制粘贴上去
  4. 提交。

7. 减少冲突的方法

  • 任务分解时功能独立;
  • 开发前拉取代码;(尽量早拉取)
  • 开发测试完成后及时提交代码。(尽快早提交)

8. 关于对冲突和合并的理解

  • 冲突的解决,分支的合并都是在本地的;
  • 本地的dev分支版本,都是高于拉取时远程dev的版本,所以在本地合并(merge)之前得重新拉去最新的远程dev分支

9. 补充其他可能用的命令

命令简要说明git add添加至暂存区git add–interactive交互式添加git apply应用补丁git am应用邮件格式补丁git annotate同义词,等同于 git blamegit archive文件归档打包git bisect二分查找git blame文件逐行追溯git branch 分支相关分支管理git cat-file版本库对象研究工具git checkout 分支相关检出到工作区、切换或创建分支git cherry-pick提交拣选git citool图形化提交,相当于 git gui 命令git clean清除工作区未跟踪文件git clone克隆版本库git commit提交git config查询和修改配置git describe通过里程碑直观地显示提交IDgit diff差异比较git difftool调用图形化差异比较工具git fetch获取远程版本库的提交git format-patch创建邮件格式的补丁文件。参见 git am 命令git grep文件内容搜索定位工具git gui基于Tcl/Tk的图形化工具,侧重提交等操作git help帮助git init版本库初始化git init-db同义词,等同于 git initgit log显示提交日志git merge 分支相关分支合并git mergetool图形化冲突解决git mv重命名git pull拉回远程版本库的提交git push推送至远程版本库git rebase分支变基git rebase–interactive交互式分支变基git reflog分支等引用变更记录管理git remote远程版本库管理git repo-config同义词,等同于 git configgit reset重置改变分支“游标”指向git rev-parse将各种引用表示法转换为哈希值等git revert反转提交git rm删除文件git show显示各种类型的对象git stage*同义词,等同于 git addgit stash保存和恢复进度git status显示工作区文件状态git tag里程碑管理

9.1 对象库操作相关命令

命令简要说明git commit-tree从树对象创建提交git hash-object从标准输入或文件计算哈希值或创建对象git ls-files显示工作区和暂存区文件git ls-tree显示树对象包含的文件git mktag读取标准输入创建一个里程碑对象git mktree读取标准输入创建一个树对象git read-tree读取树对象到暂存区git update-index工作区内容注册到暂存区及暂存区管理git unpack-file创建临时文件包含指定 blob 的内容git write-tree从暂存区创建一个树对象

9.2 数据传输相关命令

命令简要说明git fetch-pack执行 git fetch 或 git pull 命令时在本地执行此命令,用于从其他版本库获取缺失的对象git receive-pack执行 git push 命令时在远程执行的命令,用于接受推送的数据git send-pack执行 git push 命令时在本地执行的命令,用于向其他版本库推送数据git upload-archive执行 git archive –remote 命令基于远程版本库创建归档时,远程版本库执行此命令传送归档git upload-pack执行 git fetch 或 git pull 命令时在远程执行此命令,将对象打包、上传

9.3 分支相关命令

9.3.1 git branch 分支管理

git branch 查看本地所有分支

git branch -a 查看所有的分支

git branch -r 查看远程所有分支

9.3.2 git checkout 切换或新建分支

git checkout --track origin/dev 切换到远程dev分支

git checkout dev 切换到本地dev分支

git checkout -b dev 建立一个新的本地分支dev

9.3.3 git merge 分支合并

git merge origin/dev 将分支dev与当前分支进行合并

标签: git github gitee

本文转载自: https://blog.csdn.net/m0_48904153/article/details/132193308
版权归原作者 大龄烤红薯 所有, 如有侵权,请联系我们删除。

“git的简单介绍和使用”的评论:

还没有评论