Git 笔记

三个区域

下面三个区域,是Git虚拟的区域,看不到,摸不着。

  • 工作区
    • 工作区,指的是使用Git管理后的文件,这些文件显示在磁盘上,供我们使用或修改的区域。所以,粗略的说,项目文件夹就是工作区。
  • 暂存区域
    • 执行 git add .之后,文件由工作区,添加到了暂存区。 暂存区保存了下次将提交的文件列表信息。
  • Git 仓库区、本地仓库
    • 执行 git commit -m '提交说明' 之后,代码会被提交到仓库区。仓库区是 Git 中最重要的部分,代码只有提交到仓库,才会形成一次历史记录,即才会形成一个版本。

在这里插入图片描述

工作区新建的文件和Git没有任何关系;文件被添加到暂存区,才叫做被Git管理过

记录每次更新到仓库

添加文件到暂存区

新文件,只有添加到暂存区,才叫做被Git管理。否则和Git没什么关系,即使文件在项目文件夹。

# 添加指定文件到暂存区
$ git add 文件名# 以空格隔开可以一次 add 多个文件
$ git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录
$ git add [dir] [file] [dir] [file] [file] ...# 添加当前目录的所有文件到暂存区,包括子目录
$ git add .

提交文件到仓库

提交到仓库的文件,是暂存区中的文件。

# 提交暂存区到仓库区
$ git commit -m [message]# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]# 提交工作区和暂存区自上次commit之后的变化,直接到仓库区。
# 新文件,从未被Git管理过,是不能直接提交到仓库区的
$ git commit -a -m "提交日志"

在这里插入图片描述

撤销操作

撤销操作,只能恢复暂存区或工作区,与最近一次提交的代码一致。

# 恢复暂存区的指定文件到工作区
$ git checkout [file]# 恢复暂存区的所有文件到工作区
$ git checkout .# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit版本号] [file]# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变
$ git reset [file]# 重置暂存区与工作区,与上一次commit保持一致。该命令后不能加文件或文件夹
$ git reset --hard

在这里插入图片描述

前文中,git checkout 版本号 能够将代码退回到历史的任何版本,但不算是严格意义的回退,因为它叫做版本穿梭。具体见后文的分支管理。

分支管理

什么是分支

随着git提交的次数越来越多,就会形成由各个版本连接而成的一条提交线。如下图:

在这里插入图片描述

由Git提交而形成的提交线,称为分支。默认的分支是主分支,叫做 master,前面的学习,一直是在 master 分支上提交。

我们也可以创建其他分支,新创建的分支,相当于是原分支的一个拷贝

实际开发中

  • 为了保证代码的安全性,不允许在主分支上进行开发
  • 需要创建其他分支,在其他分支上进行开发,这样不会影响主分支上的代码
  • 其他分支开发完成后,可以选择将其他分支代码合并到主分支上

创建其他分支

# 创建分支
git branch 分支名
# 比如
git branch dev# 切换分支到dev
git checkout dev# 也可以创建并直接切换分支
git checkout -b dev

切换分支之前,需要把当前分支的工作全部提交,否则不允许切换到其他分支。

实际开发中,鼓励多使用分支。

快进模式合并两个分支

快进模式合并

  • 两个分支A和B
  • B分支包含A分支的最新版本,在合并的时候,叫做快进模式合并。
  • 快进模式合并,相当于使用B分支的代码覆盖A分支的代码;同时版本也会更新到A分支

两个分支合并,比如把 B 分支 合并到A分支上

  • 需要先切换到A分支
  • 然后执行 git merge B ,表示把B分支的代码合并到A分支上。
# 切换到A分支
git checkout A# 把B分支的代码合并到A分支
git merge B

合并模式合并两个分支

合并模式

  • 两个分支A和B
  • A分支有独立的提交,B分支也有独立的提交,在合并的时候,叫做合并模式的合并。
  • 合并模式,有可能会产生冲突;如果出现冲突,需要解决冲突,然后需要添加提交一次,从而完成合并。

两个分支合并,比如把 B 分支 合并到A分支上

  • 需要先切换到A分支
  • 然后执行 git merge B ,表示把B分支的代码合并到A分支上。
  • 如果看到 CONFLICT,则表示有冲突,需要打开有冲突的文件,手动解决冲突,然后添加、提交即可。
# 切换到A分支
git checkout A# 把B分支的代码合并到A分支
git merge B

如果有冲突,会显示如下提示:

在这里插入图片描述

在这里插入图片描述
手动打开有冲突的文件,解决冲突,保存文件。(手动解决)

再次添加(add操作)提交(commit),即可完成合并。

其他相关命令

# 查看所有分支(本地分支)
git branch# 查看所有分支(包括远程分支)
git branch -a# 删除分支(需要先切换到其他分支,然后在执行删除)
git branch -d 分支名# 创建并直接切换分支
git checkout -b dev

如果要切换分支,必须把当前分支的代码全部提交到本地仓库。

穿梭到历史后,如何使用历史版本中的代码

  • 穿梭到历史的一个版本后,根据该版本创建一个分支,比如 B 分支
  • 在分支B中,修改需要使用的文件,然后提交(提交之后,后面的合并就会有冲突)
  • 回到之前的分支的最后一次提交的位置(切换回原来的分支)
  • 合并刚刚创建的新分支(B)即可

实际上就是为了练习分支。

远程仓库

说明

目前,我们的操作都是一个人开发,如果涉及到多人开发呢?大家的代码如何合并到一起呢?这个时候就需要公网上的一台服务器了,大家可以把代码提交到这台服务器上,也可以从服务器上拉取所有的代码。这个公网上的服务器就叫做远程仓库。

完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

实际上,除了GitHib,还有很多第三方远程仓库托管服务:

  • GitHub(这个网站有时很难打开)
  • 码云(gitee)(打开速度快)
  • coding
  • Gitlab

创建远程账号

配置SSH

在本地命令行,执行下面的命令,可以生成SSH秘钥(包含一个公钥一个私钥)

ssh-keygen -t rsa -C "你的邮箱地址"
# 执行完这个命令之后,后面有一些询问,我们直接一路回车即可

最后生成的秘钥在:

Windows:
C:\Users\用户名\.ssh   //  Users--用户   GaoWei--我的计算机用户名mac:
你的用户名那个文件夹中。 按shift+Commend+.  可以显示隐藏文件,然后就可以看到 .ssh文件夹了

找到 .ssh/id_rsa.pub,用vscode打开,复制里面全部的内容,配置到远程仓库

  • GitHub右上角的三角号
  • Settings
  • 左侧有 SSH and GPG keys
  • 在显示的界面中,点击右上角的 New SSH key,然后完成添加公钥操作

新建远程仓库

将本地仓库中的代码推送到远程仓库

推送的是本地仓库的代码。工作区和暂存区的代码不会被推送到远程仓库

  • 复制远程仓库的 ssh 地址

在这里插入图片描述

  • 本地仓库中,执行

    # 添加远程仓库地址,让我们的本地仓库和远程仓库建立关联
    # origin 可以自定义
    git remote add origin 远程仓库的ssh地址
    
  • 首次推送之前,需要先拉取远程仓库的代码(README.md)到本地

    git pull origin master --rebase
    
  • 完成首次推送

    # 如果远程没有本地的 分支,第一次推送,需要加  -u
    git push -u origin master
    
  • 后续继续开发

    # 改动了代码,先添加到暂存区
    git add .
    # 提交到本地仓库
    git commit -m 'xxxx'# 推送到远程仓库
    git push

注意事项

  • 什么时候需要先拉取,然后在推送
    • 远程仓库的提交比本地仓库的要新,或者不一样,都需要先拉取,然后在推送
  • 如果提示 “Are you sure you want to continue connecting (yes/no/[fi…])”
    • 输入yes,回车

克隆远程仓库到本地

  • 实际开发中,有些时候,我们需要把别人仓库的代码克隆到本地

    • 下载别人的代码的时候,可以选择克隆
    • 多人合作开发的时候,需要克隆合作伙伴的代码到本地
  • 克隆命令

    git clone 远程仓库的ssh地址
    
  • 克隆别人的仓库到你的电脑中

    • 克隆,相当于下载。可以克隆下来,但是不能向别人的仓库推送
  • 克隆的是自己的仓库

    • 克隆下来,也可以推送

多人协作

  • 可以先创建远程仓库
  • 【可选】我先把基础的代码推送到远程仓库
  • 合作者,需要把远程仓库的代码,克隆到你的计算机中
  • 管理员邀请合作者共同来开发
  • 合作者,需要同意
  • 然后,管理员和合作者,都可以向远程仓库推送代码
    • 推送之前,必须先拉取。拉取之后,如果有冲突,解决冲突。然后推送。

如果遇到:

在这里插入图片描述

点击 “i” ,按上下左右键,调整光标的位置,然后删除里面所有的内容,随便写一点也可以,但是不能太多。按esc,退出编辑模式,继续按 “:wq” ,表示保存,并退出的意思。

后续,可以push。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git -- 练习的笔记

gitgitee.com:my_exercises/my_exercises.githttps://gitee.com/my_exercises/my_exercises/invite_link?invite3ab56c724a0aed34ae2bd193ce87e741e67fe05ee029cc01b7993663152babc57d76203fdafbbb42e766b0d826817bc91.在任意位置右键打开 2.初始化设置 3.添加远程仓库地址 4.…

Swift傻傻分不清楚系列(十二) 属性

本页包含内容: 存储属性(Stored Properties)计算属性(Computed Properties)属性观察器(Property Observers)全局变量和局部变量(Global and Local Variables)类型属性&a…

GIT — 使用回顾

回顾Git的使用 记录每次的变更 工作区 --> 暂存区 git add . / git add 文件 文件夹 .... 工作区 --> 暂存区/本地仓库 前提条件:文件曾经被添加到暂存区或提交到仓库git commit -a -m 提交说明 暂存区 --> 本地仓库 git commit -m 提交说明 / git commi…

Ajax — 大事件项目(第一天)

应用的前端技术 Ajax (重要) — jQuery方式接口请求Layui 框架使用HTML CSS JS 项目说明和演示 线上 DEMO 项目地址:http://www.liulongbin.top:8086/项目的 API 接口地址: https://www.showdoc.cc/escook?page_id3707158761215217 项目请求根路径…

iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

说明: 1)该文简短介绍在iOS开发中遍历字典、数组和集合的几种常见方式。 2)该文对应的代码可以在下面的地址获得:https://github.com/HanGangAndHanMeimei/Code 一、使用for循环 要遍历字典、数组或者是集合,for循环是…

Ajax — 大事件项目(第二天)

大事件-02 fix一个bug 原因: 开始做注册的时候,页面中只有一个 namepassword的input,所以 $(‘input[name“password”]’) 可以准确的找到元素后来做登录的时候,页面中多了一个namepassword的input,所以$(‘input[…

OpenCV自带dnn的Example研究(3)— object_detection

这个博客系列,简单来说,今天我们就是要研究https://docs.opencv.org/master/examples.html下的6个文件,看看在最新的OpenCV中,它们是如何发挥作用的。在配置使用的过程中,需要注意使用较高版本的VS避免编译器兼容问题&…

Ajax — 大事件项目(第三天)

大事件-03 用户信息 表单验证 html中&#xff0c;直接使用layui提供的内置验证规则 email <input type"text" name"email" required lay-verify"required|email" placeholder"请输入邮箱" autocomplete"off" class&q…

iOS运行时-使用Runtime向Category中添加属性以及运行时介绍

前言 了解OC的都应该知道&#xff0c;在一般情况下&#xff0c;我们是不能向Category中添加属性的&#xff0c;只能添加方法&#xff0c;但有些情况向&#xff0c;我们确实需要向Category中添加属性&#xff0c;而且很多系统的API也有一些在Category添加属性的情况&#xff0c;…

Git图形化管理工具

Git图形化管理工具 注意&#xff1a;必须在创建的仓库中进行右键打开 复制这段内容后打开百度网盘App&#xff0c;操作更方便哦。 链接&#xff1a;https://pan.baidu.com/s/1eXIk01LXSmzmXvYfw3MnEA 提取码&#xff1a;J166 --来自百度网盘超级会员V5的分享 分类 sourceTr…

TCP/IP(一):数据链路层

背景 这一系列的文章主要是为一般的、非专业开发岗位(如移动端)的工程师准备&#xff0c;一方面可以对网络的基本知识有基本的了解&#xff0c;另一方面不至于面试中被问到相关问题时束手无策。知识以 TCP/IP 协议簇为主&#xff0c;也会有应用层和数据链路层的简单介绍。 文…

Linux系统编程——线程(1)

目录 线程概要Linux内核线程实现原理线程的共享/不共享资源线程优缺点线程控制原语pthread_selfpthread_createpthread_exitpthread_joinpthread_cancel终止线程方式控制原语对比前情提要&#xff1a; Linux用户级线程和内核级线程区别 线程概要 Linux内核线程实现原理 类Unix系…

TCP/IP(二):IP协议

IP协议处于OSI参考模型的第三层——网络层&#xff0c;网络层的主要作用是实现终端节点间的通信。IP协议是网络层的一个重要协议&#xff0c;网络层中还有ARP(获取MAC地址)和ICMP协议(数据发送异常通知) 数据链路层的作用在于实现同一种数据链路下的包传递&#xff0c;而网络层…

Ajax — 大事件项目(第四天)

分类管理 添加分类 初步使用弹出层 给 “添加分类” 绑定一个单击事件单击事件中&#xff0c;使用 layer.open() 实现一个弹出层 type: 1, 弹层的类型是页面层title, “添加文字分类”content: ‘字符串&#xff0c;DOM’,area: [‘500px’, ‘250px’] // ---------------…

redis学习(四)

一、Redis 键(key) 1、Redis 键命令用于管理 redis 的键。 2、Redis 键命令的基本语法如下&#xff1a;redis 127.0.0.1:6379> COMMAND KEY_NAME 3、常用key命令 keys * 获取所有的keyselect 0 选择第一个库move myString 1 将当前的数据库key移动到某个…

TCP/IP(三):IP协议相关技术

在前两篇文章中&#xff0c;我分别介绍了数据链路层和网络层的IP协议。虽然这个系列教程的重点是搞定 TCP/IP&#xff0c;不过不用着急&#xff0c;本文简要介绍完与 IP 协议相关的技术&#xff0c;下一篇文章就会正式、详细的介绍 传输层与 TCP 协议。这篇文章会介绍 DNS、ARP…

Node — 第一天

Node-01 会 JavaScript&#xff0c;就能学会 Node.js&#xff01;&#xff01;&#xff01; **Node.js 的官网地址&#xff1a; ** Node.js 的学习路径&#xff1a; JavaScript 基础语法 Node.js 内置 API 模块&#xff08;fs、path、http等&#xff09; 第三方 API 模块&…

TCP/IP(四):TCP 与 UDP 协议简介

从本章开始&#xff0c;我们开始介绍最重要的传输层。传输层位于 OSI 七层模型的第四层&#xff08;由下往上&#xff09;。顾名思义&#xff0c;传输层的主要作用是实现应用程序之间的通信。网络层主要是保证不同数据链路下数据的可达性&#xff0c;至于如何传输数据则是由传输…

Node — 第二天

http模块 搭建服务器的步骤 ① 导入 http 模块 ② 创建 web 服务器实例 ③ 为服务器实例绑定 request 事件&#xff0c;监听客户端的请求 ④ 启动服务器 // ① 导入 http 模块 const http require(http);// ② 创建 web 服务器实例 const server http.createServer();/…

TCP/IP(五):TCP 协议详解

上一节 中讲过&#xff0c;TCP 协议是面向有连接的协议&#xff0c;它具有丢包重发和流量控制的功能&#xff0c;这是它区别于 UDP 协议最大的特点。本文就主要讨论这两个功能。 数据包重发 数据发送 丢包重发的前提是发送方能够知道接收方是否成功的接收了消息。所以&#…