栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

git基础

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

git基础

文章目录
  • Git基础一
    • git命令操作
      • 本地库操作
        • 本地库初始化
        • 基本操作
          • 查看git当前状态
          • 将工作区中的内容add到暂存区
          • 将暂存区中的文件rm出去
          • 从暂存区commit到本地仓库
          • 版本的前进与后退
          • 比较文件差异
        • 分支管理
          • 查看所有的分支
          • 创建分支
          • 切换分支
          • 合并分支
          • 解决冲突
      • 远程库操作
        • 给github项目地址起别名
          • 查看地址别名 git remote -V
          • 添加地址别名 git remote add
        • 推送内容到远程库
        • 克隆远程库中的内容
        • 将远程库中的内容pull到本地库
          • git fetch下载内容
          • git merge 合并内容
          • 直接 pull 拉取远程库
        • 解决 pull 冲突
      • 使用SSH免密登录

Git基础一

git的优势:

  • 大部分操作在本地完成(也就是本地就有版本库),不需要联网
  • 完整性的保证(它会对每一次提交进行哈希)
  • 在git的版本库中会尽可能的添加数据,而不是删除数据
  • 分支操作非常流畅快捷
  • 与linux命令全面兼容

git有这么几个区:

  • 工作区:就是你的项目文件中(写代码的地方,你上传的时候不是需要右击你的项目然后git bush吗)
  • 暂存区:你在git窗口中使用命令 git add 就会将你的工作区暂存起来(我的理解就是个双缓冲),但是这时你的工作区中的内容并没有上传到本地库中。
  • 本地库:在你使用 git add 命令后,使用 git commit 命令将暂存区中的内容上传到本地库中。本地库保存着所有你上传的历史版本。(所以我将暂存区理解成一个双缓冲的作用)

git与github的区别:

  • git 是一个版本控制软件,它的作用就是控制历史版本
  • github 是一个代码托管中心,它的作用就是存储历史版本到服务器上,维护远程库。但是github并没有git的一些操作。是git与github进行交互将代码存到远程服务器上的。
    • 例如在局域网环境下,我们可以使用gitlab作为代码托管中心
    • 在外网环境下,我们可以使用github、码云作为代码托管中心

本地库与远程库有两种个交互方式,分别对应本地团队开发、多团队开发两种场景。

git命令操作 本地库操作 本地库初始化
  1. 初始化命令初始化(创建)一个本地仓库:git init。 初始化仓库后会出现一个隐藏文件.git,这个文件就是这个工作空间的本地仓库
git init

需要注意的是!.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。如果本地库乱了,git就不能正常帮我们进行版本控制了!

  1. 设置签名:使用命令 git config

    git config user.name xxx
    git config user.email xxxxx
    

    形式:(主要作用是使用用户名与Email地址区分不同开发人员的身份)

    • 用户名
    • Email地址
    • 注意!在登录远程代码仓库的时候也需要用户名密码,但是那个用户名密码与这里的签名是一点关系都没有的!

    在使用命令时,我们使用参数可以将它们分为两个级别

    • 命令:git config 项目级别/仓库级别:在项目中设置的签名的作用与只是这个项目,其他项目你的签名登不进去
    • 命令:git config --global系统用户级别:在整个系统中设置的签名的作用域,对所有仓库都可以登进去
    • 优先级:就近原则:两个签名都有的话,项目级别优先于系统用户级别

仓库级别用户信息保存在 ./git/config 下,使用cat查看就可以

系统级别用户信息保存在 用户家目录下的 .gitconfig 中

基本操作 查看git当前状态
git status

查看你git是在主干还是哪个分支上的

查看你有没有commit文件

查看你是否将文件git add到暂存区

将工作区中的内容add到暂存区
git add .
git add 

# 点为添加所有文件到暂存区,为添加某个文件到暂存区

首先在添加之前必须git init一下保证初始化存在一个本地仓库,暂存区就是个缓存,只有将项目存在暂存区才能进行commit操作。

将暂存区中的文件rm出去
git rm --cache .
git rm --cache 

# 点为移除暂存区中所有文件,为移除暂存区中的某个文件

< file >为你要移出去的暂存区中的文件

从暂存区commit到本地仓库
git commit

# 提交某个文件
git commit 

# 在提交文件的时候就附带添加信息,这样提交后就不会弹出让vim让你写message了
git commit -m "some message" 

在git commit后会出现这个vim界面,就是让你添加一些信息,相当于提交时的注释!

按i向里面写一些信息,然后保存退出

以上就是提交后显示的信息了

[master (root-commit)2xxx],master就是你提交到主干文件中了。root-commit是你第一次提交。2xxxx那堆数字就是你提交时的版本号

first commit 就是你提交时添加的那个信息message

版本的前进与后退
# 查看历史提交(也就是查看本地库中的版本迭代信息)
git log

# 每个版本信息只输出一行(显示head位置,提交message)
# 最好用,拥有移动版本的移动次数
git reflog

# 每个版本信息只输出一行
git log --pretty=oneline

# 每个版本信息只输出一行(哈希值不全显示)
git log --oneline

在log中commit后面是一个哈希值索引,提交的版本是以键值对进行存储的。

HEAD是一个指针,指向的当前版本,当移动head的时候就可以将当前工作区为历史版本的工作区

版本历史与回退

  1. 基于索引 {推荐}:

    # 索引值可以是长的也可以是短的
    git reset --hard 索引值
    

git reflog拥有历史的版本移动信息,其他的git更好的查看当前是哪个版本!

reset三个参数对比:

  • --soft

    仅仅在本地库移动指针

  • --mixed

    在本地库移动指针,并且重置暂存区

  • --hard

    在本地库移动指针,并且重置工作区和暂存区

比较文件差异
# 和暂存区的文件进行比较
git diff 

我修改了hello.txt中的最后一行,添加了几个a。可以看出红色部分为之前信息,绿色部分为修改后的信息。由于git是以行为单位的,所以相当于删除了原行后添加新行。

当使用了git add命令后使用git diff发现没有差异了,所以此命令时工作区文件与暂存区文件进行比较。暂存区存着修改前的文件,工作区里的文件修改了。

# 和本地库中的某一个文件进行比较
git diff <记录索引> 

我第二次提交的记录中是没有修改过文件的记录,change那次是修改后提交的记录(也是当前记录)。所以与第二次记录进行比较的时候可以看出差异

分支管理
master --主干分支

# 分支的命名以feature为开头(不是必须的)
feature_model --一个模型分支

分支用于分模块开发。例如这个小组做的开发失败了,不影响另一个小组。

分支从主干分出来的时候,是拷贝一份主干的内容作为分支的初始化内容。

查看所有的分支
git branch -v
创建分支
git branch 

切换分支
git checkout 

合并分支
  1. 分支合并需要切回接受合并的分支,例如你要将一个分支合并回主干,那么你需要切换回主干才能合并

  2. 使用merge命令即可

    # 切回接收合并的分支,例如master,将merge_branch_name分支合并到master里
    git merge 
    
解决冲突

在不同分支里修改同一个文件的同一行,在合并时会产生冲突

他会提示你自动合并失败,需要手动合并,并且当前的状态处于合并过程中的状态(既不是合并前的文件,也不是合并后的文件)

除了我们修改的内容,还增加了一些特殊标记

# 这是当前版本内容    xxxxx
<<<<<<<< HEAD
xxxxx
=======
# 从等号到>>>这个符号是合并内容(master要合并到当前版本)
xxxxx
>>>>>>>> master

然后我们手动将冲突的内容选择一个,另一个删除掉,保存退出

然后git add提交上去git commit

远程库操作

单团队开发

多团队开发

给github项目地址起别名

由于github上项目名特别长,所以我们需要将地址存储为一个变量,这样我们每次使用变量进行连接就可以了,不需要输入特别长的地址路径。

查看地址别名 git remote -V
git remote -V
添加地址别名 git remote add
git remote add origin https://github.com/Panda-eat-meat/yctest.git


$ git remote -v
origin  https://github.com/Panda-eat-meat/yctest.git (fetch)
origin  https://github.com/Panda-eat-meat/yctest.git (push)

这将http那堆地址起一个别名叫origin

  • fetch 指明是使用这个地址进行取回(pull)
  • push 指明的是使用这个地址进行推送(push)
推送内容到远程库
git push origin master

# 使用git push命令
# origin表明你要推送的地址
# master表明你推送到远程库的哪个分支下

在push命令之后会让你登录github的账号密码

克隆远程库中的内容
git clone http://xxxx
# 使用 git clone命令
# http://xxx 表明你要克隆的远程库的地址

在github上所有项目都是开源的(除非你付费私密),所以clone命令不需要验证。而且克隆命令用于第一次下载远程库,也就是本地没有相关项目的内容,第一次参加项目。如果本地库中有远程库中的内容则需要使用命令 pull 了

克隆命令的另外作用(也就是一个克隆命令额外做了哪些东西):

  • 完整的将远程库克隆到本地
  • 创建 origin 远程地址别名(不用我们手动创建)
  • 初始化本地库(不用我们手动初始化)
将远程库中的内容pull到本地库

pull操作分为 fetch 和 merge。

fetch与clone都是下载远程库中的内容,但是fetch只是从远程库中下载下来,下载下来后并不会修改本地库中的内容。

git fetch下载内容
git fetch origin master
# git fetch 下载内容命令
# origin 远程库地址变量
# master 远程库中的分支
  • 查看 fetch 中的内容

    # 首先需要切换到fetch下来的分支中
    git checkout 'origin/master'
    # git checkout 切换分支命令
    # 'origin/master' fetch下的内容在这个分支中
    

    你 fetch 下的内容都在这个分支中

git merge 合并内容

现在的分支是本地的master(就叫master)

# 首先你得切换到待合并的分支中,现在需要合并的分支就是本地的master
git merge origin/master

# git merge 合并命令操作
# origin/master 合并的分支
直接 pull 拉取远程库
git push origin master
# git push 拉取+合并命令
# origin 远程库地址
# master 远程库分支

pull = fetch + merge

解决 pull 冲突

在push的时候,如果说你的内容和远程库中的内容不同,直接上传会覆盖掉远程库中的很多内容,所以git在你push的时候,会先让你pull下远程库中的东西,然后才让你push上去。

但是说你 pull 下的内容和你本地库中有冲突,那么就会让你手动的选择哪些内容留下!

pull解决冲突的方法与merge命令的操作相同

你删除冲突内容然后git add、git commit

使用SSH免密登录

使用http地址每次push的时候需要登录,但是使用ssh就不需要。

首先创建一个ssh的地址别名

git remote add origin_ssh ssh地址

在 git 中使用ssh有些局限性,就是登录的时候git只能存储一个ssh

如果我们在设置ssh之前,设置过ssh 需要删除ssh。

# 首先进入用户家目录
cd ~
# 然后删除ssh文件
rm -r .ssh/

然后重新生成一个ssh文件

ssh-keygen -t rsa -C github邮箱地址

使用该命令会生成两个文件:id_rsa、id_rsa.pub

我们查看生成的ssh密匙

# ssh密匙存在id_rsa.pub中
cd ~/.ssh
cat id_rsa.pub

然后就会显示密匙,将密匙存在github中的SSH andGPG keys -> New SSH key将密匙存到key中titile随便写。

然后下次push的时候就可以不用登陆了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276547.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号