注意:此处省略git的安装

1..git的工作流程示意图:

2.本地仓库的初始化:

2.1 创建一个文件夹,如我创建的是:D:\gitdemo\shop

  2.2 进入shop目录,鼠标右键,打开git命令窗口,输入git init 命令,按回车键:

此时本地仓库已经初始化,生成的.git目录和相关文件是隐藏起来的,使用命令ll -al 可以看到:

查看该目录文件: 命令 ll .git

注意:里面的任何文件都不要修改和删除

3.角色的创建: 本地仓库要跟远程仓库进行同步,需要一个角色用来区分每个人提交的代码,如果电脑有多个项目,不想每一个都设置的话,可以设置一个全局的角色

    3.1 命令 名字: git config user.name xxx     邮箱:git config user.email xxx@xx.com  查看: cat ./.git/config  注意这里的邮箱跟你远程仓库的登陆邮箱没有任何关系,这里的邮箱只是用来区分身份,可以不真实存在

3.2 全局角色的创建:名字: git config --global user.name xxx     邮箱:git config --global user.email xxx@xx.com  查看: cat ~/.gitconfig  注意这里的邮箱跟你远程仓库的登陆邮箱没有任何关系, global前面有2个横杠,global和横杠之间不能有空格

4.git的基本操作(工作中基本用idea图形化操作就可以了,此处当作了解)

  4.1 查看工作区和暂存区的状态(git status):

4.2 工作区到暂存区的操作: git add:创建一个文件如a.txt然后使用将其从工作区新增到暂存区,如果是指定某个文件命令: git add +文件名,如果是所有的文件使用: git add --all (all前面是2个横杠)

提交到暂存区后,颜色变成绿色了

4.3 暂存区到本地库的操: git commit -m "描述" + 文件名 如果是提交所有文件: git commit -m "描述" + --all

提交所有文件:

4.4 查看提交记录,有事想追责,或者想找回历史版本,此时可以使用git log,这里可以显示提交的记录,每个记录都有唯一编号,用户名和邮箱此时可以区分是哪个用户提交的了:

不同的显示格式:

git log --pretty=oneline

git log --oneline

git reflog

HEAD@{移动到当前版本需要多少步}

注意:提交记录指的是从暂存区到本地仓库的记录,也就是使用git commit -m 描述信息 文件名(--all) 指令的记录

4.5 版本回退 git reset --hard(soft/mixed) +版本编号(git log 或者git log --oneline 显示的唯一编号,长的或短的都可以)

新建一个order文件夹,git init初始化,创建一个a.txt 使用git add 和git commit提交到本地仓库

  

鼠标右键删除a.txt,然后再执行git add 和git commit

现在如果,我想回到没有删除的版本,上图那个编号为be42083的版本,如何操作:使用 git reset --hard be42083

如果此时又反悔了,想前进到删除版本99d98e4,同样使用git reset --hard 99d98e4

总结,每次使用git commit提交,都会在git log中存在一条记录,每条记录都有一个版本号,使用git reset命令,可以向前或者回退到某一个版本:

版本回退还有其他2种命令,但只能回退,不能往前  :

git reset --hard HEAD^  代表回退一个版本 , git reset --hard HEAD^ ^代表回退2个版本,多少个^代表回退多少个版本

git reset --hard HEAD~ n 代表回退n个版本,n可以是1,2,3...等数字

那么git reset --hard 和 git reset --soft 和git reset ---mixed 的区别:

4.6 文件差异的比较

新增一个a.txt,然后提交的本地仓库,只修改a.txt文件内容,此时执行git diff +文件名(不加文件名就是比较全部文件)

此时比较的是工作区和暂存区的文件差异

如果要跟历史某个版本进行比较:

gitdiff[本地库中历史版本][文件名] :作用是将工作区的和本地历史的版本进行比较

4.7 分支管理

在实际工作中,开发有开发分支,测试有测试分支,生产有生产分支,一般在开发分支进行开发代码,开发完,合并代码到测试分支,测试完,合并到生产分支,此处以一个mast分支和一个开发分支dev为例子:

新建一个demo文件夹,然后初始化仓库,新增a.txt到本地仓库:使用git branch -v 查看所在的分支

可以看到目前在master 分支

新建分支dev: git branch dev

此时修改一下a.txt,新增一些内容:

切换到dev分支 git checkout dev

此时查看a.txt

a.txt没有内容,因为a.txt在创建dev分支后,在master分支新增的

现在,在dev分支给a.txt加上一些内容

添加到本地仓库

将dev分支的内容合并到master分支

1.切换到master 分支 git checkout master

2. 合并dev 分支 git merge dev

此时打开a.txt可以看到

手工合并,去掉特殊的字符

重新提交a.txt

注意此时的git commit -m "message" 后面一定不能带具体文件名,到此,dev的内容就合并到了master分支了

此时切到dev分支:

查看a.txt

dev分支的内容并不会改变,原因是dev的内容合并到master分支,但master分支的内容并没有合并到dev分支

5. 远程仓库的使用,此处以github为例子:

  5.1生成SSH key

        进入当前用户的家目录 cd ~ 
           删除.ssh 目录 rm -rvf .ssh 
           运行命令生成.ssh 密钥目录 ssh-keygen -t rsa -Cyangxiaohui@qq.com [注意:这里-C 这个参数是大写的 C 邮箱可以随便写,不一定要存在] 执行后一路按回车
           进入.ssh 目录查看文件列表 cd.ssh
           ls -lf 
          查看 id_rsa.pub 文件内容

登陆github设置相应的ssh key

使用ssh key 从 远程仓库github或者gitlab下载或者上传代码时不用填写账号密码,如果是使用http方式会提示要账号和密码

5.2远程仓库的创建:

5.3 之后我们模拟,一个名叫小明的架构师搭好一个架构并上传到服务器,另外有一名叫小红的开发从远程仓库中下载项目,并进行开发

架构师的操作:

此时查看github:

此时架构师已经将项目上传到远程仓库了,那么接着到开发xiaoHong的操作了:

注意:执行git clone xxxx,就已经在本地创建了本地仓库了,不用再执行git init了

小红接着去修改a.txt添加一句话:我是开发小红

架构师拉取变更的内容:

5.4 gitHub登陆的账号和邮箱/本地git config 创建的用户名和邮箱,生成ssh key时使用的邮箱 他们直接的关系

5.5 分支的创建以及同步到gitHub

xiaoHong创建了一个dev分支,同时在dev分支新增一个b.txt

查看github:由于上面我并没有将b.txt提交到本地仓库,所以在gitHub上看不到b.txt

5.6 分支的删除以及同步gitHub

5.7查看远程分支列表

上面测试的2个用户,架构师和小红都是在我的电脑上,如果他们是在不同的电脑上,小红要提交代码到gitHub的话,要架构师先加她到合作者

6 git 在IDEA 中的使用

6.1 clone远程代码

6.2 新增一个test.txt文件并上传到远程仓库

6.3查看提交记录

6.4 版本回退:

方法一(推荐使用)

远程仓库如下:

第一步拷贝历史版本的版本号:

点击reset后:

接着拷贝新的版本号:

最后使用add--commit -push 到远程仓库,这里不要拉取远程仓库代码了,直接push;

此时远程仓库已经没有b.txt了,证明版本已经回退了

至此,其他开发人员只要pull远程仓库的代码,代码版本就回退了,这里其实相当于拷贝历史版本的代码到当前版本,并不会删除之后的版本

方案二: 过程如下,这里换了个项目实验:使用git命令窗口

这种方式会导致其他开发者本地的版本号高于远程仓库的版本号,除非他们删除本地代码,从远程仓库重新clone,要不然,如果他们push自己的代码上远程仓库,那么远程仓库的代码又是最新的了

6.5 远程分支的创建:

新建本地分支:

保持当前所在分支为dev,在该分支新增点内容

提交到远程分支

此时远程已经有dev分支了:

由于master还没有dev分支新增的代码,当dev分支开发完成,代码要合并到master分支:

先切到master分支:

从dev拉取代码到master 分支

之后就是将合并后的代码进行add -- commit -push 到远程仓库

6.6远程分支的删除

此时远程仓库:

同理:本地分支的删除

6.7添加忽略文件:

https://github.com/github/gitignore/blob/master/Java.gitignore
文件名:.gitignore 创建该文件并放到根目录下:
内容:

创建一个以.log为后缀的文件

add--commit --push到远程仓库

忽略文件的语法规则:

6.8 拉取远程分支列表

6.9 分支的名称修改

本地分支名称修改:

远程分支名称修改(间接实现):

先创建一个新的本地分支,然后提交到远程分支,接着删除远程旧的分支

6.9 代码冲突的解决: 当同一个文件同时被A和B2个人修改,A先提交到远程仓库,之后B在push之前先进行pull操作,此时会报如下错误:

双击View them

如果是点击Merge

之后add --commit --pull --push提交到远程仓库

7.0 idea创建项目并上传远程仓库

场景:假如你是公司架构师,你在本地搭建好了架构,准备上传远程仓库:

1.假如你搭建的项目叫shop,那么搭建好后,进入shop项目,使用git 命令窗口执行 git init 之后执行 git remote add origin xxxxxxxx(远程仓库的地址)

2.之后你就可以在idea中进行add -- commit --push 操作了

8.项目迁移

背景:如果我想将一个项目从gitHub 迁移到gitlab,并且保留所有发分支和提交历史

1.打开git 命令窗口 git remote -v 可以看到当前项目对应的远程仓库地址

2. 添加一个新的远程仓库并给它起一个跟之前仓库不一样的别名

3. 此时查看远程仓库

4. 然后提交当前分支到新加的地址

5.如果还有其他分支,先切换分支,再提交

如果还有其他分支,重复上面流程,切换分支继续提交到远程仓库,所有分支提交成功就完成了

注意:如果提交报没有权限,请将新地址的管理员权限付给该提交用户

git的详细使用,项目创建到同步远程仓库,版本回退,忽略文件,分支创建,分支合并,分支名称修改,冲突解决,项目迁移的更多相关文章

  1. 【git】远程仓库版本回退方法

    1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的版本到远程分支,怎么回退远程分支 ...

  2. [Git高级教程(二)] 远程仓库版本回退方法 - 梧桐那时雨 - CSDN博客

    1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的版本到远程分支,怎么回退远程分支 ...

  3. Git远程仓库版本回退

    1.首先将本地仓库版本回退到自己想要的版本. git reset commit_id 2.将回退后的版本强制推送到远程仓库. git push -f origin master

  4. 记录一次Git远程仓库版本回退

    操作过程: 首先查看远程仓库版本,如下图所见,最近一次提交为2018-03-19 22:16:25 第一步:使用git log命令查看历史提交记录,选择要回退的版本号,commit后面一串字符,这里我 ...

  5. git 本地项目推送至远程仓库

    1 在本地文件夹下创建一个 Git 仓库(如test目录下) git init 2 此时test文件夹即是你的maste主分支,你可以在改文件夹下写自己的项目 3 将test文件夹下的内容提交至暂存区 ...

  6. 使用git命令将本地项目推送到远程仓库

    将本地项目推送到远程仓库 这里先放一张图, 有助于理解git命令 1. 在GitHub上新建一个仓库 注意不要勾选自动生成README.md文件, 否则会产生某些问题, README.md文件到时可以 ...

  7. 把本地git仓库的项目上传到远程仓库

    之前在学校实验室服务器上建了一个git远程仓库,存放我写的express项目代码.后来由于出去实习,就无法访问那个远程仓库了,因为它在校园网内. 还好我的笔记本中有这个项目完整的本地仓库,于是我就试着 ...

  8. 项目管理---git----快速使用git笔记(五)------本地项目代码提交到远程仓库---新建项目

    上一篇我们已经知道了怎么从远程仓库获取项目文件代码. 项目管理---git----快速使用git笔记(四)------远程项目代码的首次获取 git还有一种使用场景是 我本来在电脑里就有一个项目,现在 ...

  9. 使用tortoise git将一个现有项目推送到远程仓库

    一.安装文件: 1.git https://git-scm.com/downloads 2.tortoise git https://tortoisegit.org/download/ 二.将一个现有 ...

随机推荐

  1. 阿里巴巴Java开发手册1.4.0

    链接:https://pan.baidu.com/s/16kKzcRcu20SMDdydMm9ZUw 提取码:p9ef

  2. 没想到吧!关于Dubbo的『消费端线程池模型』官网也写错了。

    这是why的第 63 篇原创文章 荒腔走板 大家好,我是 why,欢迎来到我连续周更优质原创文章的第 63 篇.老规矩,先荒腔走板聊聊其他的. 上面这张图片是我前几天整理相册的时候看到的.拍摄于 20 ...

  3. 安装Apache所踩的的坑

    刚开始接触PHP等一些脚本语言,需要建立一个本地的服务器,变进行安装了Apache.在其中碰到了诸多问题,和大家一一分享一下. 一.刚解压完成后使用cmd面板进入解压完成的apache的bin目录下, ...

  4. Update LateUpdae FixedUpdate

    这个问题本来是在研究动画系统时遇到的:OnAnimatorMove在Animator.Update()调用,那这个Animator.Update是什么时候调用的呢. Animator Componen ...

  5. unity 4种实现动态障碍方法

    此文将介绍4种实现动态障碍的方法,2种基于navmesh,2种基于astar算法. 1.基于navmesh. 1.制作场景障碍: a.有几个独立的障碍物,就定义几个user area,即,一个场景仅仅 ...

  6. Guava Retrying

    目录 依赖 使用demo RetryerBuilder 实现callable接口 调用 git 参考 依赖 <dependency> <groupId>com.github.r ...

  7. Codeforces1365

    AC代码 A. Matrix Game 对于给定矩阵,剩余可用的位置的数目是确定的,根据奇偶性判断就完事了. B. Trouble Sort 如果数组\(b\)有0有1,那么Yes.否则只有数组\(a ...

  8. Azure Blob (三)参数设置说明

    一,引言 上一篇将 Azure Blob 存储的时候,有使用到一个 .NET  Core Web 项目,通过代码的方式进行操作 Azure Blob 的数据,接着上一篇的内容,今天继续看一下代码,具体 ...

  9. Ajax请求携带Cookie

    目录 xhr ajax cookie跨域处理 客户端 服务端 服务端设置跨域的几种方式 方式一 重写addCorsMappings方法 方式二 对单个接口处理 方式三 @CrossOrigin注解 方 ...

  10. Avtiviti工作流规范 BPM与BPMN

    进过长时间的轮转,重拾Activiti,因为最近在智联上看到多家公司的需求上写的,都要熟悉工作流引擎,也就是activiti所以重拾 之前看的视屏是activiti5,我觉得版本有点低,所以打算看一下 ...