Git学习总结(上)

简介: 以前在学校提交作业时使用过Git这个工具,感觉自己的使用没有发挥出它的全部优势,所以最近利用假期时间认真学习了一下Git。Git的分布式特性和回滚、分支等操作十分实用,特此记录下Git学习过程。

Git

Git介绍

官网中对Git的介绍


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

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

版本控制介绍


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

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

版本控制有利于从个人开发过渡到团队协作。


分布式版本控制VS集中式版本控制

集中式版本控制工具


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


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


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

分布式版本控制工具


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


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

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

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

Git的发展历史


工作机制和代码托管中心

工作机制


代码托管中心

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

1、局域网

    GitLab

2、互联网

    GitHub(外网)

    Gitee 码云(国内网站)

Git安装

Git下载页面,选择下载Windows 64位版的Git安装软件。

安装步骤按照安装软件的安装向导安装即可,无需过多配置。

安装成功后,通常在文件浏览器空白处单击击鼠标右键,弹出菜单栏有Git的选项。


Git命令


设置用户签名

git config --global user.name abc #用户名
git config --global user.email abc@123.com #用户邮箱

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

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


查看用户签名

cat ~/.gitconfig

即查看系统盘/用户/.gitconfig文件

初始化本地库

git init

即在当前目录下创建了一个名为.git的非空隐藏文件夹。


查看本地库状态

git status

添加暂存区

git add 文件名

提交本地库

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

查看提交记录

git reflog 
git log

git log 命令可以显示所有提交过的版本信息,如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息。

git reflog 显示所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

版本穿梭

git reset --hard 版本号


Git分支


什么是分支

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

分支的优点

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

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

查看分支

git branch -v

创建分支

git branch 分支名

切换分支

git checkout 分支名
• 1

分支合并

git merge 分支名


首先要切换到master分支上,然后在master分支上合并hot-fix分支


合并冲突(merge conflict)

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

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


创建和切换分支的实质

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

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

2、HEAD 如果执行 hot-fix,那么我们现在就在 hot-fix 分支上。


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


Github

创建远程库


Github网址

登陆后,点击“New repository”,创建远程库

创建远程库的别名


git remote -v #查看当前所有远程库的别名
git remote add 别名 远程库地址 # 创建别名

推送本地库到远程库


git push 别名 分支
• 1

在提交代码前最好先更新下远程仓库的代码到本地仓库,这样可以减少不必要的冲突

拉取远程库到本地


git pull 别名 分支
• 1

克隆远程库到本地


git clone 远程库地址

clone所做操作:

1、拉取代码(pull)

2、初始化本地仓库(init)

3、创建别名(remote add)


团队内协作和跨团队协作


团队内协作

选择目标

发送网址

接受邀请

跨团队协作

发送网址
收到网址
Fork项目

pull请求

合并请求


SSH免密登录


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

  1. 先到用户的主页目录,删除.ssh文件夹(如果没有.ssh文件夹,忽略此步)
  2. 在用户的主页目录运行命令ssh-keygen -t rsa -C 登录邮箱后敲三次回车即可生成.ssh目录
  3. 复制.ssh/rsa.pub中的公钥并添加至Github账号SSH设置中
  4. 接下来便可使用SSH方式推送或拉取


IDEA集成Git


配置Git忽略文件

与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。例如,Maven工程根据src生成的target。

创建忽略规则文件 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 = Layne@atguigu.com
[core]
  excludesfile = C:/Users/asus/git.ignore

注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”

在idea配置Git程序

在菜单栏File->Setting->搜索栏搜Git,配置Git的安装路径。

初始化Git

在菜单栏VCS -> Import into Version Control -> Create Git Repository

选择要创建 Git 本地仓库的工程,然后OK。

添加到暂存区

右键点击文件,选择Git->Add,添加文件到暂存区。

添加成功后,文件名会从红色变成绿色。

提交到本地库

右键点击文件,选择Git->Commit File

添加日志信息后提交

版本穿梭

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

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

创建分支

右键点击文件,Git -> Repository -> Branches,或者点击IDEA的右下角,如图红圈所示部位:


选择点击New Branch:


创建新分支:

切换分支

创建分支步骤相似,如点击IDEA的右下角(它显示项目正处在那条分支),如图红圈所示部位,选择你想要切换的分支,然后checkout:



或者在log窗口,右键点击分支,选择checkout:


合并分支

点击IDEA 窗口的右下角的master,将 hot-fix 分支合并到当前 master 分支。选择hot-fix->Merge into Current

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

合并冲突

冲突产生,需要人工解决:



代码冲突解决,将代码提交本地库后,如图所示:



设置Github账号

在菜单栏File->Setting->搜索栏搜GitHub,添加GitHub账号:


分享项目到Github


推送代码到远程库



拉取远程库代码合并到本地库



克隆代码到本地

在菜单栏的File->Close Project->Get from Version Control



或者在菜单栏VCS->Get from Version Control




目录
相关文章
|
6月前
|
Linux 开发工具 C语言
Linux的学习之路:7、yum与git
Linux的学习之路:7、yum与git
60 0
|
JSON 前端开发 JavaScript
前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(一)
前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(一)
589 0
|
1月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
112 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
1月前
|
Shell 开发工具 git
git学习三:git使用:删除仓库,删除仓库内文件
通过GitHub的设置页面删除仓库,以及如何使用Git命令行删除仓库中的文件或文件夹。
151 1
git学习三:git使用:删除仓库,删除仓库内文件
|
5月前
|
存储 网络安全 开发工具
【GIT】Git常用命令学习
【GIT】Git常用命令学习
66 1
|
1月前
|
Unix Shell 网络安全
git学习六:(bug总结)git@github.com: Permission denied (publickey).等
本文是关于解决在使用Git和GitHub时遇到的“git@github.com: Permission denied (publickey)”错误的指南。文章提供了详细的步骤,包括确认SSH Agent运行状态、检查密钥配置、确保密钥匹配、验证仓库URL、检查权限和代理设置,以及配置SSH文件。这些步骤帮助用户诊断并解决SSH认证问题。
93 0
|
1月前
|
编译器 网络安全 开发工具
git学习五:切换本地仓库出现的问题。修改git配置初始化。error:src refspec master does not match any。错误总结,送上几个案例
这篇文章是关于Git使用中遇到的一些问题及其解决方案的总结,包括切换本地仓库时的问题、修改Git初始化配置、以及解决"error: src refspec master does not match any"错误等。
55 0
|
6月前
|
安全 Shell 网络安全
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
199 0
|
6月前
|
缓存 数据可视化 开发工具
学习 Git,看这一篇就够了!(下)
学习 Git,看这一篇就够了!(下)
128 0
|
6月前
|
存储 Linux Shell
学习 Git,看这一篇就够了!(上)
学习 Git,看这一篇就够了!(上)
115 0