git(安装,常用命令,分支操作,gitee,IDEA集成git,IDEA集成gitee,IDEA集成github,远程仓库操作)

文章目录

  • [1. Git概述](#1. Git概述)
    • [1.1 何为版本控制](#1.1 何为版本控制)
    • [1.2 为什么需要版本控制](#1.2 为什么需要版本控制)
    • [1.3 版本控制工具](#1.3 版本控制工具)
    • [1.4 Git简史](#1.4 Git简史)
    • [1.5 Git工作机制](#1.5 Git工作机制)
    • [1.6 Git和代码托管中心](#1.6 Git和代码托管中心)
  • [2. Git安装](#2. Git安装)
  • [3. Git常用命令](#3. Git常用命令)
    • [3.1 设置用户签名](#3.1 设置用户签名)
      • [3.1.1 说明](#3.1.1 说明)
      • [3.1.2 语法](#3.1.2 语法)
      • [3.1.3 案例实操](#3.1.3 案例实操)
    • [3.2 初始化本地库](#3.2 初始化本地库)
      • [3.2.1 基本语法](#3.2.1 基本语法)
      • [3.2.2 案例实操](#3.2.2 案例实操)
      • [3.2.3 结果查看](#3.2.3 结果查看)
    • [3.3 查看本地库状态](#3.3 查看本地库状态)
      • [3.3.1 基本语法](#3.3.1 基本语法)
      • [3.3.2 案例实操](#3.3.2 案例实操)
        • [3.3.2.1 首次查看本地库状态](#3.3.2.1 首次查看本地库状态)
        • [3.3.2.2 新增文件(hello.txt)](#3.3.2.2 新增文件(hello.txt))
        • [3.3.2.3 再次查看本地库状态](#3.3.2.3 再次查看本地库状态)
    • [3.4 添加暂存区](#3.4 添加暂存区)
      • [3.4.1 将工作区的文件添加到暂存区](#3.4.1 将工作区的文件添加到暂存区)
      • [3.4.2 查看状态](#3.4.2 查看状态)
    • [3.5 提交本地库](#3.5 提交本地库)
      • [3.5.1 将暂存区的文件提交到本地库](#3.5.1 将暂存区的文件提交到本地库)
      • [3.5.2 查看状态](#3.5.2 查看状态)
    • [3.6 修改文件(hello.txt)](#3.6 修改文件(hello.txt))
      • [3.6.1 查看状态](#3.6.1 查看状态)
      • [3.6.2 添加修改文件到暂存区](#3.6.2 添加修改文件到暂存区)
      • [3.6.3 查看状态](#3.6.3 查看状态)
      • [3.6.4 提交暂存区文件到本地库](#3.6.4 提交暂存区文件到本地库)
    • [3.7 文件批量提交](#3.7 文件批量提交)
      • [3.7.1 修改文件并新建其他文件](#3.7.1 修改文件并新建其他文件)
      • [3.7.2 批量添加修改文件到暂存区](#3.7.2 批量添加修改文件到暂存区)
      • [3.7.3 提交暂存区所有文件到本地库](#3.7.3 提交暂存区所有文件到本地库)
    • [3.8 历史版本](#3.8 历史版本)
  • [4. Git分支操作](#4. Git分支操作)
    • [4.1 什么是分支](#4.1 什么是分支)
    • [4.2 分支的好处](#4.2 分支的好处)
    • [4.3 分支的操作](#4.3 分支的操作)
      • [4.3.1 查看分支](#4.3.1 查看分支)
      • [4.3.2 创建分支](#4.3.2 创建分支)
      • [4.3.3 master分支修改](#4.3.3 master分支修改)
      • [4.3.4 切换分支](#4.3.4 切换分支)
        • [4.3.4.1 基本语法](#4.3.4.1 基本语法)
        • [4.3.4.2 案例实操](#4.3.4.2 案例实操)
      • [4.3.5 合并分支](#4.3.5 合并分支)
        • [4.3.5.1 基本语法](#4.3.5.1 基本语法)
        • [4.3.5.2 案例实操](#4.3.5.2 案例实操)
      • [4.3.6 产生冲突](#4.3.6 产生冲突)
      • [4.3.7 解决冲突](#4.3.7 解决冲突)
        • [4.3.7.1 编辑有冲突的文件](#4.3.7.1 编辑有冲突的文件)
        • [4.3.7.2 提交文件](#4.3.7.2 提交文件)
      • [4.3.8 删除分支](#4.3.8 删除分支)
        • [4.3.8.1 语法](#4.3.8.1 语法)
        • [4.3.8.2 案例实操](#4.3.8.2 案例实操)
    • [4.4 创建分支和切换分支图解](#4.4 创建分支和切换分支图解)
  • [5. Gitee(码云)操作](#5. Gitee(码云)操作)
    • [5.1 Git代码托管服务](#5.1 Git代码托管服务)
    • [5.2 远程代码托管平台](#5.2 远程代码托管平台)
    • [5.3 码云帐号注册和登录](#5.3 码云帐号注册和登录)
    • [5.4 创建远程仓库](#5.4 创建远程仓库)
    • [5.5 远程仓库操作](#5.5 远程仓库操作)
    • [5.6 SSH免密登录](#5.6 SSH免密登录)
      • [5.6.1 生成ssh密钥对](#5.6.1 生成ssh密钥对)
      • [5.6.2 远程仓库配置公钥](#5.6.2 远程仓库配置公钥)
      • [5.6.3 测试](#5.6.3 测试)
  • [6. IDEA集成Git (本地库)](#6. IDEA集成Git (本地库))
    • [6.1 IDEA中创建测试项目](#6.1 IDEA中创建测试项目)
    • [6.1 配置Git忽略文件](#6.1 配置Git忽略文件)
      • [6.1.1 为什么需要忽略文件](#6.1.1 为什么需要忽略文件)
      • [6.1.2 Java各种编辑器的特定文件](#6.1.2 Java各种编辑器的特定文件)
        • [6.1.2.1 Eclipse特定文件](#6.1.2.1 Eclipse特定文件)
        • [6.1.2.2 IDEA特定文件](#6.1.2.2 IDEA特定文件)
        • [6.1.2.3 Maven工程的target目录](#6.1.2.3 Maven工程的target目录)
      • [6.1.3 创建配置忽略文件](#6.1.3 创建配置忽略文件)
    • [6.2 定位Git程序](#6.2 定位Git程序)
    • [6.3 初始化本地库](#6.3 初始化本地库)
    • [6.4 添加到暂存区](#6.4 添加到暂存区)
    • [6.5 提交到本地库](#6.5 提交到本地库)
    • [6.6 切换版本](#6.6 切换版本)
    • [6.7 创建分支](#6.7 创建分支)
      • [6.7.1 查看所有分支](#6.7.1 查看所有分支)
      • [6.7.2 新建分支](#6.7.2 新建分支)
    • [6.8 切换分支](#6.8 切换分支)
    • [6.9 合并分支](#6.9 合并分支)
    • [6.10 解决冲突](#6.10 解决冲突)
  • [7. IDEA集成Gitee(码云)](#7. IDEA集成Gitee(码云))
    • [7.1 IDEA集成码云](#7.1 IDEA集成码云)
      • [7.1.1 IDEA安装码云插件](#7.1.1 IDEA安装码云插件)
      • [7.1.2 push推送本地库到远程库](#7.1.2 push推送本地库到远程库)
        • [7.1.2.1 创建远程仓库](#7.1.2.1 创建远程仓库)
        • [7.1.2.2 将本地代码push到码云远程库](#7.1.2.2 将本地代码push到码云远程库)
      • [7.1.3 pull拉取远程库到本地库](#7.1.3 pull拉取远程库到本地库)
      • [7.1.4 clone克隆远程库到本地](#7.1.4 clone克隆远程库到本地)
        • [7.1.4.1 搜索开源项目](#7.1.4.1 搜索开源项目)
        • [7.1.4.2 克隆](#7.1.4.2 克隆)
    • [7.5 码云复制GitHub项目](#7.5 码云复制GitHub项目)
  • [8. IDEA集成GitHub](#8. IDEA集成GitHub)
    • [8.1 设置GitHub账号](#8.1 设置GitHub账号)
    • [8.2 分享工程到GitHub](#8.2 分享工程到GitHub)
    • [8.3 push推送本地库到远程库](#8.3 push推送本地库到远程库)
    • [8.4 pull拉取远程库到本地库](#8.4 pull拉取远程库到本地库)
    • [8.5 clone克隆远程库到本地](#8.5 clone克隆远程库到本地)
  • [9. 远程仓库操作](#9. 远程仓库操作)
    • [9.1 远程仓库创建分支](#9.1 远程仓库创建分支)
      • [9.1.1 查看所有远程分支](#9.1.1 查看所有远程分支)
      • [9.1.2 新建远程分支](#9.1.2 新建远程分支)
    • [9.2 远程仓库切换分支](#9.2 远程仓库切换分支)
    • [9.3 克隆远程仓库指定分支](#9.3 克隆远程仓库指定分支)
      • [9.3.1 准备](#9.3.1 准备)
      • [9.3.2 克隆远程仓库指定分支](#9.3.2 克隆远程仓库指定分支)
      • [9.3.3 本地提交更新到远程仓库指定分支](#9.3.3 本地提交更新到远程仓库指定分支)
    • [9.4 远程仓库合并分支到master分支](#9.4 远程仓库合并分支到master分支)
      • [9.4.1 选择合并分支](#9.4.1 选择合并分支)
      • [9.4.2 代码测试审核](#9.4.2 代码测试审核)
      • [9.4.3 合并分支](#9.4.3 合并分支)
    • [9.5 删除远程仓库分支](#9.5 删除远程仓库分支)

1. Git概述

Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

Git易于学习,占地面积小,性能极快。

它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

1.1 何为版本控制

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。

版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

1.2 为什么需要版本控制

个人开发过渡到团队协作。

1.3 版本控制工具

  • 集中式版本控制工具

CVS、SVN(Subversion)、VSS...

集中化的版本控制系统诸如

CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

  • 分布式版本控制工具

Git、Mercurial、Bazaar、Darcs...

Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)

  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.4 Git简史

1.5 Git工作机制

1.6 Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

  • 局域网

    • GitLab
  • 互联网

    • GitHub(外网)

    • Gitee码云(国内网站)

2. Git安装

官网地址:
https://git-scm.com/https://github.com/git-for-windows/git/releases

查看GNU协议,可以直接点击下一步。

选择Git安装位置,要求是非中文并且没有空格的目录,然后下一步。

Git选项配置,推荐默认设置,然后下一步。

Git安装目录名,不用修改,直接点击下一步。

Git的默认编辑器,建议使用默认的Vim编辑器,然后点击下一步。

默认分支名设置,选择让Git决定,分支名默认为master,下一步。

修改Git的环境变量,选第一个,不修改环境变量,只在Git Bash里使用Git。

选择后台客户端连接协议,选默认值OpenSSL,然后下一步。

配置Git文件的行末换行符,Windows使用CRLF,Linux使用LF,选择第一个自动转换,然后继续下一步。

选择Git终端类型,选择默认的Git Bash终端,然后继续下一步。

选择Git pull合并的模式,选择默认,然后下一步。

选择Git的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。

其他配置,选择默认设置,然后下一步。

实验室功能,技术还不成熟,有已知的bug,不要勾选,然后点击右下角的Install按钮,开始安装Git。

)

点击Finsh按钮,Git安装成功!

右键任意位置,在右键菜单里选择Git Bash Here即可打开Git

Bash命令行终端。

在Git Bash终端里输入git

--version查看git版本,如图所示,说明Git安装成功。

3. Git常用命令

命令名称 作用
git config --global user.name 用户名 设置用户签名
git config --global user.email 邮箱 设置用户邮箱
git init 初始化本地库
git status 查看本地库状态
git add 文件名 添加到暂存区
git commit -m "日志信息" 文件名(message) 提交到本地库
git reflog 查看历史记录
git reset --hard 版本号 版本穿梭

3.1 设置用户签名

3.1.1 说明

在使用Git进行版本控制时,我们需要设置用户签名,主要包含:

  • 用户名称(user.name)

  • 用户邮箱(user.email)

用户签名用来标识提交者身份,每次Git提交都会使用以上信息标识提交者身份。多人协作开发同一个仓库时,正确设置用户签名非常重要。

3.1.2 语法

语法如下:

git config --global user.name "your name"
git config --global user.email "your email"

**注意:**这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系。

3.1.3 案例实操

全局范围的签名设置:

shell 复制代码
$ git config --global user.name gangge
$ git config --global user.email gangge@atguigu.cn

查看配置是否成功:

shell 复制代码
$ git config --list

3.2 初始化本地库

Git本地仓库内部维护了一个完整的代码版本库,它存储了所有的版本信息和元数据,使我们有能力进行版本控制

3.2.1 基本语法

创建一个空目录,在目录下执行如下命令:

shell 复制代码
git init

3.2.2 案例实操

shell 复制代码
$ git init
Initialized empty Git repository in F:/git-test1/.git/

3.2.3 结果查看

Git会在执行命令的目录下生成一个名为**.git**的隐藏目录。它就是Git本地仓库,包含所有的版本信息。

3.3 查看本地库状态

3.3.1 基本语法

shell 复制代码
git status

3.3.2 案例实操

3.3.2.1 首次查看本地库状态

工作区没有任何文件

shell 复制代码
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
3.3.2.2 新增文件(hello.txt)
shell 复制代码
$ vim hello.txt
hello git!
3.3.2.3 再次查看本地库状态

检测到未追踪的文件

shell 复制代码
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        hello.txt

nothing added to commit but untracked files present (use "git add" to track)

3.4 添加暂存区

3.4.1 将工作区的文件添加到暂存区

1)基本语法

git add 文件名

2)案例实操

shell 复制代码
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.

3.4.2 查看状态

检测到暂存区有新文件

shell 复制代码
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   hello.txt

3.5 提交本地库

3.5.1 将暂存区的文件提交到本地库

1)基本语法

shell 复制代码
git commit -m "日志信息" 文件名

2)案例实操

shell 复制代码
$ git commit -m "my first commit hello.txt" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.
[master (root-commit) 86366fa] my first commit hello.txt
 1 file changed, 16 insertions(+)
 create mode 100644 hello.txt

3.5.2 查看状态

没有文件需要提交

shell 复制代码
$ git status
On branch master
nothing to commit, working tree clean

3.6 修改文件(hello.txt)

shell 复制代码
$ vim hello.txt
hello git! 
hello atguigu! 

3.6.1 查看状态

检测到工作区有文件被修改

shell 复制代码
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   hello.txt

no changes added to commit (use "git add" and/or "git commit -a")

3.6.2 添加修改文件到暂存区

shell 复制代码
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.

3.6.3 查看状态

工作区的修改添加到了暂存区

shell 复制代码
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   hello.txt

3.6.4 提交暂存区文件到本地库

shell 复制代码
$ git commit -m "my second commit hello.txt" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.
[master (root-commit) 86366fa] my secondcommit
 1 file changed, 16 insertions(+)
 create mode 100644 hello.txt

3.7 文件批量提交

3.7.1 修改文件并新建其他文件

修改hello.txt

shell 复制代码
$ vim hello.txt
hello git!
hello atguigu!
hello shanghai!

新增文件hello2.txt

shell 复制代码
$ vim hello2.txt
hello pangju!

3.7.2 批量添加修改文件到暂存区

shell 复制代码
$ git add .
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in hello2.txt.
The file will have its original line endings in your working directory

3.7.3 提交暂存区所有文件到本地库

shell 复制代码
$ git commit -m 'my first batch commit'
[master 8ac2fc4] my first batch commit
 2 files changed, 2 insertions(+)
 create mode 100644 hello2.txt

删除

3.8 历史版本

3.8.1 查看历史版本

1)基本语法

shell 复制代码
-- 查看版本信息
git reflog 
-- 查看版本详细信息
git log 

2)案例实操

shell 复制代码
$ git reflog
8ac2fc4 (HEAD -> master) HEAD@{0}: commit: my first batch commit
9ccfb82 HEAD@{1}: commit: my second commit hello.txt
f6c1c01 HEAD@{2}: commit (initial): my first commit hello.txt

3.8.2 版本穿梭

3.8.2.1 基本语法

git reset语法: 回退到某个提交

shell 复制代码
git reset --hard <commit>
3.8.2.2 git reset案例实操
1、查看历史记录及当前分支所在位置
shell 复制代码
$ git reflog
8ac2fc4 (HEAD -> master) HEAD@{0}: commit: my first batch commit
9ccfb82 HEAD@{1}: commit: my second commit hello.txt
f6c1c01 HEAD@{2}: commit (initial): my first commit hello.txt

8ac2fc4是当前分支所在位置

2、穿梭到指定版本

切换到f6c1c01版本,也就是我们第一次提交的版本

shell 复制代码
$ git reset --hard f6c1c01
HEAD is now at f6c1c01 my first commit hello.txt

查看版本切换后的版本日志:

shell 复制代码
$ git reflog
f6c1c01 (HEAD -> master) HEAD@{0}: reset: moving to f6c1c01
8ac2fc4 HEAD@{1}: commit: my first batch commit
9ccfb82 HEAD@{2}: commit: my second commit hello.txt
f6c1c01 (HEAD -> master) HEAD@{3}: commit (initial): my first commit hello.txt

查看版本切换后hello.txt文件的内容:

shell 复制代码
$ cat hello.txt
hello git!

切换回8ac2fc4,也就是最后一次提交的版本:

shell 复制代码
$ git reset --hard 8ac2fc4
HEAD is now at 8ac2fc4 my first batch commit

Git切换版本,底层其实是移动的HEAD指针。

4. Git分支操作

4.1 什么是分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

线上一般存在以下的分支:master(线上),develop(开发),release(预发布),hotfix(线上bug修复)

  • master: 主分支;主要是稳定的版本分支,正式发布的版本都从Master拉。
  • develop: 开发分支;更新和变动最频繁的分支,正常情况下开发都是在Develop分支上进行的。
  • release:预发行分支;一般来说,代表一个版本的功能全部开发完成后递交测试,测试出Bug后进行修复的分支。
  • features: 功能分支; 其实Features不是一个分支,而是一个分支文件夹。里面包含了每个程序员开发的功能点。Feature开发完成后合入Develop分支。
  • hotfix: 紧急故障修复分支(如现场故障),内部分支,从master拉出此分支,merge到master和develop分支。最希望不会被创建的分支;这个分支的存在是在已经正式上线的版本中,发现了重大Bug进行修复的分支。

4.2 分支的好处

同时并行推进多个功能开发,提高开发效率。

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

4.3 分支的操作

命令名称 作用
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支合并到当前分支上

4.3.1 查看分支

1)基本语法

shell 复制代码
git branch -v

2)案例实操

*代表当前所在的分支

shell 复制代码
$ git branch -v
* master 8ac2fc4 my first batch commit

4.3.2 创建分支

1)基本语法

shell 复制代码
git branch 分支名

2)案例实操

创建分支:

shell 复制代码
$ git branch hot-fix

查看分支:新创建的分支与当前分支的历史相同,直到我们在这两个分支分别做出新的提交,它们的历史才会产生分歧。

shell 复制代码
$ git branch -v
  hot-fix 8ac2fc4 my first batch commit
* master  8ac2fc4 my first batch commit

4.3.3 master分支修改

master分支修改hello.txt并提交:

shell 复制代码
$ vim hello.txt
hello git!
hello atguigu!
hello shanghai!
hello master update!

$ git add .
$ git commit -m 'master分支第一次提交更新'
[master d51987a] master分支第一次提交更新
 1 file changed, 1 insertion(+)

查看分支:

shell 复制代码
$ git branch -v
  hot-fix 8ac2fc4 my first batch commit
* master  d51987a master分支第一次提交更新

4.3.4 切换分支

4.3.4.1 基本语法
shell 复制代码
git checkout 分支名
4.3.4.2 案例实操

切换分支:

shell 复制代码
$ git checkout hot-fix
Switched to branch 'hot-fix'

查看分支:

shell 复制代码
$ git branch -v
* hot-fix 8ac2fc4 my first batch commit
  master  d51987a master分支第一次提交更新

查看hello.txt内容:和master分支的hello文件内容不一样

shell 复制代码
$ cat hello.txt
hello git!
hello atguigu!
hello shanghai!

hot-fox分支修改hello.txt并提交:

shell 复制代码
$ vim hello.txt
hello git!
hello atguigu!
hello shanghai!
hello hot-fix update!

$ git add .

$ git commit -m 'hot-fix分支第一次修改提交'
[hot-fox ea6f7ba] hot-fix分支第一次修改提交
 1 file changed, 1 insertion(+)

4.3.5 合并分支

当我们在不同分支上开发某个功能时,完成开发后需要通过分支合并,将这些功能集成到一起。

4.3.5.1 基本语法
shell 复制代码
git merge 分支名
4.3.5.2 案例实操

在master分支上合并hot-fix分支

切换到master分支:

shell 复制代码
$ git checkout master
Switched to branch 'master'

合并hot-fix分支:(master|MERGING)状态表示有冲突

shell 复制代码
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

4.3.6 产生冲突

冲突产生的表现:后面状态为MERGING

shell 复制代码
atguigu@DESKTOP-ECRD6S9 MINGW64 /f/git-test1 (master|MERGING)
$ cat hello.txt
hello git!
hello atguigu!
hello shanghai!
<<<<<<< HEAD
hello master update!
=======
hello hot-fix update!
>>>>>>> hot-fix

冲突产生的原因:

合并分支时,两个分支在同一个文件的同一个位置 有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容。

查看状态(检测到有文件有两处修改)

shell 复制代码
$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   hello.txt

no changes added to commit (use "git add" and/or "git commit -a")

4.3.7 解决冲突

4.3.7.1 编辑有冲突的文件

删除特殊符号,决定要使用的内容

特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码

>>>>>>> hot-fix

shell 复制代码
$ vim hello.txt
hello git!
hello atguigu!
hello shanghai!
hello master update!
hello hot-fox update!
4.3.7.2 提交文件

添加到暂存区:

shell 复制代码
$ git add .

提交到本地仓库:

shell 复制代码
$ git commit -m 'master分支合并hot-fix分支解决冲突提交'
[master 37acde7] master分支合并hot-fix分支解决冲突提交

合并解决冲突提交后 MERGING状态消失

4.3.8 删除分支

hot-fix分支已经使用完毕,可以删除

4.3.8.1 语法

删除已合并的分支

shell 复制代码
git branch -d <branch_name>
4.3.8.2 案例实操

查看分支:

shell 复制代码
$ git branch -v
  hot-fix ea6f7ba hot-fix分支第一次修改提交
* master  37acde7 master分支合并hot-fix分支解决冲突提交

删除hot-fix分支:

shell 复制代码
$ git branch -d hot-fix
Deleted branch hot-fix (was ea6f7ba).

再次查看分支:

shell 复制代码
$ git branch -v
* master 37acde7 master分支合并hot-fix分支解决冲突提交

4.4 创建分支和切换分支图解

master、hot-fix其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD决定的。所以创建分支的本质就是多创建一个指针。

HEAD如果指向master,那么我们现在就在master分支上,HEAD如果执行hotfix,那么我们现在就在hotfix分支上。

所以切换分支的本质就是移动HEAD指针。

5. Gitee(码云)操作

5.1 Git代码托管服务

前面我们已经知道了Git中存在两种类型的仓库,即本地仓库远程仓库。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。

是一个面向开源及私有软件项目的托管平台,因为只支持Git

作为唯一的版本库格式进行托管,故名gitHub

国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快

是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务

5.2 远程代码托管平台

gitee是一个基于git的代码托管平台, Git 并不像 SVN

那样有个中心服务器。目前我们使用到的 Git

命令都是在本地执行,如果你想通过 Git

分享你的代码或者与其他开发人员合作。

你就需要将数据放到一台其他开发人员能够连接的服务器上。

远程仓库工作流程:

  • 查看远程仓库

  • 添加远程仓库

  • 克隆远程仓库

  • 移除无效的远程仓库

  • 从远程仓库中抓取与拉取

  • 推送到远程仓库

5.3 码云帐号注册和登录

进入码云官网地址:https://gitee.com/,点击注册Gitee

输入个人信息,进行注册即可。

帐号注册成功以后,直接登录。

登录以后,就可以看到码云官网首页了。

5.4 创建远程仓库

5.5 远程仓库操作

命令名称 作用
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址 起别名
git push 别名 分支 推送本地分支上的内容到远程仓库
git clone 远程地址 将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

5.5.1 创建远程仓库别名

5.5.1.1 基本语法
shell 复制代码
git remote -v 查看当前所有远程地址别名

git remote add 别名 远程地址
5.5.1.2 案例实操
1、查看远程地址列表
shell 复制代码
$ git remote -v
2、添加远程仓库地址

使用上面新建远程仓库后的地址

shell 复制代码
$ git remote add origin https://gitee.com/xgatguigu/git-test.git
3、再次查看仓库地址列表
shell 复制代码
$ git remote -v
origin  https://gitee.com/xgatguigu/git-test.git (fetch)
origin  https://gitee.com/xgatguigu/git-test.git (push)

5.5.2 推送本地分支到远程仓库

5.5.2.1 基本语法
shell 复制代码
git push 别名 分支
5.5.2.2 案例实操
1、推送本地分支

推送时需要输入远程仓库的账号密码,参考5.4.2.2第2小节

shell 复制代码
$ git push origin master
Enumerating objects: 19, done.
Counting objects: 100% (19/19), done.
Delta compression using up to 12 threads
Compressing objects: 100% (13/13), done.
Writing objects: 100% (19/19), 1.67 KiB | 342.00 KiB/s, done.
Total 19 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/xgatguigu/git-test.git
 * [new branch]      master -> master
2、需要输入码云的用户名和密码

注意:密码错误推送会失败

刷新仓库发现已将我们master分支上的内容推送到Gitee创建的远程仓库。

5.5.3 克隆远程仓库到本地

5.5.3.1 基本语法
shell 复制代码
git clone 远程地址
5.5.3.2 案例实操
1、创建新文件夹git-test2
2、拷贝要克隆远程仓库的地址
3、克隆
shell 复制代码
$ git clone https://gitee.com/xgatguigu/git-test.git
Cloning into 'git-test'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 19 (delta 1), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (19/19), done.
Resolving deltas: 100% (1/1), done.
4、克隆结果

进入git-test执行

5、小结

clone会做如下操作:

  • 拉取代码
  • 初始化本地仓库
  • 创建别名

5.5.4 邀请加入团队

5.5.5 协作用户修改

5.5.5.1 查看仓库
5.5.5.2 协作用户修改文件

选择仓库中要更新的文件编辑:

编辑并提交更新:

5.5.6 拉取远程库内容

1)基本语法

shell 复制代码
git pull 远程库地址别名 远程分支名

2)案例实操

协作者修改了仓库代码,现在第一个用户可以把远程仓库的更新拉取下来到本地直接合并:

shell 复制代码
$ git pull origin master

查看拉取后的文件:

shell 复制代码
$ cat hello.txt
hello git!
hello atguigu!
hello shanghai!
hello master update!
hello hot-fix update!
用户2(协作用户)更新!!!!

5.6 SSH免密登录

远程仓库中除了使用Https方式连接,还可以通过SSH地址连接。

5.6.1 生成ssh密钥对

$ ssh-keygen.exe -t rsa -C 'xugang@atguigu.cn'
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/xugang/.ssh/id_rsa):

**注意:**这里的xugang@atguigu.cn只是生成的 sshkey的名称,可以随意编写,rsa是生成密钥对的加密算法。

按照提示三次回车,即可生成 ssh密钥对,在上面提示的路径下可以查看秘钥文件内容

5.6.2 远程仓库配置公钥

复制生成后的 id_rsa.pub文件内的公钥

远程仓库配置公钥:

​ 主页 「管理」->「部署公钥管理」->「添加部署公钥」

5.6.3 测试

添加后,在终端(Terminal)中输入

shell 复制代码
$ ssh -T git@gitee.com

显示如下内容代表成功:

shell 复制代码
Hi xugang! You've successfully authenticated, but GITEE.COM does not provide shell access.

添加成功后,就可以使用SSH协议对仓库进行操作了。

6. IDEA集成Git (本地库)

6.1 IDEA中创建测试项目

创建springboot项目:git-test3

6.1 配置Git忽略文件

6.1.1 为什么需要忽略文件

工作过程中产生的日志、缓存文件,编辑器产生的特定、临时文件,敏感信息配置文件以及视频、安装包等较大文件并不适合纳入版本管理。这些文件可以忽略掉。

忽略文件的目的:

  • 减少仓库大小,忽略大文件
  • 忽略编译生成的中间文件
  • 忽略临时文件和敏感信息文件
  • 避免无意义或不必要的提交
  • 保持仓库干净整洁

6.1.2 Java各种编辑器的特定文件

6.1.2.1 Eclipse特定文件
6.1.2.2 IDEA特定文件
6.1.2.3 Maven工程的target目录

6.1.3 创建配置忽略文件

6.1.3.1 创建忽略文件
1、IDEA创建springboot项目时默认创建了git忽略文件
2、忽略文件创建规则

在项目根目录下创建

忽略规则文件名:.gitignore

3、忽略文件语法
  • 以行为单位定义忽略模式

  • 支持通配符:

    * 匹配0或N个字符、? 匹配一个字符

  • # :注释行

  • / :忽略当前路径

    例如:target/ 表示忽略目录

  • * :用来匹配零或多个字符

    例如:*.class 表示忽略所有以.class结尾的文件

  • ! :否定忽略

    例如:*.class 表示忽略所有以.class结尾的文件,使用 !A.class 可以取消A.class的忽略

6.2 定位Git程序

6.3 初始化本地库

6.4 添加到暂存区

配置需要忽略的文件:

右键点击项目选择Git -> Add将项目添加到暂存区。

)

6.5 提交到本地库

6.6 切换版本

为了方便测试,项目可以多次修改提交。

在IDEA的左下角,点击Git,然后点击Log查看版本

右键选择要切换的版本,然后在菜单里点击Checkout Revision。

6.7 创建分支

6.7.1 查看所有分支

选择Git,点击Branches按钮。

6.7.2 新建分支

在弹出的Git Branches框里,点击New Branch按钮。

填写分支名称,创建hot-fix分支。

然后再IDEA的右下角看到hot-fix,说明分支创建成功,并且当前已经切换成hot-fix分支

6.8 切换分支

在IDEA窗口的右下角,切换到master分支。

6.9 合并分支

先在hot-fix分支修改文件并提交

在IDEA窗口的右下角,将hot-fix分支合并到当前master分支。

如果代码没有冲突,分支直接合并成功,分支合并成功以后的代码自动提交,无需手动提交本地库。

6.10 解决冲突

如图所示,如果master分支和hot-fix分支都修改了相同文件代码,在合并分支的时候就会发生冲突。

master分支修改AController并提交:

切换到hot-fix分支修改AController并提交:

我们现在站在master分支上合并hot-fix分支,就会发生代码冲突。

点击Conflicts框里的Merge按钮,进行手动合并代码。

手动合并完代码以后,点击右下角的Apply按钮。

代码冲突解决,自动提交本地库。

7. IDEA集成Gitee(码云)

7.1 IDEA集成码云

7.1.1 IDEA安装码云插件

Idea默认不带码云插件,我们第一步要安装Gitee插件。

如图所示,在Idea插件商店搜索Gitee,然后点击右侧的Install按钮。

Idea链接码云和链接GitHub几乎一样,安装成功后,重启Idea。

Idea重启以后在Version Control设置里面看到Gitee,说明码云插件安装成功。

然后在码云插件里面添加码云帐号,我们就可以用Idea连接码云了。

7.1.2 push推送本地库到远程库

对于已经通过git本地仓库管理的项目,可以直接推送到git远程仓库

7.1.2.1 创建远程仓库

gitee中创建远程仓库git-test3

7.1.2.2 将本地代码push到码云远程库

然后选择定义好的远程链接,点击Push即可。

IDEA右下角会有推送结果提示,下图所示表示推送成功:

**

去码云远程库查看代码。

只要码云远程库链接定义好以后,对码云远程库进行pull和clone的操作和GitHub相同

7.1.3 pull拉取远程库到本地库

手动在gitee远程仓库中编辑项目代码

IDEA中拉取更新:右键点击项目,可以将远程仓库的内容pull到本地仓库。

注意:pull是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

7.1.4 clone克隆远程库到本地

研究开源项目、或者公司项目协作开发时,项目都会提交到远程仓库管理,一般我们会先将项目克隆到本地使用。

7.1.4.1 搜索开源项目

获取开源仓库地址:

7.1.4.2 克隆



等待克隆仓库文件下载成功后,按照上面的选择会创建新的工作空间并打开:如下图所示

7.5 码云复制GitHub项目

码云提供了直接复制GitHub项目的功能,方便我们做项目的迁移和下载。

具体操作如下:

将GitHub的远程库HTTPS链接复制过来,点击导入按钮即可。


如果GitHub项目更新了以后,在码云项目端可以手动重新同步,进行更新!

8. IDEA集成GitHub

8.1 设置GitHub账号

如果出现401等情况连接不上的,是因为网络原因,可以使用以下方式连接:

然后去GitHub账户上设置token。




点击生成token。

复制红框中的字符串到idea中。

点击登录。

)

8.2 分享工程到GitHub



来到GitHub中发现已经帮我们创建好了gitTest的远程仓库。

8.3 push推送本地库到远程库

右键点击项目,可以将当前分支的内容push到GitHub的远程仓库中。


注意:push是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push的操作是会被拒绝的。也就是说,要想push成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先pull拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!

8.4 pull拉取远程库到本地库

右键点击项目,可以将远程仓库的内容pull到本地仓库。

注意:pull是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

8.5 clone克隆远程库到本地


为clone下来的项目创建一个工程,然后点击Next。



9. 远程仓库操作

远程仓库操作时:

先克隆远程仓库,将克隆的仓库文件夹导入到工作空间,进行二次开发
编写功能后可以提交更新到本地仓库后再推送到远程仓库

9.1 远程仓库创建分支

9.1.1 查看所有远程分支


)

9.1.2 新建远程分支

点击上图新建分支按钮新建分支

9.2 远程仓库切换分支

9.3 克隆远程仓库指定分支

9.3.1 准备

为了区分,可以在远程仓库切换到hotfix分支后 修改文件提交

9.3.2 克隆远程仓库指定分支

语法:

shell 复制代码
git clone -b 远程分支名 远程仓库地址

实操:

shell 复制代码
git clone -b hotfixt-20230511 https://gitee.com/xgatguigu/git-test3.git

查看克隆结果

9.3.3 本地提交更新到远程仓库指定分支

语法:

sh 复制代码
git push <远程主机名> <本地分支名>:<远程分支名>

实操:

修改文件提交到本地仓库:

sh 复制代码
vim pom.xml
git add .
git commit -m '本地修改hotfix分支文件提交'

推送更新到远程仓库指定分支:

sh 复制代码
git push origin hotfixt-20230511:hotfixt-20230511

9.4 远程仓库合并分支到master分支

9.4.1 选择合并分支


9.4.2 代码测试审核

9.4.3 合并分支

回到master分支查看合并结果:

9.5 删除远程仓库分支

相关推荐
gis分享者17 小时前
麒麟V10系统,postgres+postgis安装,保姆级教程,包含所有安装包
postgresql·安装·postgis·麒麟系统
至天4 天前
MacPorts 中安装高/低版本软件方式,以 RabbitMQ 为例
macos·rabbitmq·安装·降级·升级·macports·checksums
弗锐土豆5 天前
在windows系统中使用labelimg对图片进行标注之工具安装及简单使用
windows·安装·下载·使用·labelimg
bohu839 天前
分布式事务seata(AT)与nacos整合-笔记1
笔记·nacos·seata·安装·at
qq_172805591 个月前
RUST学习教程-安装教程
开发语言·学习·rust·安装
胡西风_foxww1 个月前
linux下编译安装memcached
linux·数据库·缓存·编译·安装·memcached·libevent
胡西风_foxww1 个月前
Linux下编译安装Nginx
linux·运维·nginx·编译·安装·openssl·pcre
子不语1 个月前
C#程序开发,检测当前电脑已经安装的软件目录
开发语言·c#·安装·列表·软件
小李飞刀李寻欢1 个月前
anaconda 安装笔记Ubuntu20
前端·笔记·ubuntu·安装·anaconda
ITenderL2 个月前
Linux常用命令总结
linux·常用命令