代码托管/版本控制工具:Git的安装和使用详解

目录


友情提醒:

第一章、Git的下载和安装

1.1)登录GitHub官网注册账户密码

登录官网:https://github.com/
注册账号密码,如果发现注册页面打不开,继续往下看

在这里插入图片描述

国内访问github很卡解决方式

看这个
下载加速器加速访问GItHub

1.2)注册完账号密码后下载本地git

登录https://git-scm.com/download/win (根据自己电脑的位数和系统下载git)
在这里插入图片描述

1.3)安装git

双击Git-2.9.0-64-bit.exe文件安装git,点击next
在这里插入图片描述

选择安装目录,点击next

在这里插入图片描述

勾选如下的组件,点击next

在这里插入图片描述
继续next
在这里插入图片描述

一直next到这里的时候,选择使用命令行环境

在这里插入图片描述

接下来不管出现啥都点击next,直到出现Install后点击安装

在这里插入图片描述
安装成功

在这里插入图片描述

第二章、Git基本配置

2.1)配置git用户和邮箱

鼠标右键点击电脑桌面空白处,选择Git Bash Here

在这里插入图片描述
①出现Git的命令行窗口,在Git命令行配置用户名和登录邮箱
1、设置用户名:git config --global user.name '在github上注册的用户名';

在这里插入图片描述
2、设置用户邮箱:git config --global user.email '注册时的邮箱';

在这里插入图片描述
3、配置后,我们用git config --list查看是否配置好
在这里插入图片描述

2.2)生成密钥文件

②查看 c盘->用户->正在使用的用户名->.ssh下是否有id_rsa文件,没有就用下面的命令生成rsa密钥

ssh-keygen -t rsa -C "注册的邮箱@qq.com"

在这里插入图片描述
输入后点击enter回车,回车,回车

在这里插入图片描述
生成后去 c盘->用户->正在使用的用户名->.ssh中查看生成的公钥和私钥
在这里插入图片描述

2.3)登录git官网配置密钥

①打开.ssh文件夹下的id-rsa.pub文件的内容,全部复制。

②登录你的git服务器点击头像选择settings—》寻找ssh and GPG keys—》new ssh.key—》将id-rsa.pub文件的内容全部粘贴后点击add ssh key
在这里插入图片描述

第三章、Git基本操作

3.1)创建远程仓库,初始化本地项目

①第一次使用Git上传代码需要登录你的git账户创建远程仓库,登录后点击上方导航栏的‘+’按钮,选择 New repository
在这里插入图片描述

②出现以下页面,填写repository也就是仓库的名称,点击下方创建createrepository
在这里插入图片描述

③创建成功后,在首页会出现你的repository仓库,选择一个进入如:baomingshu/ssm
在这里插入图片描述

④进入后出现如下页面点击右侧code。
a.是你创建的repository仓库的http地址
b.是你创建的repository仓库的ssh地址,将他们都复制保存
在这里插入图片描述

⑤初始化本地项目,使用cd命令进入Java工程所在的本地目录 e:/workspace/heima_ssm/
进入后在当前目录下输入git init 进行初始化项目(初始化创建一个新的git仓库)
这将在当前目录下创建一个名为.git的子目录,其中包含了初始化的Git仓库。
可以输入ls查看文件夹下有什么

3.2)gitignore使用

①如果没有.gitignore文件使用下面命令创建

touch .gitignore

②使用命令设置gitignore:
.gitignore可以将文件将不需要提交的与我们代码无关的文件比如:target文件,.settings文件,.project文件.class文件不提交到远程仓库。输入命令Vi .gitignore打开
在这里插入图片描述
③点击i键后,开始输入以下不需要提交的文件名称:

heima_ssm_web/target/*
.settings
.classpath
.project

④输入完成后点击esc退出,再输入冒号,才能输入命令wq,回车自动保存后退出。
⑤.gitignore语法介绍
1、.gitignore文件中匹配规则:

#表示注释
*表示匹配任意多个字符
?表示匹配任何一个字符
!表示取反取反
[abc]表示匹配方括号当中的任何一个字符
[0-9]表示匹配0-9当中任意一个数字
两个*号表示任何中间目录,比如src/**/build,可以匹配到src/test/build,也可以匹配到src/current/build。

2、取反规则:指定可以不遵守忽略条件的文件名,就算pom.xml文件在被忽略的文件路径下,也不会被忽略。

!pom.xml

3、相对路径写法,过滤掉ssm_web/target/*文件夹下的所有内容:

ssm_web/target/*

4、忽略,过滤掉.text类型的文件:

*.text

5、忽略掉target路径下的所有java文件:

target/*.java

3.3)提交代码到远程库

①第一次提交代码到远程库
第一次提交代码时需要先使用git remote add origin +刚刚保存的git 的ssh项目地址如git@github.com:baomingshu/ssm.git设置,执行成功以后本地仓库的项目便已经同远端仓库的项目保持同步
在这里插入图片描述

②输入git add * 将文件提交到git暂存仓库
在这里插入图片描述

③输入git commit –m ‘init ssm project’提交到本地仓库,其中单引号中的内容是自己定义的备注,
相当于你备注一下这次提交了什么
在这里插入图片描述

Git log查看提交记录
在这里插入图片描述
⑤提交到本地后,使用Git push origin master将提交到远程仓库
在这里插入图片描述
Git status 查看状态,成功后进入git hub出现以下页面
在这里插入图片描述

3.4)代码clone到本地

①第一次下载代码时使用
使用Git clone +刚刚保存的git 的ssh项目地址如git@github.com:bxxx/ssm.git 如图复制
在这里插入图片描述
如图就可以将git hub 中的代码下载到本地项目中。
在这里插入图片描述

②后续代码有更改,使用Git pull origin master 下载远程库中与本地有区别的代码
如果失败了 不能下载代码,是因为本地仓库跟远端仓库关联不成功引起的,执行下面的命令设置一下

git branch --set-upstream master origin/master

第四章、git分支操作

4.1)分支的创建和切换

4.1.1)分支的创建

在本地建立我自己的分支(取名develop)才能提交到远程仓库上develop的分支

#第一种方式:创建develop分支
git checkout -b  develop
#第二种方式:创建develop分支
git branch develop

使用这个命令将本地分支推送到origin,成为远程分支

git push origin develop:develop

4.1.2)分支的切换

使用下面这个命令来查看当前分支。

git branch

如图:
在这里插入图片描述
使用下面这个命令来切换分支。

 git checkout develop

如图:
在这里插入图片描述

4.2)本地切换分支之前有未提交的更改

4.2.1)切换之前的master分支下文件内容

执行命令 切换到master分支

git checkout master

此时的master分支下的文件内容如下:
在这里插入图片描述

4.2.2)切换到develop分支后修改文件

执行命令 切换到develop分支

git checkout develop

对文件内容进行以下修改:修改后内容如下:
这时候不对develop分支做提交,直接切回master
在这里插入图片描述

4.2.3)再切回master分支出现提示:

***如下: error: Your local changes to the following files would be overwritten by checkout:
        fileMergeTest.txt
Please commit your changes or stash them before you switch branches.

您对以下文件的本地更改将被签出覆盖:
fileMergeTest.txt
请在切换分支之前提交(commit),或者缓存(stash )。

4.3)解决方式:不merge

4.3.1)方式1:commit提交修改

先在develop分支修改本地文件内容,如图:
在这里插入图片描述
切换到master分支时提示:
在这里插入图片描述
使用commit,提交保存到本地仓库再切换分支:

git add filename
git commit -m "message"

如图执行:
在这里插入图片描述
提交后,本地文件就被修改了,这时候切换成功了
在这里插入图片描述
git checkout develop切换回develop分支会发现,文件内容是修改保存的。
在这里插入图片描述

想要还原这次commit提交的话可以:
使用git log 查看提交的历史记录 找到,
在这里插入图片描述

再使用下面命令恢复本次提交的修改

git revert <commit-id>
#也就是
git revert fceb33de10e82ed956fe68aa25c0c567bfdace47

出现下面的界面:Git会打开一个文本编辑器,让您输入撤销提交的相关信息。可以按i然后直接按下Esc键,输入:wq,然后按下Enter键。默认使用当前信息。
在这里插入图片描述

4.3.2)方式2:stash 暂存

先在本地develop分支下修改文件内容
在这里插入图片描述
切换到master分支时提示:
在这里插入图片描述
可以使用git stash #封存修改切换到master以后再切回来,
在这里插入图片描述
发现文件内容怎么少了一段
在这里插入图片描述
原来是要把封存的修改用git stash pop命令取出来

git stash pop #把封存的还原

封存的修改就还原了
在这里插入图片描述

4.3.3)方式3;放弃修改

不推荐这样做,改完了又放弃,这不是傻嘛。

git clean -n         //这个是清除文件预览
git clean -f fileName        //强制清除文件

执行后效果如下:

86130@Bms MINGW64 /f/Git/mergetest (develop)
git clean -n
Would rempve fileMergeTest.txt.bak
86130@Bms MINGW64 /f/Git/mergetest (develop)
git clean -f fileMergeTest.txt.bak
Removing fileMergeTest.txt.bak

4.4)解决方式:commit提交后直接merge

4.4.1)查看develop分支下的内容

执行命令 切换到develop分支

git checkout develop

发现内容如下:
在这里插入图片描述

4.4.2)查看master分支下的内容

执行命令 切换到master分支

git checkout master

master分支下的文件内容如下:
在这里插入图片描述

4.4.3)合并develop分支到master分支

执行下面的命令先切到master

git checkout master

合并develop分支到当前的master分支

git merge develop

这是在master分支下查看文件内容,发现已经和develop分支同步了
在这里插入图片描述

第五章、推送、拉取与合并

5.1)推送与比较差异

5.1.1)提交到暂存区

当我本地有了改动,用命令查看改动

git diff 文件名<file>

如图,绿色是改动新增,红色是删除的地方
在这里插入图片描述

把有改动的文件(modified状态)添加到暂存区,准备进行提交。

`git add .`命令用于将所有修改过的文件添加到暂存区。
这个命令会将当前目录及其所有子目录中的所有修改过的文件都添加到暂存区,以便后续提交这些更改。

再使用status命令查看是否添加成功(变绿)

git status
Git命令行中,AM通常代表以下含义:
A:表示"Added",表示文件已经被添加到暂存区(Staging Area)。
M:表示"Modified",表示文件已经被修改过。

或者绿色的是在暂存区,红色的是已经被修改了

如果某些文件显示为红色,表示这些文件已经被修改但尚未添加到暂存区。需要重新运行git add命令将这些修改过的文件添加到暂存区,以便将它们包含在下一次提交中。
如图:
在这里插入图片描述

5.1.2)把文件从add到暂存区的文件退下来

如果使用add的时候添加错了,可以使用下面这个操作把文件从add到暂存区的文件退下来

git restore --staged 文件名<file>

#再使用status命令查看是否退回成功(变红)
git status

如图;
在这里插入图片描述

确认无误后,提交暂存区的文件到本地仓库,-m’xxx’是指添加提交信息。

git commit -m 'bms dev first commit'

如图
在这里插入图片描述

查看日志信息是否commit提交成功:包括提交者、提交时间、提交信息等。

git log

如图:
在这里插入图片描述

5.1.3)推送到不同远程仓库分支

将本地仓库的改动推送到远程仓库develop分支。这里的develop相当于在远程仓库创建了develop分支,如果分支已经存在就不会创建了(有可能是和别人共用分支)


#选择推送到远程仓库的develop分支
git push origin develop

#选择推送到远程仓库的master分支
git push origin master

在github上,如果没有代码冲突,就将自己的分支合并到共用的分支

在github上直接用UI可以合并

5.1.4)推送完后比较本地分支和远程分支:*

使用git fetch命令来获取远程仓库的最新信息:这里会获得所有分支的更新。即使只想比较develop分支,git fetch也会更新所有分支(develop,master等等)的信息,而不仅限于develop分支。

git fetch

确认本地develop分支和远程origin/develop分支存在并同步:

git branch -a

使用git diff来比较本地develop分支和远程develop分支之间的差异(查看是否一致)如果在运行git diff develop origin/develop命令时没有返回任何信息,代表本地develop分支和远程origin/develop分支之间没有差异。

git diff develop origin/develop

也可以在develop分支上使用git diff来比较本地develop分支和本地master分支

git diff master develop

5.2)本地合并

5.2.1)git merge命令介绍

git merge 用于本地分支的合并。将一个本地分支的更改合并到另一个本地分支时,保留详细的合并信息。

例如,假设有一个 develop分支和一个 master 分支,在 develop分支上开发了新的功能,然后想要将这些更改合并到 master 分支中。您可以切换到 master 分支,然后运行 git merge develop命令来实现这一目的。

5.2.2)模拟本地develop与本地master冲突

本地不同分支的文件有差异
在Git中,合并分支可以在本地进行,也可以在远程仓库进行。因为一般不会去远程仓库合并。我们这里只讨论本地分支合并。
使用git merge命令合并本地分支时,因为各种原因造成了不同分支的相同文件有差异合并时就会导致代码冲突。

场景1:合并本地分支
从本地master分支拉出了develop分支,在develop分支上开发,在这期间,各种原因,master分支发生了变化。等你想把develop分支合并到master分支,提示代码冲突。

master分支修改第五行:修改文件内容后执行命令

git add .
git commit -m 'messag'

在这里插入图片描述
切换到develop分支,依然修改第五行:修改文件内容后执行命令

git add .
git commit -m 'messag'

在这里插入图片描述
切回master分支,合并develop分支

git checkout master
git merge develop

提示合并失败,内容冲突
在这里插入图片描述

5.2.3)解决冲突

打开文件,发现本地文件冲突位置
在这里插入图片描述
手动编辑这个文件,解决冲突后提交
在这里插入图片描述

5.3)远程拉取与合并

5.3.1)git pull 与git fetch的区别

git fetch:该命令会从远程仓库中获取最新的提交历史和文件更改,但不会自动合并或修改你的本地工作副本。它只会将远程分支的更新内容下载到本地,使你能够查看远程分支的最新状态。

git pull:该命令实际上包含了git fetch和git merge两个操作。它会先从远程仓库获取最新的提交历史和文件更改(相当于git fetch),然后自动将远程分支的更新内容合并到你的本地分支上(相当于git merge)。因此,git pull会直接将远程仓库的更改内容复制到你的工作目录中,并尝试自动合并这些更改。

代码冲突原因:
指在合并(merge)分支或拉取(pull命令包含了merge)远程代码时,远程文件和本地文件的相同位置做出了不同更改。当Git检测到时,会标记出冲突的部分,通常需要开发人员手动编辑代码,选择保留和合并哪些代码,最终手动解决冲突并提交合并后的代码。

5.3.2)本地仓库和git远程仓库差异原因

场景2:pull拉取代码
开发者A和开发者B都从远程仓库克隆了代码到本地。A开发者修改了一个代码文件后提交代码到git远程仓库成功,B开发者在本地修改了同一个代码文件的相同部分,这时本地仓库和git远程仓库的文件出现了差异,拉取会提示代码冲突。

5.3.3)模拟远程与本地冲突

开发者A修改了文件fileMergeTest.txt的第5行,然后将更改推送到远程仓库。如图:
在这里插入图片描述
同时,开发者B在本地也修改了文件fileMergeTest.txt的第5行如图:
在这里插入图片描述

开发者B尝试将远程仓库pull到本地。由于开发者A和开发者B修改了同一个文件的相同部分,开发者B在拉取时会遇到代码冲突。并提示自动合并失败,需要修复冲突,并提交最新修改后的版本
在这里插入图片描述
运行git status命令查看哪些文档文件存在冲突。Git会列出冲突的文件,标记为"both modified"。

开发者B在打开冲突的fileMergeTest.txt文件,会看到类似以下的标记:

<<<<<<< HEAD
// 开发者B的更改
=======
// 开发者A的更改
>>>>>>> 

如图:
在这里插入图片描述

5.3.4)手动编辑文件,解决冲突

①打开冲突文件,手动编辑以解决冲突:
查看冲突标记:在文件中查找冲突标记,通常是"<<<<<<<“,”=======",和 “>>>>>>>”, 这些标记将冲突的代码块分隔开来。

开发者B需要手动编辑fileMergeTest.txt文件,决定保留哪些更改,删除哪些更改,直到解决所有冲突。 我选择保留本地修改:
在这里插入图片描述

解决冲突后,开发者B使用git add fileMergeTest.txt命令提交到暂存区,使用git commit命令提交更改,然后使用git push命令将更改推送到远程仓库。
在这里插入图片描述
查看远程仓库,已经同步更新了
在这里插入图片描述
如果本地修改量很大:
先用git stash封存修改,再正常git pull了,git pull后,执行git stash pop将之前本地做的修改恢复到当前工作区。这个时候就会报代码冲突了,
打开冲突文件,手动编辑解决后,commit继续push

5.4)Git操作实例

5.4.1)develp分支只有自己在用,master是共同使用

前置步骤;推送至远程develp

本地develop分支开发完毕(修改代码)后先提交

git add .
git commit -m'messsage'
git push origin develop

推送完后比较本地develop分支和远程develop分支:
使用git fetch命令来获取远程仓库的最新信息:这里会获得所有分支的更新。即使只想比较develop分支,git fetch也会更新所有分支(develop,master等等)的信息,而不仅限于develop分支。

git fetch

使用git diff来比较本地develop分支和远程develop分支之间的差异(查看是否一致)。如果在运行git diff develop origin/develop命令时没有返回任何信息,代表本地develop分支和远程origin/develop分支之间没有差异。

git diff develop origin/develop
前置步骤:合并本地

切换到本地的 master 分支:

git checkout master

使用以下命令将本地的 develop 分支合并到 master 分支

git merge develop

Git会提示您输入合并的信息。可以按照以下步骤操作:

按下键盘上的i键,进入编辑模式,此时会显示一个光标。
输入您想要的合并信息,描述本次合并的目的和内容。
按下键盘上的Esc键,退出编辑模式。
输入 ’冒号‘ :wq,表示保存并退出编辑。
按下Enter键,完成合并操作。

IDEA拉取远程master并合并

打开IDEA这时候IDEA也处于master分支了,用IDEA将远程的master 分支最新代码拉下来:Idea使用git教程链接
在这里插入图片描述

①如果提示冲突了,就用idea merge一下,点击merge选项
在这里插入图片描述
②跳出如下页面,手动选择保存哪个代码
左边是本地代码,右边是远程仓库版本,中间代表要保留的版本
选择>>代表保存,选择x代表不保存
在这里插入图片描述

使用IDEA将本地分支master,合并到本地分支develop

命令行切换分支到develop分支

git checkout develop

提示please commit changes or stash them before you switch branches.意思是让切分支前commit一下。

git add .
git commit -m'切分支前的commit'
--commit后再次尝试切换分支。成功
git checkout develop

这时候在IDEA的界面中,也是develop分支了。打开Git工具窗口(通常在底部右下角会显示分支)。并选择master分支,选择Merge into Current(合并到当前分支)选项。
在这里插入图片描述

IDEA会执行合并操作,并将本地master分支的更改合并到本地develop分支中。在控制台可以查看,本次合并更新了哪些文件
在这里插入图片描述

再次推送至远程develop

这时候可以看一下本地develop哪些文件与远程develop不同

git diff develop origin/develop

将最新代码重新推送至远程develop

git add .
git commit -m 'message'
git push origin develop

5.4.2)develp是共同使用,master没人使用

先#从develop分支拉取
git fetch origin develop

切换到本地的 master 分支:

git checkout master

使用以下命令将本地的 develop 分支合并到 master 分支

git merge origin/develop

将本地合并后的代码push到远程的master
一般无法直接和远程合并,而是发起合并请求,会有项目经理在远程合并

  • 31
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值