首页 > 其他分享 >Git使用

Git使用

时间:2022-10-20 21:23:19浏览次数:69  
标签:文件 git Git master 使用 远程 分支

Git概述

Git是一个免费的,开源分布式版本控制系统

Git易于学习,占地小,性能快。性能优于Subversion,CVS等版本控制工具。

Git最突出的特性是分支特性。

版本控制:

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。

版本控制最重要的是可以记录文件修改历史记录,从而让用户可以查看历史版本,方便切换。

版本控制是从个人过渡到团队协作!所必需的。

集中式版本控制工具

用的最多的是:CVS,SVN,VSS等

他们都有一个单一集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或提交更新。

优点:

  1. 每个人都可以在一定程度上看到项目中其他人在做什么
  2. 管理员可以轻松掌握每个开发者的权限

缺点:

  1. 如果中央服务器损坏,就无法协同工作。

分布式版本控制工具

常用的是:Git,Mercurial等

分布式版本控制工具,每个电脑都有一个本地库,相当于每台电脑都存有全部的版本信息

可以从远程代码托管库把代码克隆下来进行版本控制,然后再推送上去。

优点

  1. 服务器断网情况下也可开发(因为版本控制是在本地进行的)
  2. 每个客户端都有完整的项目(包括项目的历史记录,更加安全)

image

Git工作机制

image

Git在本地主要分为三个区域:

  1. 工作区

    存放代码的地方

    一般我们创建了Git管理目录后,这个目录就叫工作区。

  2. 暂存区

    用来临时存储的区域

    在工作区写了代码后,让git知道我们在其中写了代码。

  3. 本地库

    历史版本记录存储区

    一旦代码进入本地库,就会生成历史版本记录!

    此时除非把目录删了!要不然记录无法消除!!

工作区---git add--->暂存区--->git commit--->本地库

一般在本地库后,还会推送到远程库中,即代码托管中心。

代码托管中心

代码托管中心就是基于网络服务器的远程代码仓库

一般根据网络分为:

局域网:

GitLab

互联网:

GitHub(国外)

Gitee码云(国内)

Git安装

  1. Git官网下载安装包。
  2. 选择安装路径时路径不能有中文!
  3. 安装选项的解释:

image

  1. 剩下的默认下一步即可。
  2. 安装完后,设置你提交的用户名字,和用户邮箱

安装完git后俩个工具

Git GUI :Git提供的图形化工具

Git Bash:命令行模式的git

安装完Git之后首先要做的事是设置用户名和email地址!因为每次Git提交都会使用该用户信息。

在GitBash中和Linux的命令是通用的!

Git的一些配置

  1. 添加命令的别名

    在Git安装目录下的etc目录中找到bash.bashrc文件

    在第22行添加

    source ~/.bash_profile
    

    在系统家目录下找到.bash_profile文件

    然后添加对应命令的别名即可

    添加方式

    alias 命令='命令别名'
    
  2. 防止Git中文报错的方式

    打开GitBash执行

    git config --global core.quotepath false
    

    在Git的安装目录下etc目录中 bash.bashrc文件

    在最后俩行下添加

    export LANG="zh_CN.UTF-8"
    export LC_ALL="zh_CB.UTF-8"
    

Git常用命令

设置用户名

git config --global user.name 用户名

设置用户邮箱

git config --global user.email 用户邮箱

这俩个设置可以用户目录下的

.gitconfig文件中查看到

首次安装Git必须设置用户名和用户邮箱不然提交代码会报错

这里的用户签名和登录GitHub账号没有任何关系,只是给本地看的

初始化本地库

git init

要让Git管理目录必须先初始化目录。

在目录内右键启动GitBash后执行命令即可

也可以cd命令跳转过去

当目录生成了 .git这个隐藏目录说明初始化成功了

查看本地库状态

git status

image

首次查看会出现三行内容

第一行On branch master代表现在所处master分支

第二行 No commits yet代表没有提交过东西

第三行 nothing to commit代表没有东西需要提交

当我们在Git管理的目录中创建了一个文件后再次执行次命令会出现

image

Untracked files(未被追踪的文件)

红色的hello.txt代表文件虽然有,但并未被git追踪。

添加暂存区

git add 文件名

将未被追踪的文件追踪

或者是将工作区的文件添加进暂存区

可以用通配符

git add .

将所有文件添加到暂存区,这里的所有文件指的是所有未被追踪的文件。

此时执行git status

image

Changes to be committed代表需要被提交的文件

绿色代表文件被追踪了

删除处于暂存区的文件

git rm --cached 文件

提交到本地库

git commit -m '日志信息' 文件名

将暂存区的文件提交到本地库形成一个记录

如果不加-m

git也会跳出一个文本手动添加提交日志也可

我们可以不加文件名,就默认将处于暂存区的文件全部提交。

image

注意下:64c40b4是这次提交记录的提交id用来切换版本用的!

此时查看本地库状态

image

在主干分支

没有东西可提交,工作树很干净。

但是!我们修改了文件之后,再次执行git status命令可发现这个文件没有被添加到暂存区

我们再次git add即可。

git是以行来管理文件的,我们修改了一行他会提示一行新增一行删除。

查看历史版本

查看版本信息

git reflog

image

前面黄色的字符串是版本号的缩写,用来切换版本用。

(HEAD->master)代表指针指向master分支,同时代表当前所处版本

HEAD@{0}

HEAD@{1}

查看详细的版本信息

git log

image

一般会加上一堆参数来简化这个信息,同时加上命令的别名简化。

常用选项

--all 显示所有分支

--pretty=online 将提交信息显示未一行

--abbrey-commit 让输出的commitld更加简短

--graph 图形化显示

一般全部加上

切换版本

git reset --hard 版本号

一旦切换版本后再次查看历史版本

image

出现:reset:moving to 64c40b4

代表指针转移到了第一次提交这个版本。

Git切换版本底层就是移动指针:具体原理如下

初始状态,head指针指向master分支,master分支指向first版本

image

当出现second版本后,master指针指向second,first指针指向second

image

Git分支

分支的介绍

在版本控制过程中,同时推进多个任务,为每个任务我们可以创建一个单独的分支。

使用分支意味着,可以把工作从开发主线上分离,开发自己的分支时,不会影响主线分支的运行。

分支的底层也是指针的运用。

分支一般是在给项目添加模块,修复项目bug等情况运用。

分支可以并行推进多个功能的开发,提高效率。

各个分支开发过程中,如果某一个分支开发失败,不会影响其他分支,失败分支删除重新操作即可。

分支的操作

查看分支

查看当前有几个分支

git branch -v

创建分支

git branch 分支名

删除分支(检查,删除)

git branch -d 分支名

不能删除当前所处的分支

删除分支(强制删除)

git branch -D 分支名

切换分支

git checkout 分支名

git checkout -b 分支名

创建分支同时切换到这个分支上

分支合并

git merge 分支

将分支和自己当前分支合并

解决分支合并冲突问题

冲突原因:

俩个分支在同一个文件的同一个位置进行了不同的修改,Git无法替我们决定用那一套必须认为决定。

多个分支对同一个文件,同一行进行了不同的修改。

解决冲突

他会在冲突文件对应冲突的位置用符号比较

image

<<<<<<< HEAD

当前分区修改的代码块

========

hot-fix分区修改的代码块

> > > > hot-fix

将你要保留的代码留下,将特殊符号删除如 <<<<< HEAD ===== > > > > > > HOT -FIX

修改保存后将其添加进暂存区(因为此时文件没有被追踪)

然后提交进记录即可。

注意要点

比如说现在俩个分支分别是master分支和fix分支

在master分支中创建了hello.txt文件里面内容为hello

提交一次记录

切换到fix分支操作这个文件将内容改成hello world

提交一次记录

此时切换到master分支我们看不到fix分支中已经提交过记录的操作,依然显示为master分支。

比如上述:master分支合并fix分支后,master分支内容改变但!fix分支内容不变。

分支切换图解

假设一开始在master分支上存在

first,second,third,fourth四个版本

image

然后创建hot-fix分支,修改third版本的内容

image

此时在hot-fix分支上修改了third版本变成hot-fix版本

image

此时切换分支就相当于将HEAD指针指向了hot-fix分支实现分支切换。

master、hot-fix其实都是指向具体版本记录的指针

当前所在的分支,由HEAD决定的。

故创建分支的本质是多创建一个指针。

head如果指向master,那么当前就处于master分支上

head如果指向hot-fix,那么当前就处于hot-fix分支上

Git团队协作机制

团队内协作

  1. 客户端A制作了一个项目1,将他发布到代码托管中心,(git push)

  2. 客户端B从代码托管中心下载这个项目1(git clone)

  3. 客户端B修改了这个项目1后将他发布到代码托管中心(git push)

  4. 客户端A从代码托管中心拉取最新修改版本到自己本地(git pull)

image

跨团队协作

远程库叫岳不群的是一个团队A的远程库

远程库叫东方不败的是另外一个团队B的远程库

团队A需要团队B的协作修改项目

  1. 团队B从团队A的远程库中fork他们的项目,作为团队A项目的一个分支。

  2. 然后从远程库克隆下来这个项目

  3. 修改完后push到团队B的远程库中

  4. 团队B再对团队A的远程库发起一个拉去请求(pull requests)

  5. 在团队A审核后,将团队A的项目作为分支进行合并

  6. 然后团队A的人将项目从远程库克隆到本地。

image

在GitHub上创建远程库并与本地建立连接

GitHub地址

GitHub在外网,需要进去自己想办法~

  1. 创建GitHub远程代码库

    远程库名最好和本地库名一样。

image

  1. 创建好远程库之后会显示

image

这是俩种连接GitHub远程库的方式

先说明使用https连接远程库

创建远程库别名

因为使用的是HTTPS方式连接远程库,这玩意很长不可能直接打到cmd中

创建别名方便以后代码的推送,拉去

语法

  1. 查看当前所有远程地址别名
git remote -v 
  1. 创建远程地址别名
git remote add 别名 远程地址

将本地库推送到远程库

语法

git push 别名/地址 分支

在执行的时候会弹出登录界面登录一次

拉取远程库到本地库

更新远程库已经更新的代码

语法

git pull 地址别名/地址 分支

拉去后版本自动更新为远程库的版本

即将本地库和远程库同步

拉去后会和分支直接合并!

git fetch 地址别名/地址 分支

拉去远程库最新版本到本地库

需要用户区考虑需不需要进行分支合并!

git pull=git fetch + git merge

如果这俩个都不加分支就默认全是git clone将全部分支拉去了

克隆远程库到本地

拿来将整个项目复制到本地

语法

git clone 地址

克隆代码是不需要登录账号的,是在你创建的库是公共库的前提下!

克隆会做以下操作

  1. 拉取代码
  2. 初始化本地仓库
  3. 创建别名(地址别名)

设置GitHub的仓库权限

在GitHub中,不是所有人都可以推送代码到我们本地库的。

我们需要指定设置谁可以推送代码到远程库。

设置方法

  1. 打开我们的GitHub仓库
  2. 点击Settings
  3. 在右边栏找到Collaborators
  4. 点击后添加对应人员
  5. 之后复制出现的邀请函
  6. 发送给你添加的对应人员

这个权限是GitHub用户之间的权限

GitHub使用技巧

用户名/仓库名

这样搜索可以精确找到指定用户写的仓库

复制别人Git仓库到自己的仓库

在右上角的fork点击即可

image

拉取请求(pull request)

当我们从别人的Git项目库fork放到自己本地后

修改后可以点击pull requests请求

然后发送请求给这个项目的主人,实现帮别人修BUG

GitHub的SSH免密登录

在GitHub的项目仓库中有俩种方式对远程库进行连接,上面已经说了HTTPS连接方式了

GitHub的SSH连接仓库方式过程:

  1. 在我们系统的家目录中右键GitBash窗口打开

  2. 输入代码创建.ssh文件

    ssh-keygen -t rsa -C add_for_git_hub
    

    -t是指定用什么加密算法

    rsa 是著名的非对称加密协议

    -C 注释内容(不需要加双引号)

    输入后连续三下回车

  3. 此时会在家目录下生成.ssh目录

    在这个目录下会生成俩个文件分别是 id_rsa和id_rsa.pub

    一个是私钥,一个是公钥

  4. 打开存放公钥的文件id_rsa.pub,复制里面的内容

  5. 打开我们的GitHub账号,在账号头像框下拉找到设置按钮打开

  6. 在右侧找到SSH and GPG keys

  7. 点击NEW SSH KEY将复制的内容添加进去(名字随意)

  8. 添加成功后直接使用ssh协议的链接在本地连接即可。

这个代码就是把本机设置为免密登录的机器,这样就不需要push代码到github仓库的时候登录了

在Idea中集成git

配置Git忽略提交文件

  1. 在家目录下创建一个git.ignore文件

    git.ignore文件模板如下

    ######################
    # 解决java产生文件
    ######################
    *.class
    
    # Mobile Tools for Java (J2ME)
    .mtj.tmp/
    
    # Package Files #
    *.jar
    *.war
    *.ear
    
    # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
    hs_err_pid*
    
    ######################
    # 解决maven产生的文件
    ######################
    
    target/
    **/target/
    pom.xml.tag
    pom.xml.releaseBackup
    pom.xml.versionsBackup
    pom.xml.next
    release.properties
    dependency-reduced-pom.xml
    buildNumber.properties
    .mvn/timing.properties
    
    ######################
    # 解决各类编辑器自动产生的文件
    ######################
    
    *.iml
    
    ## Directory-based project format:
    .idea/
    # if you remove the above rule, at least ignore the following:
    
    # User-specific stuff:
    # .idea/workspace.xml
    # .idea/tasks.xml
    # .idea/dictionaries
    
    # Sensitive or high-churn files:
    # .idea/dataSources.ids
    # .idea/dataSources.xml
    # .idea/sqlDataSources.xml
    # .idea/dynamic.xml
    # .idea/uiDesigner.xml
    
    # Gradle:
    # .idea/gradle.xml
    # .idea/libraries
    
    # Mongo Explorer plugin:
    # .idea/mongoSettings.xml
    
    ## File-based project format:
    *.ipr
    *.iws
    
    ## Plugin-specific files:
    
    # IntelliJ
    /out/
    /target/
    
    # mpeltonen/sbt-idea plugin
    .idea_modules/
    
    # JIRA plugin
    atlassian-ide-plugin.xml
    
    # Crashlytics plugin (for Android Studio and IntelliJ)
    com_crashlytics_export_strings.xml
    crashlytics.properties
    crashlytics-build.properties
    
  2. 在.gitconfig文件引用他(这个文件也在系统的家目录吧)

    [core]
    	excludefile = C:/Users/用户名/git.ignore
    

在idea定位Git程序

在idea设置-->版本控制--->git

找到Git的安装目录,Git/bin/git.exe

将项目文件加入Git管理

在idea的菜单栏中,找到VSC选项,添加本地仓库即可

此时文件会有颜色变化:

  1. 红色代表未被追踪
  2. 绿色代表文件在暂存区
  3. 蓝色代表文件被修改过,还未被追踪
  4. 白色代表已经提交了

标签:文件,git,Git,master,使用,远程,分支
From: https://www.cnblogs.com/wdadwa/p/16796645.html

相关文章

  • GitHub--->精确搜索
    in:根据某个关键词进行检索关键词:​ name:项目名​ description:项目描述​ readme:项目帮助文档语法需要检索的内容in:name或者description或readme单独使用如搜索......
  • git常用命令
    <p>初始化:在项目目录里边gitinit添加到缓存区:gitaddfilename提交到本地仓库:gitcommit-m"说明"查看提交记录:gitlog--pretty=oneline--abbrev-commit能查看到回......
  • 通过 Github Action 实现定时推送天气预报
    偶然间,看到GitHubActions教程:定时发送天气邮件-阮一峰的网络日志这篇文章,没错,这个正好能打发自己的折腾之心,也能通过代码给生活引入一些变化。还是在这里简单记录一......
  • Hyperf使用ElasticSearch记录
    Hyperf安装Elasticsearch协程客户端hyperf/elasticsearch主要为elasticsearch-php进行了客户端对象创建的工厂类封装,elasticsearch-php默认使用GuzzleRing客户......
  • MySQL之in和exists的使用和区别
     今天我们说下MySQL中in和exists的用法和区别:  exists表示存在,经常和子查询配合使用。我们来举个例子:mysql>select*fromcourse;+----+----------+|id|name ......
  • git log 查看修改历史
     gitlog--pretty=oneline--format="%h:%ad:%an:%s"-5gitlog--pretty=oneline--format="%H:%ad:%an:%s"-5gitlog--README.md-5--greplogin ###概念......
  • python self.__dict__.update 批量更新属性的使用
    首先我们回顾下字典的update方法,以及查看对象属性__dict__的使用;然后再看对象.__dict__update的使用 一、字典的update方法1.描述dict.update()update()函数把字典di......
  • ABAQUS无限元(infinite element)使用手册
    1.无限元(infiniteelement)1.1无限元的含义  有限数值分析中,分析人员有时会面临无限大空间中的边值问题,或者是感兴趣的区域相比于周围介质非常小的情况;而由于计算模......
  • Mac电脑使用:查看本机已连接Wi-Fi密码的方法
    在使用Mac电脑的时候,电脑自身所连接成功的Wi-Fi一般都不显示密码,这是苹果出于安全考量的保护措施,但是有时候遇到新的设备想要连接已经连过的Wi-Fi,由于时间太久忘记Wi-Fi密码......
  • 8-jenkins windows环境下配置自动构建启动项目(springboot,gitlab,maven)
    由于远程办公原因,所以我们的服务必须在一个内网,所以就想到使用jenkins来实现提交后自动构建项目启动,不需要再登录到内网操作。jenkins的安装很简单,网上一大片,然后gitlab......