百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

版本控制系统Git完整图文教程(版本管理 git)

wxin55 2024-11-04 14:49 9 浏览 0 评论

作者/@Java讲坛杨33


大部分从事软件开发的小伙伴,最先开始接触的版本控制系统应该是SVN吧,主要原因还是早些年,企业使用SVN蛮多的,并且上手确实容易的多,但是最近这些年越来越多的企业要求会使用Git。所以现在还不学习Git,还真有点不思进取的意思。


下载操作Git命令的Windows客户端:Git bash

下载方式可参考我写的另外一篇文章:Windows系统安装操作gitee仓库的工具:Git bash

Git的本地仓库和远程仓库

多人协调开发时,每个开发人员就是在自己电脑的本地仓库进行代码的版本维护。

只有需要共享代码、合并代码时,才向远程仓库上传代码。

接下来我们分别实际操作下本地仓库和远程仓库。

本地仓库


1、新建本地仓库

需使用命令:git init,在本地文件夹创建一个本地Git仓库。

此时,执行命令git init后,本地文件夹下多了一个.git文件夹,它就是本地Git仓库了。

2、添加工作区的文件到本地仓库中

这部分有两个步骤。第一,先将文件添加到本地仓库暂存区;第二,然后将暂存区的文件提交到本地仓库。

第一,将新建的文件添加到本地仓库暂存区中,使用命令:git add 新建1.txt

执行完命令后,此时,还可以使用命令:git status,来查看文件的状态。

第二,将暂存区的文件提交到本地仓库,使用命令:git commit -m "提交新文件"

-m参数是为了添加本次提交的注释信息。

下图很清晰的显示了commit之前跟之后的仓库状态。所以使用命令git status可以很方便的了解到,本地仓库被新建或者修改的文件,进行到哪一步了,接下来应该做哪一步了。

远程仓库

本次使用的是在码云服务器(https://gitee.com/)上搭建远程Git仓库。

搭建教程请参考:新建远程仓库

1、接下来,我们上传已经执行commit到本地仓库的文件到远程仓库。

  • 上传之前,我们首先在本地仓库去关联远程仓库地址。

操作命令为:git remote add origin https://gitee.com/yangj433/test.git

origin,意思是给远程仓库起了一个名字。

https://gitee.com/yangj433/test.git,意思是远程仓库的地址。

  • 关联之后,就可以将本地仓库的文件上传到远程仓库了。

执行命令为:git push -u origin master

origin:远程仓库的名字。

master:本地仓库的名字,该名字是在执行命令git init时,默认给本地仓库起的名字。

-u:关联远程仓库和本地仓库。

刷新远程仓库,就能看见本地仓库发送过来的文件。

克隆远程仓库文件到本地文件夹

在本地文件夹打开Git bash工具,执行命令为:git clone https://gitee.com/yangj433/test.git

就能把远程仓库的所有文件都克隆到本地文件夹下,并且是已经存在.git文件夹的本地仓库。

接下来,我们依据两个本地仓库,来模拟不同的两位开发人员,修改文件之后,如何操作对远程仓库的发送、拉取文件的。

如图,两个本地仓库:

在本地仓库1,修改文件,执行add、commit操作之后,发送到远程仓库中。

在本地仓库2,从远程仓库拉取最新代码,这个最新代码就能看见仓库1修改的内容。

拉取命令为:git pull origin master

本地仓库新建分支

我们从前面的介绍了解到,master是git默认分配的一个分支名称。但是在实际工作的开发中,并不建议直接在该master分支上进行各种文件变更操作。而是新建另外一个开发用的分支,当这个分支下的代码测试没有问题时,再添加到master分支上。这样可以保证master分支的每次提交都是稳健的版本。

查看当前本地仓库下都有哪些分支,执行命令:git branch

创建开发分支,执行命令:git branch dev

因为默认使用的是master分支,提交代码还是在master分支上操作。所以如果下次想将文件提交到新建的开发分支dev上,就要切换分支,执行命令:git checkout dev

查看本地仓库的分支所有提交日志

查看日志的命令为git log或者git log --oneline

从日志中,可以看到是谁提交的,提交的时间等等信息。

合并分支

我们在上面新建了一个开发分支dev,如果在这个分支下,修改、新增文件后,如何合并到主分支master上呢?接下来就学习下,合并分支的步骤。

  • 首先,我们先切换到开发分支dev下;
  • 然后修改文件;
  • 执行add、commit命令。

此时,没合并之前,切换到分支master时,可以看到刚刚在分支dev下修改过的内容是看不到的。

  • 在分支master下,执行合并分支的命令git merge dev

上面的合并比较简单。单方面的修改,即主分支master未改变,开发分支dev做了变更。

那如果两个分支,即主分支master和开发分支dev对同一文件做了修改。此时出现冲突,怎么解决冲突呢?

合并冲突

首先我们来重现下冲突的场景。

  • 主分支master下修改文件,并执行add、commit命令。
  • 切换到开发分支dev下,也对同样的文件做修改,并执行add、commit命令。

此时,切回到主分支master下合并文件修改,就会出现冲突问题。

解决冲突问题:

  • 打开冲突文件,可以看到=======将两方修改的内容清晰的划分出来,此时只需要确定哪些是不必要的修改,删掉即可。然后再做一次add、commit命令。

今天的知识讲解到这儿,更多干货正在马不停蹄的制作中。


作者:杨33,北京互联网公司在职Java开发,专注分享写作干货。欢迎关注我,期待你的点赞评论。

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: