上海房地产网站建设报价,常用网站推荐,基础微网站开发咨询,做网站需要学哪些软件最近想系统的回顾一下Git的使用#xff0c;如果只想快速的集成git到idea#xff0c;可以参考另一篇我的博客中的git部分 目录 版本管理工具简介Git安装与配置Git远程仓库配置 Git常用命令为常用命令配置别名(可选)Git忽略文件.gitignore一些概念*本地仓库操作删除仓库内容 *远…最近想系统的回顾一下Git的使用如果只想快速的集成git到idea可以参考另一篇我的博客中的git部分 目录 版本管理工具简介Git安装与配置Git远程仓库配置 Git常用命令为常用命令配置别名(可选)Git忽略文件.gitignore一些概念*本地仓库操作删除仓库内容 *远程仓库操作*分支操作分支及合并的冲突问题开发中分支使用原则与流程 标签操作 在IDEA中使用GitIDEA中配置Git获取Git仓库本地仓库操作远程仓库操作分支操作 版本管理工具简介
现在比较流行的版本管理工具是git ,但是实际上git 是近几年才发展起来的,可能有一些老的项目,还在用一些老的软件,比如svn。版本管理工具一般具有如下特性:
1) 能够记录历史版本,回退历史版本
2) 团队开发,方便代码合并SVN(SubVersion)
SVN是集中式版本控制系统版本库是集中放在中央服务器的.工作流程如下: 1.从中央服务器远程仓库下载代码 2.修改后将代码提交到中央服务器远程仓库
优点: 简单,易操作 缺点:所有代码必须放在中央服务器 1.服务器一旦宕机无法提交代码,即容错性较差 2.离线无法提交代码,无法及时记录我们的提交行为 Git
Git是分布式版本控制系统Distributed Version Control System简称 DVCS分为两种类型的仓库本地仓库和远程仓库 命令如下
clone克隆: 从远程仓库中克隆代码到本地仓库checkout 检出:从本地仓库中检出一个仓库分支然后进行修订add添加: 在提交前先将代码提交到暂存区commit提交: 提交到本地仓库。本地仓库中保存修改的各个历史版本fetch (抓取) 从远程库抓取到本地仓库不进行任何的合并动作一般操作比较少。pull (拉取) 从远程库拉到本地库自动进行合并(merge)然后放到到工作区相当于 fetchmergepush推送 : 修改完成后需要和团队成员共享代码时将代码推送到远程仓库 git和svn的区别
svn 是集中式版本控制工具,git 是分布式版本控制工具
svn 不支持离线提交,git有本地仓库支持离线提交代码Git安装与配置
下载地址 按照附件的 顺序直接下一步傻瓜式安装即可其中安装的过程中需要填写一个邮箱和用户名(任意即可)注意: 安装完毕请重启资源管理器,或者重启电脑 cmd里输入git --version即可查看版本可视化客户端有很多比如上面的TortoiseGit还有GitHub Desktop等本教程不介绍只介绍Git Bash与结合IDEA的使用
Git GuI:Git提供的图形界面工具 Git Bash: Git提供的命令行工具 当安装Git后首先要做的事情是设置用户名称和email地址,是非常重要的, 每次Git提交都会使用该用户信息
在电脑桌面任意位置右击(win11 shift右击)点击“Git Bash Here”以打开Git命令行窗口,这里相当于一个小的linux窗口学习linux命令也可以在这里学
#设置用户信息 git config --global user.name 用户名git config --global user.email 邮箱地址
#查看配置信息git config --listgit config user.name
#通过上面的命令设置的信息会保存在用户C:\Users\用户\.gitconfig文件中解决GitBash乱码问题
可配可不配
1.打开GitBash执行下面命令
git config --global core.quotepath false2.${git_home}/etc/bash.bashrc 文件最后加入下面两行
export LANGzh_CN.UTF-8
export LC_ALLzh_CN.UTF-8Git远程仓库配置
如何搭建Git远程仓库呢我们可以借助互联网上提供的一些代码托管服务来实现其中比较常用的有GitHub、码云、GitLab等。 gitHub是一个面向开源及私有软件项目的托管平台因为只支持Git 作为唯一的版本库格式进行托管故名gitHub 码云gitee是国内的一个代码托管平台由于服务器在国内所以相比于GitHub码云速度会更快 GitLab 是一个用于仓库管理系统的开源项目使用Git作为代码管理工具并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。
配置ssh协议
使用它们需要配置 ssh keys。需要识别出你推送的提交确实是你推送的而不是别人冒充的而Git支持SSH协议所以GitLab只要知道了你的公钥就可以确认只有你自己才能推送。当然Github、Gitee或GitLab允许你添加多个Key。假定你有若干电脑你一会儿在公司提交一会儿在家里提交只要把每台电脑的Key都添加到GitLab就可以在每台电脑上往GitLab推送了。
在git bash生成SSH公钥命令ssh-keygen -t rsa,命令执行后连敲3次回车键,如果公钥已经存在则自动覆盖。执行完后到系统盘users目录(win: C:\Users\用户\你的用户名.ssh查看生成的ssh文件。
登陆Github、Gitee或GitLab打开“settings”“SSH Keys”页面点“Add SSH Key”填上任意Title在Key文本框里粘贴id_rsa.pub文件的内容将公钥 id_rsa.pub添加到Github、Gitee或GitLab平台中即可。
测试配置是否成功如在Git Bash中输入ssh -T gitgithub.com或ssh -T gitgitee.com 当你第一次使用Git的命令连接GitHub时会得到一个警告这是因为Git使用SSH连接而SSH连接在第一次验证GitHub服务器的Key时需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器输入yes回车即可。Git会输出一个警告告诉你已经把GitHub的Key添加到本机的一个信任列表里了。 配置http/https协议 一般推荐使用ssh协议因为SSH 使用公钥加密不需要频繁输入用户名和密码避免了凭据泄露风险。配置好 SSH 密钥后后续操作无需重复输入凭据。在脚本和 CI/CD 环境中SSH 更易于无交互地操作。 使用 HTTP/HTTPS URL 来克隆仓库。例如git clone https://github.com/username/repo.git 这些命令后面都会介绍
如果你已经克隆了一个仓库并想更改其远程 URL 为 HTTPS可以使用以下命令 git remote set-url origin https://github.com/username/repo.git
需要修改“.git/config”文件内容注意这是当前项目中的配置文件不是用户目录下的 例如 虽然直接在 .git/config 文件中包含用户名和密码可以避免重复输入密码但出于安全考虑不推荐这种做法。 可以使用 Git Credential Manager 来安全地存储和管理凭据。也可以使用环境变量将用户名和密码存储在环境变量中并在需要时读取。例如编写脚本来设置远程 URL。 Git常用命令
为常用命令配置别名(可选)
有些常用的指令参数非常多每次都要输入好多参数我们可以使用别名。 1.打开用户目录创建.bashrc文件 部分windows系统不允许用户创建点号开头的文件可以打开gitBash,执行touch ~/.bashrc ~就表示用户目录和linux一样
2.在.bashrc文件中输入如下内容:
#用于输出git提交日志
alias git-loggit log --prettyoneline --all --graph --abbrev-commit
#用于输出当前目录所有文件及基本信息(包括隐藏文件)
alias llls -al3.打开gitBash执行source ~/.bashrc 即可使用了 在当前用户的git环境中都有效 Git忽略文件.gitignore
一般我们总会有些文件无需纳入Git 的管理也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件比如日志文件或者编译过程中创建的临时文件等。例如Java项目中编译的.class文件、开发工具自带的配置文件等。在这种情况下我们可以在工作目录中创建一个名为 .gitignore 的文件文件名称固定列出要忽略的文件模式。 注意该文件因为没有文件名没办法直接在windows目录下直接创建可以通过命令行Git Bash来touch创建。
常见规则写法有如下几种 1/mtk/ 过滤整个文件夹 2*.zip 过滤所有.zip文件 3/mtk/do.c 过滤某个具体文件 4) !index.php 不过滤具体某个文件 在文件中以#开头的都是注释。
下面是一个示例
.git
logs
rebel.xml
target/
!.mvn/wrapper/maven-wrapper.jar
log.path_IS_UNDEFINED
.DS_Store
offline_user.md
*.class### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr一些概念
Git本地操作的三个区域 工作区有一个隐藏目录.git这个不算工作区而是Git的版本库。Git的版本库里存了很多配置信息、日志信息和文件版本信息等其中最重要的就是称为stage或者叫index的暂存区还有Git为我们自动创建的第一个分支master以及指向master的一个指针叫HEAD。
Git工作区中的文件存在两种状态untracked 未跟踪未被纳入版本控制、tracked 已跟踪被纳入版本控制其中已跟踪分为以下三种
1Unmodified 未修改状态
2Modified 已修改状态
3Staged 已暂存状态 *本地仓库操作 裸仓库 (git init --bare)没有工作区主要用于远程共享和协作。 非裸仓库 (git init)包含工作区适合本地开发和版本控制操作。 如果你需要一个中央仓库来共享代码库使用裸仓库如果你需要一个本地开发环境使用非裸仓库 mkdir创建仓库并初始化让Git知道它需要来管理这个目录指令git init 初始化仓库不带工作区git init --bare 执行之后会在项目目录下创建“.git”的隐藏目录这个目录是Git所创建的不能删除也不能随意更改其中的内容。 也可以从远程仓库克隆命令格式git clone 远程仓库地址 常用命令总结
创建一个文件到工作区 touch 文件名
查看当前状态git status 红色表示文件状态不在暂存区和本地仓库 绿色表示文件状态在暂存区但不在本地仓库 nothing表示工作区和本地仓库同步
添加到暂存区(缓存区)git add 文件名 也可以同时添加多个文件:git add 文件名1 文件名2 文件名3 … 也可以添加所有新文件到暂存区git add -A或git add . git add . 不处理被删除的文件而 git add -A 会将被删除的文件从暂存区中移除。 git add . 只会处理当前目录下的文件而 git add -A 会递归地处理所有目录下的文件 一般来说如果你想要确保所有修改、新建和删除的文件都被正确添加到暂存区推荐使用 git add -A 命令。 把暂存区的文件提交至版本库git commit -m 注释内容
查看工作区的文件状态 (list) ls 查看暂存区的状态git ls-files
清空命令窗口clear:或ctrll
每次提交都会产生一个版本号提交时设置的message、提交人、邮箱、提交时间等信息都会记录到日志中 查看提交日志(log) git log [option] 行数太多时键入q退出查看 options –all 显示所有分支 –prettyoneline 将提交信息显示为一行 –abbrev-commit 使得输出的commitId更简短 –graph 以图的形式显示 在上面配置的别名git-log 就包含了这些参数所以后续可以直接使用指令git-log
版本回退or切换 git reset 将暂存区的文件取消暂存或者是切换到指定版本 取消暂存命令格式git reset 文件名 切换到指定版本命令格式git reset --hard 版本号 git reset --hard HEAD^ 上一个版本就是HEAD^上上一个版本就是HEAD^^ 进行版本回退时不需要使用完整的哈希字符串前七位即可 每次Git提交都会产生新的版本号可以使用git log 指令查看通过版本号就可以回到历史版本 回退到了某个版本关掉了电脑第二天早上就后悔了想恢复到新版本怎么办找不到新版本的commit id怎么办 git reflog这个指令可以看到已经删除的提交记录查看所有的操作记录以便确定要回到未来的哪个版本 删除仓库内容
Git跟踪并管理的是修改而非文件。
你会问什么是修改比如你新增了一行这就是一个修改删除了一行也是一个修改更改了某些字符也是一个修改删了一些又加了一些也是一个修改甚至创建一个新文件也算一个修改。比如我们在当前工作区中修改readme的内容此时git status就会提醒修改 一般情况下你通常直接在文件管理器中把没用的文件删了或者用rm命令删了rm readme.txt
这个时候Git知道你删除了文件因此工作区和版本库就不一致了git status命令会立刻告诉你哪些文件被删除了 现在你有两个选择一是确实要从版本库中删除该文件那就用命令git rm删掉并且git commit提交 另一种情况是删错了因为版本库里还有呢所以可以很轻松地把误删的文件恢复到最新版本git checkout -- 文件名 git checkout其实是用版本库里的版本替换工作区的版本无论工作区是修改还是删除都可以“一键还原”。注意从来没有被添加到版本库就被删除的文件是无法恢复的 git checkout不仅用于还原文件还可以用于切换分支例如要切换到名为 feature 的分支git checkout feature 也可以使用 git checkout 来创建新分支并立即切换到该分支git checkout -b new-feature 可以使用 git checkout 切换到某个特定的提交commit。这使你处于“分离头指针”状态不属于任何分支而是处于特定提交的状态。例如要切换到某个提交的哈希值为 abcdef 的状态 git checkout abcdef 如果你只想在当前工作目录中恢复特定文件或目录到某个特定分支的状态也可以使用它比如将 file 恢复到 branch 分支的状态 git checkout branch -- file *远程仓库操作
前面执行的命令操作都是针对的本地仓库本节我们会学习关于远程仓库的一些操作该节会涉及到一些分支操作需要结合下一章看具体命令包括 git remote 查看远程仓库 git remote add 添加远程仓库 git clone 从远程仓库克隆 git pull 从远程仓库拉取 git push 推送到远程仓库 如果要查看已经配置的远程仓库服务器可以执行 git remote 命令它会列出每一个远程服务器的简称。 如果已经克隆了远程仓库那么至少应该能看到 origin 这是 Git 克隆的仓库服务器的默认名字。 可以通过-v参数查看远程仓库更加详细的信息。本地仓库配置的远程仓库都需要一个简称后续在和远程仓库交互时会使用到这个简称 添加远程仓库命令格式git remote add 简称 远程仓库地址 注意一个本地仓库可以关联多个远程仓库 如果你想获得一份已经存在了的 Git 远程仓库的拷贝这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据包括日志信息、历史记录等。 克隆仓库的命令格式 git clone 远程仓库地址 [本地目录] 本地目录可以省略会自动生成一个目录 将本地仓库当前分支的内容推送到远程仓库的对应分支命令格式git push 远程仓库简称 远程仓库分支名称 git push origin feature:feature将把本地的 feature 分支推送到远程仓库的 origin 中的 feature 分支 默认推送的是当前切换到的本地仓库分支 查看分支关联关系我们可以分支章节介绍的git branch -vv 命令
git push -u origin feature 用 -u 参数(–set-upstream的简写)以后再次推送时Git会记住你推送到的远程分支允许你只需键入 git push 而不必每次都指定远程分支 -f参数表示强制覆盖
一个仓库可以有多个分支默认情况下在创建仓库后会自动创建一个master分支,后面会讲解分支相关的操作 在使用git push命令将本地文件推送至码云远程仓库时如果是第一次操作需要进行身份认证认证通过才可以推送如下 注意上面的用户名和密码对应的就是我们在码云上注册的用户名和密码认证通过后会将用户名和密码保存到windows系统中如下图后续再推送则无需重复输入用户名和密码。 推送完成后可以到远程仓库中查看文件的变化。 从远程仓库获取最新版本并合并到本地仓库,命令格式git pull 远程仓库简称 分支名称
拉取指令就是将远端仓库的修改拉到本地并自动进行合并 即pull fetchmerge 其中 merge是分支合并操作 分支章节会介绍 git fetch [remote name] [branch name] 抓取指令就是将仓库里的更新都抓取到本地不会进行合并,如果不指定远端名称和分支名则抓取所有分支 注意如果当前本地仓库不是从远程仓库克隆而是本地创建的仓库并且仓库中存在文件此时再从远程仓库拉取文件的时候会报错fatal: refusing to merge unrelated histories 解决此问题可以在git pull命令后加入参数–allow-unrelated-histories *分支操作
使用分支意味着你可以把你的工作从开发主线上分离开来来进行重大的Bug修改、开发新的功能以免影响开发主线。本地仓库和远程仓库中都有分支同一个仓库可以有多个分支各个分支相互独立互不干扰。通过git init 命令创建本地仓库时默认会创建一个master分支。 本节我们会学习关于分支的相关命令具体命令如下 查看分支命令git branch git branch 列出所有本地分支git branch -r 列出所有远程分支git branch -a 列出所有本地分支和远程分支 查看关联关系我们可以使用 git branch -vv 命令 创建分支命令格式git branch 分支名称 一个仓库中可以有多个分支切换分支命令格式git checkout 分支名称 创建新分支并立即切换到该分支git checkout -b new-feature 注意在命令行中会显示出当前所在分支如下图所示。 推送至远程仓库分支命令格式git push 远程仓库简称 分支名称 推送完成后可以查看远程仓库 合并分支就是将两个分支的文件进行合并处理命令格式git merge 分支名称 注意分支合并时需注意合并的方向如下图所示在Master分支执行操作结果就是将dev分支的内容合并到Master分支。
先在dev分支下的readme文件中新增一行并提交本地
切换到master分支下观察readme文件 将dev分支的内容与master分支合并 删除分支.不能删除当前分支只能删除其他分支即在删除分支的时候一定要先退出要删除的分支然后才能删除。 git branch -d 分支名称 删除分支时需要做各种检查 git branch -D 分支名称 不做任何检查强制删除 分支及合并的冲突问题
在一段时间A、B用户修改了同一个文件且修改了同一行位置的代码此时会发生合并冲突。 A用户在本地修改代码后优先推送到远程仓库此时B用户在本地修订代码提交到本地仓库后也需要推送到远程仓库此时B用户晚于A用户故需要先拉取远程仓库的提交经过合并后才能推送到远端分支,如下图所示。 新手上路小技巧上班第一件事先git pull可以在一定程度上避免冲突的产生。每天下班前要做的是git push将本地代码提交到线上仓库。
在B用户拉取代码时因为A、B用户同一段时间修改了同一个文件的相同位置代码故可能会发生合并冲突。此时解决思路如下。
当两个分支上对文件的修改可能会存在冲突例如同时修改了同一个文件的同一行这时就需要手动解决冲突解决冲突步骤如下
处理文件中冲突的地方将解决完冲突的文件加入暂存区(add)提交到仓库(commit) 冲突部分的内容处理如下所示 开发中分支使用原则与流程
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能以免影响开发主线。 在开发中一般有如下分支使用原则与流程
master 生产 分支 线上分支主分支中小规模项目作为线上运行的应用对应的分支develop开发分支 是从master创建的分支一般作为开发部门的主要开发分支如果没有其他并行开发不同期上线要求都可以在此版本进行开发阶段开发完成后需要是合并到master分支,准备上线。feature/xxxx分支 从develop创建的分支一般是同期并行开发但不同期上线时创建的分支分支上的研发任务完成后合并到develop分支。hotfix/xxxx分支 从master派生的分支一般作为线上bug修复使用修复完成后需要合并到master、test、develop分支。还有一些其他分支在此不再详述例如test分支用于代码测试、pre分支预上线分支等等。 标签操作
Git 中的标签指的是某个分支某个特定时间点的状态。通过标签可以很方便的切换到标记时的状态。比较有代表性的是人们会使用这个功能来标记发布结点v1.0 、v1.2等。下面是mybatis-plus的标签 查看标签命令git tag 创建标签命令git tag 标签名 将标签推送至远程仓库命令git push 远程仓库简称 标签名 推送完成后可以在远程仓库中查看标签。 检出标签时需要新建一个分支来指向某个标签检出标签的命令格式git checkout -b 分支名 标签名 在IDEA中使用Git
通过Git命令可以完成Git相关操作为了简化操作过程我们可以在IEDA中配置Git配置好后就可以在IDEA中通过图形化的方式来操作Git。
当然也可以IDEA集成GitBash作为Terminal IDEA中配置Git
在IDEA中使用Git本质上还是使用的本地安装的Git软件所以需要提前安装好Git并在IDEA中配置Git。git.exeGit安装目录下的可执行文件前面执行的git命令其实就是执行的这个文件.Git安装目录 IDEA中的配置 如果Git安装在默认目录中C:\Program Files\Git则IDEA中无需再手动配置直接就可以使用。 获取Git仓库
在IDEA中获取Git仓库有两种方式
本地初始化仓库本质就是执行 git init 命令从远程仓库克隆本质就是执行 git clone 命令
本地初始化仓库
在IDEA中通过如下操作可以在本地初始化一个本地仓库其实底层就是执行的 git init 命令。操作过程如下
1依次选择菜单【VCS】—【Import into Version Control】—【Create Git Repository】 2在弹出的【Create Git Repository】对话框中选择当前项目根目录点击【OK】按钮 操作完成后可以看到当前项目根目录下出现了.git隐藏目录,可以在IDEA的工具栏中看到Git的相关操作图标: 从远程仓库克隆
在IDEA中从远程仓库克隆本质就是执行的 git clone 命令具体操作过程如下.1在IDEA开始窗口中点击【Get from Version Control】 2在弹出的【Get from Version Control】窗口中输入远程仓库的URL地址和对应的本地仓库存放目录点击【Clone】按钮进行仓库克隆操作 本地仓库操作
本地仓库操作
将文件加入暂存区本质就是执行 git add 命令将暂存区的文件提交到版本库本质就是执行 git commit 命令查看日志本质就是执行 git log 命令
将文件加入暂存区
当在Git工作区新增文件或者对已有文件修改后就需要将文件的修改加入暂存区具体操作如下 将暂存区文件提交到版本库
将暂存区文件提交到版本库可以选择一个文件进行提交也可以选择整个项目提交多个文件。在IEDA中对文件的提交进行了简化操作也就是如果文件修改后无需再加入暂存区可以直接提交。
1提交一个文件 可以看到如果选中一个文件提交则菜单名称为【Commit File…】
2提交多个文件 可以看到如果提交多个文件则菜单名称为【Commit Directory…】由于提交操作属于高频操作所以为了进一步方便操作在IDEA的工具栏中提供了提交操作的快捷按钮 查看日志
查看日志既可以查看整个仓库的提交日志也可以查看某个文件的提交日志。
1查看整个项目的提交日志 2查看某个文件的提交日志 远程仓库操作
远程仓库操作
查看远程仓库本质就是执行 git remote 命令添加远程仓库本质就是执行 git remote add 命令推送至远程仓库本质就是执行 git push 命令从远程仓库拉取本质就是执行 git pull 命令
查看远程仓库 添加远程仓库
一个本地仓库可以配置多个远程仓库在【Git Remotes】窗口中点击【】来添加一个新的远程仓库 推送至远程仓库 在弹出的【Push Commits】窗口中可以看到本次推送的文件点击【Push】按钮即可推送至远程仓库 由于推送至远程仓库操作属于高频操作所以可以通过IDEA工具栏中的提交快捷按钮同时完成提交和推送 从远程仓库拉取 由于从远程仓库拉取文件属于高频操作所以在IDEA的工具栏中提供了对应的快捷按钮 分支操作
分支操作
查看分支本质就是执行 git branch 命令创建分支本质就是执行 git branch 分支名 命令切换分支本质就是执行 git checkout 命令将分支推送到远程仓库本质就是执行 git push 命令合并分支本质就是执行 git merge 命令
查看分支 在弹出的窗口中可以看到本地分支和远程分支 由于分支操作属于高频操作所以在IDEA的状态栏中提供了分支操作的快捷按钮 点击【master】快捷按钮即可弹出【Git Branches】分支窗口 创建分支
在【Git Branches】分支窗口中点击【New Branch】弹出如下窗口 在弹出的【Create New Branch】窗口中输入新分支的名称点击【Create】按钮完成分支创建 切换分支 将分支推送到远程仓库 合并分支 ok 写完了 有些地方写的可能比较简单 这里贴几篇我在写这篇博客之前参考的比较多的几个文章 写的都还可以 本文主要是我的个人回忆总结 如果有什么写的不好的地方 也可以看看这些文章 Git入门到精通全套教程涵盖GitHub\Gitee码云 超级完整的 Git的下载、安装、配置与使用 以及命令 实现在IDEA中将项目上传至github远端仓库