Git基础知识

  • Git
  • 优点
  • 安装git
  • 基础概念
  • 版本控制工具
  • 集中式版本控制工具
  • 分布式版本控制工具
  • 构架
  • 仓库
  • git文件的三种状态
  • git项目的三个工作区
  • 常用命令
  • 基础配置
  • 为常用指令配置别名
  • 解决GitBash乱码问题
  • 基本语法
  • 用户信息配置
  • 查看版本
  • 初始化本地库
  • 查看本地库状态
  • 新建一个hello.txt
  • 再次查看状态
  • 添加暂存区
  • 添加暂存区后查看状态
  • git add . 和 git add * 区别
  • 提交本地库
  • 提交本地库后查看状态
  • 修改文件hello.txt+再次查看文件状态
  • 将修改的文件再次添加暂存区
  • 再次提交
  • 查看历史版本
  • 版本穿梭
  • 分支
  • 分支的好处
  • 分支的操作
  • 查看分支
  • 创建分支
  • 切换分支
  • 使用dev分支修改hello.txt并提交
  • 分支提交日志
  • 分支合并
  • 从dev分支切换到主分支
  • 把dev分支的内容合并到主分支上
  • 产生冲突
  • 首先是主分支修改hello.txt
  • 切换到dev分支也做修改
  • 切换到主分支合并dev分支
  • 冲突产生的原因:
  • 解决冲突
  • 手动打开hello.txt
  • 执行提交(注意:此时使用 git commit 命令时不能带文件名)
  • 最后查看合并后的文件
  • 删除分支
  • 远程仓库操作
  • 创建远程仓库别名
  • 推送本地分支到远程仓库
  • 拉取远程库到本地
  • 克隆远程仓库到本地
  • 小结:clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名,并且别名默认为origin
  • SSH 免密登录
  • 进入当前用户家目录
  • --运行命令生成.ssh 秘钥目录[注意:这里-C 这个参数是大写的 C]
  • idea集成git
  • 创建忽略规则文件git.ignore
  • 在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)
  • idea设置
  • 初始化本地库
  • 添加暂存区
  • 直接在项目上进行添加所有到缓冲区
  • 提交到本地库
  • 提交成功后可以看到颜色又恢复正常了
  • 切换版本
  • 创建分支
  • 切换分支
  • idea右下角也可以直接创建分支和切换分支
  • 合并分支
  • 解决冲突
  • IDEA 集成 GitHub
  • token方式登录
  • 分享工程到github上面去
  • push 推送本地库到远程库
  • pull 拉取远程库到本地库
  • clone 克隆远程库到本地
  • 码云的使用
  • 码云复制github项目
  • github搜索项目


Git

Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具

优点

  • 速度快
  • 简单的设计
  • 对非线性开发模式的强力支持(允许上千个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

安装git

idea clone gitlab代码需要token_分布式


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

idea clone gitlab代码需要token_git_02


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

idea clone gitlab代码需要token_分布式_03


idea clone gitlab代码需要token_git_04


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

idea clone gitlab代码需要token_git_05


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

idea clone gitlab代码需要token_git_06


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

idea clone gitlab代码需要token_分布式_07


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

idea clone gitlab代码需要token_git_08


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

idea clone gitlab代码需要token_分布式_09


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

idea clone gitlab代码需要token_java_10


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

idea clone gitlab代码需要token_git_11


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

idea clone gitlab代码需要token_java_12


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

idea clone gitlab代码需要token_linux_13


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

idea clone gitlab代码需要token_git_14

基础概念

版本控制工具

集中式版本控制工具

集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新

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

坏处
是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作

分布式版本控制工具

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

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

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

构架

版本库:工作区中有一个隐藏目录.git,这个目录不属于工作区,而是git的版本库,是git管理的所有内容

暂存区:版本库中包含一个临时区域,保存下一步要提交的文件。

分支:版本库中包含若干分支,提交的文件存储在分支中

idea clone gitlab代码需要token_linux_15

仓库

对应的就是一个目录,这个目录中的所有文件被git管理起来。
以后会将一个项目的根目录,作为仓库。
仓库中的每个文件的改动都由git跟踪。

有两种取得 Git 项目仓库的方法。第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库。第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来。

git文件的三种状态

状态

描述

已提交 (committed)

已提交表示数据以及安全存在本地数据库

已修改(modified)

已经修改了文件,还没保存到数据库中

以暂存(staged)

以占存表示对一个已修改的文件的当前版本做了标记,使之包含在下次提交的快照中

git项目的三个工作区

分类

描述

工作区

简单的理解为在电脑上能看到的目录比如自己创建的本地项目目录

暂存区

git的库版本里面其中最重要的就是称作stage 的暂存区还有git创建的第一个master主分支,以及指向master的一个指针叫HEAD

git仓库

工作区有一个隐藏的目录.git 这个不算工作区而是git的版本库

常用命令

命令名称

作用

git config --global user.name 用户名

设置用户签名

git config --global user.email 邮箱

设置用户邮箱

git init

初始化本地库

git status

查看本地库状态

git add 文件名

添加到暂存区

git commit -m “日志信息” 文件名

提交到本地库

git reflog

查看历史记录

git reset --hard 版本号

版本穿梭

基础配置

为常用指令配置别名

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。

  1. 打开用户目录

    部分
    windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行
touch ~/.bashrc
  1. 在.bashrc文件中输入如下内容:
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

#用于输出当前目录所有文件及基本信息
alias ll='ls -al'
  1. 打开gitBash,执行
source ~/.bashrc

解决GitBash乱码问题

  1. 打开GitBash执行下面命令
git config --global core.quotepath false
  1. 找到git的安装目录 ${git_home}/etc/bash.bashrc文件最后加入下面两行
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

idea clone gitlab代码需要token_python_16

基本语法

用户信息配置

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

git config --global user.name "xxx"  #名称
git config --global user.email "xxx.@xx.com"  #邮箱

git config -l #查看信息
git config --global --list

idea clone gitlab代码需要token_分布式_17

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的仓库都会默认使用这里配置的用户信息。如果要在某个特定的仓库中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前仓库的 .git/config 文件里。

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。

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

查看版本

git version #查看git版本

idea clone gitlab代码需要token_python_18

初始化本地库

git init

idea clone gitlab代码需要token_linux_19

查看本地库状态

git status

idea clone gitlab代码需要token_分布式_20

新建一个hello.txt

idea clone gitlab代码需要token_java_21

再次查看状态

idea clone gitlab代码需要token_分布式_22

添加暂存区

git add 文件名

但是一般都会使用

git add .

添加暂存区后查看状态

idea clone gitlab代码需要token_git_23

git add . 和 git add * 区别

git add .  :会把本地所有untrack的文件都加入暂存区,并且会根据.gitignore做过滤

git add *  :会忽略.gitignore把任何文件都加入

提交本地库

git commit -m "日志信息" 文件名

提交本地库后查看状态

idea clone gitlab代码需要token_git_24

修改文件hello.txt+再次查看文件状态

idea clone gitlab代码需要token_python_25

将修改的文件再次添加暂存区

idea clone gitlab代码需要token_linux_26

再次提交

idea clone gitlab代码需要token_linux_27

查看历史版本

git reflog 查看版本信息
git log 查看版本详细信息

idea clone gitlab代码需要token_java_28


参数

  • –all 显示所有分支
  • –pretty=oneline 将提交信息显示为一行
  • –abbrev-commit 使得输出的
  • commitId 更简短
  • –graph 以图的形式显示

版本穿梭

git reset --hard 版本号

idea clone gitlab代码需要token_python_29

分支

分支,是一个个版本的最终存储的位置
分支,就是一条时间线,每次 git commit 形成一个个版本,存储在分支的一个个提交点

分支由多个提交点组成,分支上会有一个指针,默认总是指向最新的提交点

idea clone gitlab代码需要token_分布式_30

分支的好处

同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可

分支的操作

命令名称

作用

git branch 分支名

创建分支

git branch -v

查看分支

git checkout 分支名

切换分支

git merge 分支名

把指定的分支合并到当前分支上

查看分支

git branch -v #查看本地所有分支,带*的是当前分支
git branch -r # 列出所有远程分支

idea clone gitlab代码需要token_git_31

仓库中默认只有master分支
执行git commit时,默认是在master分支上保存版本。

在商业项目开发过程中,我们不会轻易的在master分支上做操作。
当代码确实没有问题时,才会将开发分支上成熟的代码版本添加到master分支上。

保证开发过程中,可以及时记录版本,又保证master分支上每个提交点都是稳健版本。

创建分支

git branch 分支名
git branch dev  #创建名字为dev的分支

idea clone gitlab代码需要token_python_32

默认情况下,当前使用的分支是master分支
可以切换到dev分支,则后续的git commit便会在dev分支上新建版本(提交点)

切换分支

git checkout 分支名
git checkout dev  #从主分支切换到dev分支

idea clone gitlab代码需要token_java_33

使用dev分支修改hello.txt并提交

idea clone gitlab代码需要token_python_34

分支提交日志

git log --oneline  #简易日志
git log   #完整日志

idea clone gitlab代码需要token_git_35

分支合并

两个分支内容的合并
git merge分支a合并分支a

git merge 分支名 #合并指定分支到当前分支

从dev分支切换到主分支

idea clone gitlab代码需要token_linux_36

把dev分支的内容合并到主分支上

idea clone gitlab代码需要token_python_37

合并的方式有两种:快速合并和三方合并。

8.4.1快速合并

如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支,就是移动指针即可。

idea clone gitlab代码需要token_python_38


idea clone gitlab代码需要token_linux_39


三方合并

在不具备快速合并的条件下,会采用三方合并。

idea clone gitlab代码需要token_java_40


idea clone gitlab代码需要token_linux_41

两个分支进行合并,但它们含有对同一个文件的修改,则在合并时出现冲突,git无法决断该保留改文件哪个分支的修改。

出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容。

解决方案:
1.保留某一方的,删除另—方的
2.保留双方的
3.但无论如何,要记得删除<<<<=三== >>>>这些
4.本质是两人协商为冲突的内容,定制出合理的内容。
5.协商后,需要再次提交修改后的内容

产生冲突

首先是主分支修改hello.txt

idea clone gitlab代码需要token_linux_42

切换到dev分支也做修改

idea clone gitlab代码需要token_python_43

切换到主分支合并dev分支

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

idea clone gitlab代码需要token_python_44

冲突产生的原因:

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

解决冲突

编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> dev

手动打开hello.txt

idea clone gitlab代码需要token_分布式_45


idea clone gitlab代码需要token_java_46


修改完后保存退出

执行提交(注意:此时使用 git commit 命令时不能带文件名)

idea clone gitlab代码需要token_linux_47

最后查看合并后的文件

idea clone gitlab代码需要token_linux_48

删除分支

git branch -d 分支名

删除远程分支

git push origin --delete 分支名
git branch -dr 分支名

远程仓库操作

命令名称

作用

git remote -v

查看当前所有远程地址别名

git remote add 别名 远程地址

起别名

git push 别名 分支

推送本地分支上的内容到远程仓库

git clone 远程地址

将远程仓库的内容克隆到本地

git pull 远程库地址别名 远程分支名

将远程仓库对于分支最新内容拉下来后与

当前本地分支直接合并

创建远程仓库别名

git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址

idea clone gitlab代码需要token_linux_49

推送本地分支到远程仓库

git push 别名 分支

idea clone gitlab代码需要token_java_50

拉取远程库到本地

git pull 远程库地址别名 远程分支名

idea clone gitlab代码需要token_git_51

克隆远程仓库到本地

git clone 远程地址

idea clone gitlab代码需要token_java_52

小结:clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名,并且别名默认为origin

SSH 免密登录

我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。

进入当前用户家目录

idea clone gitlab代码需要token_分布式_53

–运行命令生成.ssh 秘钥目录[注意:这里-C 这个参数是大写的 C]

ssh-keygen -t rsa -C 1106649325@qq.com

敲3个回车

复制 id_rsa.pub 文件内容

idea clone gitlab代码需要token_python_54


接下来再往远程仓库 push 东西的时候使用 SSH 连接就不需要登录了。

在工作目录中初始化新仓库
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:

git init # 在当前目录新建一个Git代码库

2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。

克隆远程仓库

# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]

Git 仓库基础操作
1.初始化一个Git仓库

git init               #初始化一个Git仓库

2.将文件添加到Git的暂存区

git add .       #可以将当前仓库的所有改动加到暂存区

3.查看仓库状态

git status   #可以看到工作区中文件的状态

4.从Git的暂存区提交版本到仓库,参数-m后为当次提交的备注信息

git commit -m "备注信息xxx"    #将暂存区的文件存入分支形成版本

5.将本地的Git仓库信息推送上传到服务器

git push https://gitee.com/***/test.git

6.查看git提交的日志

$ git log

Git关联远程仓库

git remote add origin  [url] #关联远程仓库

查看远程仓库地址

git remote -v    #查看远程仓库地址

推送文件到远程仓库
将本地仓库以及commit的内容推送到远程仓库,共享自己的代码

git push -u origin master  将本地的master分支上传到远程master分支

克隆远程仓库
如果仓库已由别人创建完毕,我们需要其中的内容,则可以通过 git clone 将其复制到本地

git clone [url]

代码共享
多人协同开发时,写好的代码git push 上传到远程仓库,需要代码的git pull拉取

git pull origin master    #拉取远程的master分支内容

idea clone gitlab代码需要token_java_55

idea集成git

创建忽略规则文件git.ignore

这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下
git.ignore 文件模版内容如下:

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

.classpath
.project
.settings
target
.idea
*.iml

在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)

[user]
	name = dyk
	email = 1106649325@qq.com
[core]
	excludesfile = C:/Users/Dell/git.ignore
注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”

idea设置

idea clone gitlab代码需要token_git_56

初始化本地库

idea clone gitlab代码需要token_分布式_57


idea clone gitlab代码需要token_分布式_58


idea clone gitlab代码需要token_linux_59

添加暂存区

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

idea clone gitlab代码需要token_分布式_60

直接在项目上进行添加所有到缓冲区

提交到本地库

idea clone gitlab代码需要token_python_61


idea clone gitlab代码需要token_分布式_62

提交成功后可以看到颜色又恢复正常了

idea clone gitlab代码需要token_git_63

切换版本

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

idea clone gitlab代码需要token_git_64

创建分支

idea clone gitlab代码需要token_linux_65


idea clone gitlab代码需要token_分布式_66

切换分支

idea clone gitlab代码需要token_linux_67

idea右下角也可以直接创建分支和切换分支

idea clone gitlab代码需要token_linux_68

合并分支

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

idea clone gitlab代码需要token_java_69

idea clone gitlab代码需要token_python_70


还是点击右下角的分支

idea clone gitlab代码需要token_python_71

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

合并后结果:

idea clone gitlab代码需要token_分布式_72

解决冲突

idea clone gitlab代码需要token_linux_73

idea clone gitlab代码需要token_python_74


idea clone gitlab代码需要token_分布式_75


idea clone gitlab代码需要token_git_76

IDEA 集成 GitHub

idea clone gitlab代码需要token_分布式_77

token方式登录

首先要在github上生成token口令

idea clone gitlab代码需要token_git_78


idea clone gitlab代码需要token_python_79


idea clone gitlab代码需要token_linux_80

idea clone gitlab代码需要token_python_81

分享工程到github上面去

idea clone gitlab代码需要token_python_82


idea clone gitlab代码需要token_分布式_83

push 推送本地库到远程库

idea clone gitlab代码需要token_linux_84


注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,

push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程

库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地

代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地

代码更新到最新以后,然后再修改,提交,推送!

pull 拉取远程库到本地库

idea clone gitlab代码需要token_python_85


idea clone gitlab代码需要token_linux_86

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

clone 克隆远程库到本地

idea clone gitlab代码需要token_python_87


idea clone gitlab代码需要token_python_88

码云的使用

基本和github相同,但是idea要下一个gitee的插件

码云复制github项目

码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。
因为github是国外的服务器。所以下载很慢我们用码云通不过来再通过码云下载速度就快很多
具体操作如下:

idea clone gitlab代码需要token_linux_89


idea clone gitlab代码需要token_java_90


idea clone gitlab代码需要token_java_91

github搜索项目

文档链接

in:name example		名字中有“example”
in:readme example		readme中有“example”
in:description example	描述中有“example”

stars:>1000		star>1000
forks:>1000		fork>1000
pushed:>2019-09-01		2019年9月1日后有更新的

language:java		用Java编写的项目