用于复习快速回顾
目录
1.点进已有项目文件夹,右键git bash,设置用户签名(仅用于区分提交者,跟GitHub账户邮箱没关系):
- git config --global user.name 用户名
- git config --global user.email 邮箱
2.初始化本地仓库
git init
3.添加暂存区
git add 文件名
4. 提交本地库
git commit -m "日志信息" 文件名
5.GitHub创建远程仓库new repository
6.创建远程仓库别名:
git remote add 别名 远程地址 起别名

7.推送本地分支到远程仓库
查看当前分支
git branch -v
推送本地分支
git push 别名 分支如master
8.登录浏览器,完成。

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

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换
比较容易理解版本控制思想:
写毕业论文时候,需要多个版本进行存储,以防止修改错误后找不到以前的版本:

注意:git控制版本不是上图这种,上图仅供理解版本控制思想,实际上git是通过指针控制版本的:

first、second、second分别代表三个版本

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



代码提交到本地库,才是历史版本,就删不掉了。
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
➢ 局域网
GitLab
➢ 互联网
GitHub(外网)
Gitee 码云(国内网站)
查看当前git版本:
git version



最好安装在自己电脑开发或者环境目录下

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安装成功。

| 命令名称 | 作用 |
|---|---|
| git config --global user.name 用户名 | 设置用户签名 |
| git config --global user.email 邮箱 | 设置用户签名 |
| git init | 初始化本地库 |
| git status | 查看本地库状态 |
| git add 文件名 | 添加到暂存区 |
| git commit m " 日志信息 " 文件名 | 提交到本地库 |
| git reflog | 查看历史记录 |
| git reset hard 版本号 | 版本穿梭 |
git可以tab键代码补全,例如输入con按tab补全成config。
基本语法
- git config --global user.name 用户名
- git config --global user.email 邮箱

检查设置好的签名:
在自己 C:\Users\xxx(xxx是电脑账户名)下有个 .gitconfig 文件,打开里面就是我们设置的用户签名

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


初始化后生成的.git隐藏文件的内容:

基本语法:
git status

使用vim文本编辑器新增文件,再次查看本地库状态,会发现文件名是红色,表明此文件只存在于工作区,git还没有追踪过此文件,要使用git add添加到暂存区(追踪文件):

基本语法:
git add 文件名

添加到暂存区后警告:LF替换成CRLF,即换行替换成windows换行。
CRLF 是 carriage return line feed 的缩写,中文意思是回车换行。“\r\n”, windows系统环境下的换行方式
LF 是 line feed 的缩写,中文意思也是换行。“\n”, Linux系统环境下的换行方式
再次查看本地库状态,会发现文件名变绿色,表面文件已保存到暂存区:

如果想删除暂存区的文件:
![]()
注意:该指令只是删除暂存区文件,工作区文件依然存在。
git commit -m "日志信息" 文件名

此时本地库状态是干净的:没有东西需要提交

对比之前暂存区状态:还没有提交
![]()
查看引用日志信息:
git reflog
示例:
![]()
引用日志信息表明:前七位版本号,指针指向master信息,提交日志是first commit 。
查看详细日志命令:
git log
示例:

日志信息表明:完整版本号、作者、日期、提交日志信息。
使用vim编辑器修改文件、再提交暂存区、提交本地库。

查看引用日志信息:

发现指针指向第二次提交版本。
基本语法:
- git reflog 查看版本信息
- git log 查看版本详细信息
虽然版本很多,但是我们工作区的 hello.txt 始终只有一个文件存在

语法:
git reset --hard 版本号
示例:

此时文件内容展示的也是切换后版本内容:

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

之后有了 second 版本,master 指针指向 second 版本

之后有了third 版本,master 指针指向 third 版本

如果我们想穿越回去,只需要让 master 指针指向 first 版本或者 second 版本
| 命令名称 | 作用 |
|---|---|
| git branch 分支名 | 创建分支 |
| git branch -v | 查看分支 |
| git checkout 分支名 | 切换分支 |
| git merge 分支名 | 把指定的分支合并到当前分支上 |
基本语法:
git branch -v

基本语法:git branch 分支名

基本语法:git checkout 分支名


基本语法:
git merge 分支名
注意:
- 合并次分支到主分支时,目前分支是主分支,git merge 次分支。
- 合并后主分支成为合并后的内容,而次分支不变。
①正常合并不冲突

②合并产生冲突
冲突产生的原因:
例如,我们首先在 master 分支的倒数第二行进行修改,并将其添加到暂存区,再提交到本地库

接着,我们去 hot-fix 分支的倒数第一行进行修改,并将其添加到暂存区,再提交到本地库

之后我们在 master 分支上合并 hot-fix 分支,发现产生冲突

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


2.删除完成之后保存,再次添加到暂存区,并再次提交到本地库
(注意:此时使用 git commit 命令时候不能带文件名,否则会报错)


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

举个例子:岳不群首先用 git 初始化自己的本地库,写了一套华山剑法,利用
push 命令将自己的本地库推送到代码托管中心(Github、Gitee),大弟子令狐
冲通过 clone 克隆命令完整的复制到自己的本地库,令狐冲修改两招之后将
自己的本地库再次 push 到代码托管中心,这样岳不群就可以通过 pull 命令
拉取令狐冲修改的代码 来更新自己的本地库。

令狐冲请东方不败改代码,东方不败通过 fork 命令从岳不群的的远程库中拿取代码,再通过 clone 克隆命令到自己的本地库,修改完成后使用 push 推送到在自己的远程库,使用 Pull request 拉取请求给岳不群,岳不群审核完成后使用 merge 命令合并对方的代码到自己的远程库中,再通过 pull 命令到自己的本地库中,这样修改过后的华山剑法岳不群和令狐冲就都可以使用了。
repository译为仓库,资源库。





| 命令名称 | 作用 |
|---|---|
| git remote -v | 查看当前所有远程地址别名 |
| git remote add 别名 远程地址 | 起别名 |
| git push 别名 分支 | 推送本地分支上的内容克隆到本地 |
| git clone 远程地址 | 将远程仓库的内容克隆到本地 |
| git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并 |
创建远程仓库是为了在push和pull时候,可以直接用别名拉取,不用输入很长的一段链接地址。
建议别名和库名一致。
①、Gihub
基本语法:
- git remote -v 查看当前所有远程地址别名
- git remote add 别名 远程地址 起别名
示例:


fetch译为拉取,拿来。代表pull和clone。
注意:起的别名最好和本地库的名称一致
②、Gitee

基本语法:
git push 别名 分支
报错尝试:由https换成ssh连接。
解决方法:

使用情况:
手动在GitHub修改了代码,或者由其他成员在GitHub更新了项目,此时需要拉取远程库到本地库。
语法:
git pull 别名 分支
我们在远程库进行 hello.txt 的文件修改

然后在本地库将远程库的代码 拉取

基本语法:
git clone 远程地址
我们另一台用户需要克隆我们的远程仓库到他的本地库,由于是使用一台电脑模拟,所以在克隆之前需要在 凭据管理器下删除我们之前的凭据

我们新建一个文件夹 git-clone,然后在此文件夹下右键 git bash here,之后进行克隆


克隆会自动初始化本地仓库,并起别名为origin。
我们在 git-clone(假设这是大弟子令狐冲) 文件夹里面进行代码修改,修改完后添加到暂存区,再提交到本地库,之后 push 到我们的远程库


我们在 git-demo 仓库点击管理 -> 仓库成员管理 -> 添加仓库成员 -> 邀请用户

我们在第二哥 gitee 账号里面可以接收到如下图:

令狐成成为仓库开发者被拉入团队后,我们再次在令狐冲文件夹使用进行 push

push 到远程库成功,我们在远程库查看


填入想要合作的人

复制邀请地址并发给该用户

在 atguigulinghuchong这个账号中的地址栏复制收到邀请的链接 ,点击接受邀请。


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

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


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


合并之后我们在岳不群的 git-demo 下就可以看到东方不败的代码

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

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

东方不败就可以在线编辑叉取过来的文件。编辑完毕后,填写描述信息并点击左下角绿色按钮提交。

要使用ssh链接必须要先添加ssh公钥:

在 C盘 User 自己的账户下右键 git bash here,ssh-keygen -t rsa -C 自己的邮箱签名

这样就会生成 .ssh 文件夹,里面有私钥和公钥

之后在 gitee 上添加公钥

这样我们可以借助 ssh 链接来拉取和推送代码,并且不需要进行登录
先点击头像,设置

在c-user-用户名处git-bash,输入下面代码后三次回车会在该路径生成.ssh文件夹,进入有id_rsa.pub公钥,id_rsa私钥。进入公钥复制粘贴到上图位置。
ssh-keygen -t rsa -C 自己的邮箱签名
ssh-keygen是生成免密登录的公钥或私钥命令,-t是指定用哪种加密算法生成,rsa是著名的非对称加密协议,-C是描述,后加邮箱。

添加公钥成功状态:

然后进入项目目录的.git,修改config里url为ssh链接,相当于替换了起别名的链接,以后就可以通过别名+ssh提交了:


我们的Eclipse 、IDEA都会生成一些无关文件需要忽略,如图



我们之所以要忽略他们,是因为他们与项目的实际功能无关,不参与服务器上部署运行。
忽略无关文件方法:
1.在用户家目录(C/User/用户名) 下创建 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
-
- hs_err_pid*
-
- .classpath
- .project
- .settings
- target
- .idea
- *.iml

2.在 .gitconfig 文件中引用忽略配置文件(.gitconfig 在家目录中,在上面3.1设置用户签名时创建的)
注意:修改成自己的电脑用户名,要用正斜杠。
- [user]
- name = Augenestern
- email = .....@qq.com
- [core]
- excludesfile = C:/Users/Augenestern/git.ignore

3.在 IDEA 里面定位
注意先关闭项目再设置,否则是仅此项目内有效。

1.创建git本地库。vcs就是版本控制工具的缩写。

可以看到项目根目录下多了.git隐藏目录,idea很多文件变红(变红就是未被追踪,即只存在于工作区),说明git已接管了本目录:


2.添加项目到暂存区

3.提交到本地库

提交后类和pom.xml边黑色,代表此时本地库状态是干净的,不需要再提交了:

修改一下代码,就又变蓝了,说明文件被git追踪过(添加到过暂存区)、又被修改了:

1.提交版本2到本地库。我们修改 GitTest 中的代码,文件变蓝文件被git追踪过(添加到过暂存区),再次提交到本地库

2.查看当前版本。点击左下角git。

如图,黄色指针代表head指针,绿色指针是当前分支指针。
3..修改版本。在IDEA的左下角,点击 Git,然后点击 Log查看版本,右键选择要切换的版本,然后在菜单里点击 Checkout Revision,译作签出版本。


或者右下角

或者

填写分支名称(签出译作checkout,切换分支):

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

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

合并hot-fix到master。先checkout签出到master分支,然后 在IDEA窗口的右下角,将 hot-fix分支合并到当前 master分支。

如果代码没有冲突,分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交本地库
合并分支冲突出现情况:
如图所示,如果master分支和 hot-fix分支都修改了代码,在合并分支的时候就会发生冲突。



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

合并代码冲突:
可以分别选择接收master分支和hotfix分支的变更。这里我们点击 Conflicts框里的 Merge按钮,进行手动合并代码:

手动合并完代码以后,点击右下角的 Apply按钮。代码冲突解决,自动提交本地库,文件颜色变正常:

密码登录:
idea账号有登录的话,选择账号密码登录会跳转到浏览器,授权git登录输入密码即可登录成功。
token(令牌)登录

注意:一定要点击左下角,使用ssh克隆git仓库,否则上传GitHub时会报错:

Token在哪呢?我们在 Github 点击 Settings -> Develop Settings,重新输入密码:


点击 Generate token,口令只显示一次,刷新就没了,最好将token复制到记事本:



这其实就是创建远程库,remote远程即别名,是否私有,描述等

1.提交本地库。首先修改项目,提交暂存区、提交本地库
2.push。
方法一:点击导航栏git-推送push:

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

3.自定义远程为ssh链接。因为https链接没有ssh快。点击远程remote,点击自定义远程,远程就是别名,填入GitHub项目的ssh链接:
如果之前有勾选使用ssh克隆git仓库可不用这一步:


如果远程设置错误,可以管理远程,重定义:

注意:
push是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push的操作是会被拒绝的。也就是说, 要想 push成功,一定要保证本地库的版本要比远程库的版本高(可能其他成员已经提交了新版本,如果低于远程库就要检查加拉取)!
因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!
好习惯:
1.在远程库版本高于本地库时候才需要拉取
2.改本地代码前,先pull。push前,先pull,保证提交时没有冲突。
3.pull前,确保本地文件是正常色,没有修改。



注意:pull是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。
相同点:
git clone和git pull都是从远程服务器拉取代码到本地。
不同点:
git clone是在本地没有版本库的情况下拉取,是一个本地从无到有的过程。
git pull=git fetch + git merge。每次从本地仓库push到远程仓库之前要先进行git pull操作,保证git push到远程仓库时没有版本冲突。
1.先关闭当前项目,因为在没有项目的时候需要克隆。这里我直接把当前项目删除。

或者在另一个项目内点击git-clone

2.选择GitHub里项目登录,或者填写ssh链接,修改项目目录

码云和GitHub很多操作类似,根本的区别是码云在国内,建议HTTPS链接,而GitHub在国外用ssh
Idea 默认不带码云插件,我们第一步要安装 Gitee插件。

安装完成重启 IDEA 即可
Idea连接码云和连接 GitHub几乎一样,首先在 Idea里面创建一个工程,初始化 git工程,然后将代码添加到暂存区,提交到本地库。


当然我们也可以自己在码云Gitee上创建远程库,然后获取到远程库的 HTTPS/SSH 链接,将我们的代码 push 即可
自定义远程库链接: Define remote,给远程库链接定义个 name,然后再 URL里面填入码云远程库的 HTTPS链接即可,码云服务器在国内,用 HTTPS 链接即可,没必要用 SSH 免密链接

我们在远程库修改代码,然后使用本地库 pull 拉取远程库的代码





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

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

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