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,一经查实,立即删除!

相关文章

C# webapi 上传下载图片

客户端上传文件 string url url "webUploadFile";Uri server new Uri(url);HttpClient httpClient new HttpClient();MultipartFormDataContent multipartFormDataContent new MultipartFormDataContent();StreamContent streamConent new StreamContent(new F…

OC-@dynamic 关键字

dynamic这个关键词,通常是用不到的。 它与synthesize的区别在于: 使用synthesize编译器会确实的产生getter和setter方法,而dynamic仅仅是告诉编译器这两个方法在运行期会有的,无需产生警告。 假设有这么个场景,B类&…

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…

获取两个数百分比的值

1 /**2 * 获取两个数百分比的值3 * 4 * param num1 5 * param num26 * param retain 保留小数位数7 * return8 */9 public static String numberFormat(int num1, int num2, int retain) { 10 NumberFormat numberFormat …

iOS AVAudioPlayer和AVAudioPlayerDelegate-音频播放处理中断

学习总是在进行。 一、AVAudioPlayer如何处理中断 AVAudioPlayer类提供了代理方法&#xff0c;用来处理当播放音频文件时&#xff0c;发生来电、闹钟等事件。设置代理并遵守AVAudioPlayerDelegate协议,<span style"font-family: Arial, Helvetica, sans-serif;"&g…

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

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

JS,JQ 格式化小数位数

在<script>中&#xff1a; $(function(){   var num$(".price").length;/*获取应用了class"price"的标签数量*/   for(var i0;i<num;i){     if($(".price")[i].innerText!"")       $(".price")[i]…

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

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

windows系统作为客户端时,linux中本地yum源挂载时,如何同时挂载DVD1和DVD2?

这里以CentOS6.5为例.他的镜像有两个DVD1和DVD2.DVD1中是系统和主要的安装包,DVD2中是剩下的安装包 当挂载时如果要同时挂载DVD1和DVD2.需要这样做: 1)在虚拟机的设置中选择连接 2)分别在mnt下创建cdrom和cdrom1文件夹 3)到dev下查看有软连接 cdrom->sr0 cdrom1->sr1 这里…

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

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

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

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

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

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

iOS中监测来电方案

问题 最近在做一个有录音功能的App&#xff0c;要求当用户接到来电时&#xff0c;要停止录音。该如何实现这个功能呢&#xff1f; 解决方案 我首先想到了AppDelegate里的applicationWillResignActive:方法&#xff0c;在该方法的注释中就写到到收到来电或短信时&#xff0c;系统…

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

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

Ajax — cropper (图片剪裁)基本用法

jQuery-cropper插件完整的API&#xff1a;http://www.jq22.com/jquery-info9322 1. 基本使用步骤 在 <head> 中导入 cropper.css 样式表&#xff1a; <link rel"stylesheet" href"/assets/lib/cropper/cropper.css" />在 <body> 的结…

「短篇小说」灵囚 540 天

转载&#xff1a;知乎 - BIMBOX 孙彬 - https://zhuanlan.zhihu.com/p/24655832 「我们总有一天会逾越那条上帝划好的界限&#xff0c;而最终我们将无法面对真实和虚假&#xff0c;正义与罪恶。」 「不幸的是&#xff0c;从伊甸园那一次&#xff0c;我们就已经越界了。」 第十天…

iOS 够逼格的注释总结

首先关于注意这里就不说什么VVDocument了&#xff0c;来点新鲜的&#xff01; 也许你使用过#warning 警告提示 也许你也使用过#pragma marks。 但是你见过或者使用过下面这个吗&#xff1f; Comments containing:MARK:TODO:FIXME:!!!:???: 没有&#xff0c;那么你就快速的看…

Git图形化管理工具

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