Git&Github学习笔记

Git&Github学习笔记

文章目录

  • Git&Github学习笔记
    • 1.0Git 概述
    • 1.1何为版本控制
    • 1.2为什么需要版本控制
    • 1.3版本控制工具
      • 1.3.1集中化的版本控制
      • 1.3.2分布式版本控制
    • 1.4Git 工作机制
    • 1.5Git和代码托管中心
    • 1.6Git 安装
    • 1.7Git 常用命令
      • 1.7.1设置用户签名
      • 1.7.2初始化本地库
      • 1.7.3查看本地库状态
      • 1.7.4添加暂存区
      • 1.7.5提交本地库
    • 1.8历史版本
      • 1.8.1查看历史版本
      • 1.8.2版本穿梭
    • 1.9Git 分支操作
      • 1.9.1什么是分支
      • 1.9.2分支的好处
      • 1.9.3分支的操作
      • 1.9.4查看分支
      • 1.9.5创建分支
      • 1.9.6修改分支
      • 1.9.7切换分支
      • 1.9.8合并分支
      • 1.9.9解决冲突
      • 1.9.10创建分支和切换分支图解
    • 2.0Git团队协作机制
      • 2.0.1团队内协作
      • 2.0.2跨团队协作
      • 2.0.3GitHub操作
      • 2.0.4创建远程仓库
      • 2.0.5远程仓库操作
      • 2.0.6创建远程仓库别名
      • 2.0.7推送本地分支到远程仓库
      • 2.0.8克隆远程仓库到本地
      • 2.0.9邀请加入团队
      • 2.0.10拉取远程库内容
      • 2.0.11跨团队协作
      • 2.0.12SSH免密登录
    • 2.1IDEA 集成 GitHub
      • 2.1.0配置信息&基本操作
        • 1.配置 Git 忽略文件
        • 2.定位 Git 程序
        • 3.初始化本地库
        • 4.添加到暂存区
        • 5.提交到本地库
        • 6.切换版本
        • 7.创建分支
        • 9.切换分支
        • 10.合并分支
        • 11.解决冲突
      • 2.1.1设置 GitHub 账号
      • 2.1.2分享工程到 GitHub
      • 2.1.3push 推送本地库到远程库
      • 2.1.4pull 拉取远程库到本地库
      • 2.1.5clone 克隆远程库到本地

1.0Git 概述

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

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

1.1何为版本控制

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

Git&Github学习笔记_第1张图片

1.2为什么需要版本控制

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

1.3版本控制工具

CVS、SVN(Subversion)、VSS……

1.3.1集中化的版本控制

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

Git&Github学习笔记_第2张图片

1.3.2分布式版本控制

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

Git&Github学习笔记_第3张图片

1.4Git 工作机制

Git&Github学习笔记_第4张图片

1.5Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
➢ 局域网
✓ GitLab
➢ 互联网
✓ GitHub(外网)
✓ Gitee 码云(国内网站)

1.6Git 安装

地址: Git官网


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

Git&Github学习笔记_第5张图片

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

Git&Github学习笔记_第6张图片

Git 选项配置,推荐默认设置,然后下一步。
Git&Github学习笔记_第7张图片

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

Git&Github学习笔记_第8张图片

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

Git&Github学习笔记_第9张图片

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

Git&Github学习笔记_第10张图片

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

Git&Github学习笔记_第11张图片

Git&Github学习笔记_第12张图片

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

Git&Github学习笔记_第13张图片

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

Git&Github学习笔记_第14张图片

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

Git&Github学习笔记_第15张图片

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

Git&Github学习笔记_第16张图片

Git&Github学习笔记_第17张图片

Git&Github学习笔记_第18张图片

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

Git&Github学习笔记_第19张图片

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

Git&Github学习笔记_第20张图片

右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。

Git&Github学习笔记_第21张图片

在 Git Bash 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功。

Git&Github学习笔记_第22张图片

1.7Git 常用命令

Git&Github学习笔记_第23张图片

1.7.1设置用户签名

git config --global user.name 用户名
git config --global user.email 邮箱

Git&Github学习笔记_第24张图片

说明:
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。

1.7.2初始化本地库

基本语法

使用 git init完成初始化本地库操作

Git&Github学习笔记_第25张图片

Git&Github学习笔记_第26张图片

结果查看

Git&Github学习笔记_第27张图片

1.7.3查看本地库状态

基本语法

使用git status完成查看本地库状态操作

Git&Github学习笔记_第28张图片

在目录下新建一个hello.txt

内容为hello git!

Git&Github学习笔记_第29张图片

git status再次查看状态

Git&Github学习笔记_第30张图片

1.7.4添加暂存区

基本语法

使用git add 文件名将工作区的文件添加到暂存区

Git&Github学习笔记_第31张图片

Git&Github学习笔记_第32张图片

1.7.5提交本地库

基本语法

git commit -m " 日志信息" 文件名将暂存区的文件提交到本地库

查看状态(没有文件需要提交)

Git&Github学习笔记_第33张图片

Git&Github学习笔记_第34张图片

查看状态( 检测到工作区有文件被修改)

Git&Github学习笔记_第35张图片

将修改的文件再次添加暂存区并查看状态

Git&Github学习笔记_第36张图片

1.8历史版本

1.8.1查看历史版本

基本语法

git reflog 查看版本信息

git log 查看版本详细信息

Git&Github学习笔记_第37张图片

1.8.2版本穿梭

基本语法

git reset --hard 版本号

将上面修改后的hello.txt提交,查看版本信息

Git&Github学习笔记_第38张图片

穿梭到第一个版本

Git&Github学习笔记_第39张图片

再次打开hello.txt

Git&Github学习笔记_第40张图片

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qMelXJnO-1660982671175)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820115619808.png)]

1.9Git 分支操作

Git&Github学习笔记_第41张图片

1.9.1什么是分支

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

Git&Github学习笔记_第42张图片

1.9.2分支的好处

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

1.9.3分支的操作

Git&Github学习笔记_第43张图片

1.9.4查看分支

基本语法

git branch -v查看分支

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTRg6lXi-1660982671178)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820115917979.png)]

1.9.5创建分支

基本语法

git branch 分支名

Git&Github学习笔记_第44张图片

1.9.6修改分支

修改当前分支不会影响另一个分支

1.9.7切换分支

基本语法

git checkout 分支名切换分支

Git&Github学习笔记_第45张图片

1.9.8合并分支

基本语法

git merge 分支名

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

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ 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.

Git&Github学习笔记_第46张图片

产生冲突

我在master分支上的hello.txt做出修改

hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!master

我在hot-fix上的hello.txt做出修改

hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!hot-fix

当我把hot-fix分支合并到master时产生冲突

Git&Github学习笔记_第47张图片

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

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

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

1.9.9解决冲突

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

Git&Github学习笔记_第48张图片

编辑有冲突的文件,删除特殊符号,决定要使用的内容

Git&Github学习笔记_第49张图片

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

Git&Github学习笔记_第50张图片

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

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

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

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

2.0Git团队协作机制

2.0.1团队内协作

Git&Github学习笔记_第51张图片

2.0.2跨团队协作

Git&Github学习笔记_第52张图片

2.0.3GitHub操作

GitHub 网址:https://github.com/

2.0.4创建远程仓库

Git&Github学习笔记_第53张图片

Git&Github学习笔记_第54张图片

2.0.5远程仓库操作

Git&Github学习笔记_第55张图片

2.0.6创建远程仓库别名

基本语法

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

git remote add 别名 远程地址

Git&Github学习笔记_第56张图片

这个地址在 创建完远程仓库后生成的连接,如图所示

Git&Github学习笔记_第57张图片

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

git push 别名 分支

Git&Github学习笔记_第58张图片

此时发现已将我们 master 分支上的内容推送到 GitHub 创建的远程仓库。

Git&Github学习笔记_第59张图片

2.0.8克隆远程仓库到本地

git clone 远程地址

Git&Github学习笔记_第60张图片

Git&Github学习笔记_第61张图片

2.0.9邀请加入团队

选择邀请者

Git&Github学习笔记_第62张图片

填写要合作的人

Git&Github学习笔记_第63张图片

复制地址给该用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AKxgfy2e-1660982671189)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820153157325.png)]

接收邀请

Git&Github学习笔记_第64张图片

成功之后可以在 atguigulinghuchong 这个账号上看到 git-Test 的远程仓库。

Git&Github学习笔记_第65张图片

2.0.10拉取远程库内容

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

Git&Github学习笔记_第66张图片

2.0.11跨团队协作

将远程仓库的地址复制发给邀请跨团队协作的人,比如东方不败。

Git&Github学习笔记_第67张图片

在东方不败的 GitHub 账号里的地址栏复制收到的链接,然后点击 Fork 将项目叉到自己的本地仓库。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vOBBKV3X-1660982671191)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820153606637.png)]

叉入中…

Git&Github学习笔记_第68张图片

叉成功后可以看到当前仓库信息。

Git&Github学习笔记_第69张图片

东方不败就可以在线编辑叉取过来的文件。

Git&Github学习笔记_第70张图片

编辑完毕后,填写描述信息并点击左下角绿色按钮提交。

Git&Github学习笔记_第71张图片

接下来点击上方的 pull 请求,并创建一个新的请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9mOvKqFb-1660982671193)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820153745917.png)]

回到岳岳 GitHub 账号可以看到有一个 Pull request 请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6fXzuoYD-1660982671194)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820153823722.png)]

2.0.12SSH免密登录

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

Git&Github学习笔记_第72张图片

Git&Github学习笔记_第73张图片

Git&Github学习笔记_第74张图片

复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys

Git&Github学习笔记_第75张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9y0c2kGB-1660982671196)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820160221644.png)]

Git&Github学习笔记_第76张图片

2.1IDEA 集成 GitHub

2.1.0配置信息&基本操作

1.配置 Git 忽略文件

Git&Github学习笔记_第77张图片

Maven 工程的 target 目录

Git&Github学习笔记_第78张图片

与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。

创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 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 = Layne
email = [email protected]
[core]
excludesfile = C:/Users/asus/git.ignore
注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”

2.定位 Git 程序

Git&Github学习笔记_第79张图片

3.初始化本地库

Git&Github学习笔记_第80张图片

选择要创建 Git 本地仓库的工程。

Git&Github学习笔记_第81张图片

4.添加到暂存区

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

Git&Github学习笔记_第82张图片

5.提交到本地库

Git&Github学习笔记_第83张图片

Git&Github学习笔记_第84张图片

6.切换版本

Git&Github学习笔记_第85张图片

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

Git&Github学习笔记_第86张图片

7.创建分支

Git&Github学习笔记_第87张图片Git&Github学习笔记_第88张图片

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

Git&Github学习笔记_第89张图片

9.切换分支

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

Git&Github学习笔记_第90张图片

然后在 IDEA 窗口的右下角看到了 master,说明 master 分支切换成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FZN5wJg-1660982671204)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820155729457.png)]

10.合并分支

Git&Github学习笔记_第91张图片

Git&Github学习笔记_第92张图片

11.解决冲突

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

Git&Github学习笔记_第93张图片

Git&Github学习笔记_第94张图片

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

Git&Github学习笔记_第95张图片

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

Git&Github学习笔记_第96张图片

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

Git&Github学习笔记_第97张图片

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

Git&Github学习笔记_第98张图片

2.1.1设置 GitHub 账号

Git&Github学习笔记_第99张图片

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

Git&Github学习笔记_第100张图片

然后去 GitHub 账户上设置 token。

Git&Github学习笔记_第101张图片

Git&Github学习笔记_第102张图片

Git&Github学习笔记_第103张图片

点击生成 token。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RBnLEBv6-1660982671209)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220820154425832.png)]

点击登录。

Git&Github学习笔记_第104张图片

2.1.2分享工程到 GitHub

Git&Github学习笔记_第105张图片

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

Git&Github学习笔记_第106张图片

2.1.3push 推送本地库到远程库

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

Git&Github学习笔记_第107张图片

Git&Github学习笔记_第108张图片

Git&Github学习笔记_第109张图片

Git&Github学习笔记_第110张图片

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

2.1.4pull 拉取远程库到本地库

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

Git&Github学习笔记_第111张图片

Git&Github学习笔记_第112张图片

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

2.1.5clone 克隆远程库到本地

Git&Github学习笔记_第113张图片

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

Git&Github学习笔记_第114张图片

Git&Github学习笔记_第115张图片

Git&Github学习笔记_第116张图片Git&Github学习笔记_第117张图片

你可能感兴趣的:(程序员必备工具,git,github,学习)