Git学习记录
文章目录
- 一、版本控制工具
- 1.1、集中式版本控制工具
- 1.2、分布式版本控制工具
- 二、Git安装与常用命令
- 2.1、Git环境配置
- 2.2、基础操作指令
- 2.2、分支
- 2.2.1、基本指令
- 2.2.2、合并冲突
- 三、Git远程仓库
- 3.1、添加和查看远程仓库
- 3.2、推送到远程仓库
- 3.3、从远程仓库克隆
- 3.4、从远程仓库中抓取和拉取
- 3.5、解决合并冲突
- 四、在Idea中使用Git
- 4.1、设置远程仓库
- 4.2、git clone
- 4.3、git merge
一、版本控制工具
1.1、集中式版本控制工具
集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。
举例:SVN和CVS
1.2、分布式版本控制工具
分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,不需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的
修改了。举例:Git。
Git工作流程图:
- clone(克隆): 从远程仓库中克隆代码到本地仓库。
- checkout (检出):从本地仓库中检出一个仓库分支到工作区,然后进行修订。
- add(添加): 在提交前先将代码提交到暂存区。
- commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本。
- fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
- pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge。
- push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库。
二、Git安装与常用命令
2.1、Git环境配置
安装完成后,右键会出现这两个选项:
- Git GUI:Git提供的图形界面工具。
- Git Bash:Git提供的命令行工具。
安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。
查看git所有配置信息:
git config -l
清除历史命令:
clear
查看用户配置:
git config --global --list
设置用户名:
git config --global user.name "用户名"
设置邮箱:
git config --global user.email 邮箱
2.2、基础操作指令
1.桌面上随便建一个文件夹:
2.进入文件夹,右键->git bash,执行git init
,就创建了一个本地仓库
接下来就可以尝试git的各种命令了,下图是从右向左看的,仓库是本地仓库:
git add
:工作区 --> 暂存区git add .
:将所有修改加入暂存区git commit
:暂存区 --> 本地仓库git commit -m '注释内容'
:提交暂存区内容到本地仓库的当前分支git status
:查看的修改的状态(暂存区、工作区)git reset --hard commitID
:版本切换(commitID 可以使用git log
指令查看)git log
:查看提交记录
如上图,有两次commit,想回到第一次commit后的状态,就执行命令,此时回到了第一次commit后的状态(图中的git -log是给一长串命令起的别名)。如果又想回到第二次commit后的状态,可以用git refllg
命令查看提交记录,然后执行git reset --hard commitID
就可以了。
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore
的文件(文件名称固定),列出要忽略的文件模式。
2.2、分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
2.2.1、基本指令
git branch
:查看本地分支git branch 分支名
:创建本地分支
git checkout 分支名
:切换分支
git checkout -b 分支名
:直接切换到一个不存在的分支(创建并切换)git merge 分支名称
:合并分支
2.2.2、合并冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突。master和dev分支都有file01文件,master分支上写入update count = 2
,dev分支上写入update count = 3
,此时将dev合并到master就会出行冲突:
- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(add)
- 提交到仓库(commit)
三、Git远程仓库
3.1、添加和查看远程仓库
此操作是先初始化本地库,然后与已创建的远程库进行对接:git remote add <远端名称> <仓库路径>
- 远端名称,默认是
origin
,取决于远端服务器设置。 - 仓库路径,从远端服务器获取此URL。
3.2、推送到远程仓库
git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ]
-f
:表示强制覆盖,如果线上代码和推送的代码冲突,以推送的为准,一般公司里都会禁用。--set-upstream
:推送到远端的同时并且建立起本地分支和远端分支的关联关系,后续就知道需要把本地分支的代码推送到远端的哪个分支了。
如果当前分支已经和远端分支关联,则可以省略分支名和远端名,直接git push
将本地分支推送到已关联的远端分支。
3.3、从远程仓库克隆
一般在公司里,是由具有权限的管理人员创建好远程仓库和开发组件的基本框架,对应的开发人员需要将此组件从远程仓库克隆到本地后再进行开发。命令是:git clone <仓库路径> [本地目录]
,【本地目录】可以省略,会自动生成一个目录。
3.4、从远程仓库中抓取和拉取
远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
git fetch [remote name] [branch name]
:抓取指令就是将仓库里的更新都抓取到本地,不会进行合并。如果需要将远程分支合并到本地分支,还需要执行git merge
命令。git pull [remote name] [branch name]
:拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于git fetch + git merge。
3.5、解决合并冲突
在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支,如下图所示:
在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同,在此不再赘述(本质就是由开发人员决定要保留谁的代码或者更改成想要的结果)。
四、在Idea中使用Git
4.1、设置远程仓库
将上图中在gitee中创建的仓库的SSH地址,在git push时配置。
4.2、git clone
在gitee中复制目标仓库的SSH地址:
idea中找到git clone功能:
将SSH地址粘贴即可: