本文为博主在https://learngitbranching.js.org/?locale=zh_CN 网站上的Git Branching基础操作学习笔记,仅于个人复习以及学习交流使用。目前只学习了1-10,19和20。
后面还有一些在实际开发中的使用笔记。

注:快速查看git仓库的内容:将url中的github改为github1s

目录

  • 一、提交 git commit
  • 二、新建分支 git branch < branchname >
  • 三、合并分支(1) git merge < branchname >
  • 四、合并分支(2) git rebase < branchname >
  • 五、在提交树上移动 git checkout < commit >
  • 六、相对引用 git checkout < commit >^
  • 七、~操作符
  • 八、撤销变更
  • 九、整理提交记录
  • 十、交互式 rebase
  • 十九、远程仓库
  • 远程仓库
  • 二十、远程分支
  • 在实际开发项目中的使用笔记
    • 创建远端和本地分支
    • 拉取
    • 推送
    • 冲突解决

一、提交 git commit

git commit

二、新建分支 git branch < branchname >

git checkout < branchname >: 切换到分支

git checkout -b < branchname >:新建并切换到分支

三、合并分支(1) git merge < branchname >

  • 创建新分支 bugFix
  • git checkout bugFix 命令切换到该分支
  • 提交一次
  • git checkout main 切换回 main
  • 再提交一次
  • git mergebugFix 合并到 main
git checkout -b bugfix
git commit
git checkout main
git commit
git merge bugfix

四、合并分支(2) git rebase < branchname >

  • 新建并切换到 bugFix 分支
  • 提交一次
  • 切换回 main 分支再提交一次
  • 再次切换到 bugFix 分支,rebase 到 main 上
git checkout -b bugfix
git commit
git checkout main
git commit
git checkout bugfix
git rebase main

五、在提交树上移动 git checkout < commit >

HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。

HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。

HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

git checkout C4(C4是提交记录,而不是分支名)

六、相对引用 git checkout < commit >^

通过指定提交记录哈希值的方式在 Git 中移动不太方便。在实际应用时,并没有像本程序中这么漂亮的可视化提交树供你参考,所以你就不得不用 git log 来查查看提交记录的哈希值。

并且哈希值在真实的 Git 世界中也会更长(译者注:基于 SHA-1,共 40 位)。例如前一关的介绍中的提交记录的哈希值可能是 fed2da64c0efc5293610bdd892f82a58e8cbc5d8。舌头都快打结了吧…

比较令人欣慰的是,Git 对哈希的处理很智能。你只需要提供能够唯一标识提交记录的前几个字符即可。因此我可以仅输入fed2 而不是上面的一长串字符。

首先看看操作符 (^)。把这个符号加在引用名称的后面,表示让 Git 寻找指定提交记录的父提交。

所以 main^ 相当于“main 的父节点”。

main^^main 的第二个父节点

七、~操作符

我使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。例如:

git branch -f main HEAD~3: 将 main 分支强制指向 HEAD 的第 3 级父提交。

git branch -f main C6: 将main分支强制指向C6提交

git checkout HEAD~2: 将HEAD指向它的上两个父级分支

八、撤销变更

git reset < branchname >: 撤销本地仓库变更

git revert < branchname >: 撤销远程仓库变更(实际上是提交了一个新版本)

九、整理提交记录

git cherry-pick <提交号>...

十、交互式 rebase

交互式 rebase 指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i

如果你在命令后增加了这个选项, Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。

在实际使用时,所谓的 UI 窗口一般会在文本编辑器 —— 如 Vim —— 中打开一个文件。

git rebase -i HEAD~4

十九、远程仓库

远程仓库

远程仓库并不复杂, 在如今的云计算盛行的世界很容易把远程仓库想象成一个富有魔力的东西, 但实际上它们只是你的仓库在另个一台计算机上的拷贝。你可以通过因特网与这台计算机通信 —— 也就是增加或是获取提交记录

话虽如此, 远程仓库却有一系列强大的特性

  • 首先也是最重要的的点, 远程仓库是一个强大的备份。本地仓库也有恢复文件到指定版本的能力, 但所有的信息都是保存在本地的。有了远程仓库以后,即使丢失了本地所有数据, 你仍可以通过远程仓库拿回你丢失的数据。
  • 还有就是, 远程让代码社交化了! 既然你的项目被托管到别的地方了, 你的朋友可以更容易地为你的项目做贡献(或者拉取最新的变更)

现在用网站来对远程仓库进行可视化操作变得越发流行了(像 GitHub 或 Phabricator), 但远程仓库永远是这些工具的顶梁柱, 因此理解其概念非常的重要!

git clone

二十、远程分支

你可能注意到的第一个事就是在我们的本地仓库多了一个名为 o/main 的分支, 这种类型的分支就叫远程分支。由于远程分支的特性导致其拥有一些特殊属性。

远程分支反映了远程仓库(在你上次和它通信时)的状态。这会有助于你理解本地的工作与公共工作的差别 —— 这是你与别人分享工作成果前至关重要的一步.

远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。Git 这么做是出于不能直接在这些分支上进行操作的原因, 你必须在别的地方完成你的工作, (更新了远程分支之后)再用远程分享你的工作成果。

远程分支有一个命名规范 —— 它们的格式是: <remote name>/<branch name>

因此,如果你看到一个名为 o/main 的分支,那么这个分支就叫 main,远程仓库的名称就是 o

大多数的开发人员会将它们主要的远程仓库命名为 origin,并不是 o。这是因为当你用 git clone 某个仓库时,Git 已经帮你把远程仓库的名称设置为 origin 了。

在实际开发项目中的使用笔记

在本学期的项目作业中负责前端开发,IDE是webstorm,在git中使用到了分支开发,为各种conflict和rollback踩了不少坑,特此记录。

创建远端和本地分支

远端分支直接在网页上创建

本地同名分支创建并切换到该分支 git checkout -b 本地分支名称

与远端分支同步 git pull origin 远端分支名称

拉取

切换到本地的主分支 git checkout 本地主分支

拉取本地主分支的在远端更新 git pull

切换回本地自己的分支 git checkout 自己分支

rebase将本地主分支合并到自己分支 git rebase 本地主分支

推送

将自己的修改提交到本地分支 git commit

将本地自己的分支推送到远端自己的分支 git push

请求合并到远端主分支,在网页上发起pull request,等待同意。

冲突解决

本地分支因与远端分支冲突而无法push时,先进行 git pull --rebase 在webstorm中手动解决冲突。

Git Branching基础操作学习笔记相关推荐

  1. 多项式基础操作 - 学习笔记

    原文链接https://www.cnblogs.com/zhouzhendong/p/polynomial.html 下载链接: 多项式基础操作 #include <bits/stdc++.h& ...

  2. pytorch基础操作学习笔记(autograd,Tensor)

    简述 简单讲讲关于torch.autograd内容(因为我也有点菜) 文章目录 简述 简单讲讲 Tensor 介绍Tensor 创建Tensor 获取Tensor数据规模 将tensor转成其他数据类 ...

  3. 《GitHub入门与实践》第4章 通过实际操作学习Git 分支的操作——学习笔记

    文章目录 2. 分支的操作 2.1 git branch--显示分支一览表 2.2 git checkout -b--创建.切换分支 2.2.1 切换到 feature-A 分支并进行提交 2.2.2 ...

  4. Matlab基础操作学习笔记

    文章目录 一.数据类型 1.常见的MatLab数据类型: 2.数据类型转换: 二.函数 1.脚本 2.函数 三.矩阵与数组 1.矩阵 2.数组 四.运算符 1.算数运算符 2.关系运算符 3.逻辑运算 ...

  5. linux基础操作学习笔记

    linux 0.序 0.1网络连接概念 0.1.1P地址IPADDR ​ IP地址是一种逻辑地址,用来标识网络中一个个主机 ​ P地址=网络地址+主机地址 ​ IP地址是一个 4 * 8bit(1字节 ...

  6. K8s基础知识学习笔记及部分源码剖析

    K8s基础知识学习笔记及部分源码剖析 在学习b站黑马k8s视频资料的基础上,查阅了配套基础知识笔记和源码剖析,仅作个人学习和回顾使用. 参考资料: 概念 | Kubernetes 四层.七层负载均衡的 ...

  7. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  8. Python 基础知识学习笔记——NumPy

    Python基础知识学习笔记--NumPy 与 matlab 优秀的矩阵运算类似,python 提供了 numpy 库,这对熟悉 matlab 的用户来说非常友好.向量.矩阵和多维数组是数值计算中必不 ...

  9. Python 基础知识学习笔记——OpenCV(1)

    Python 基础知识学习笔记--OpenCV(1) OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,它轻量而且高效,被广泛的使用. 整理一下OpenCV学习笔记,以防忘记. 文章目录 Py ...

  10. oracle数据库基础知识总结,oracle数据库基础知识学习笔记

    oracle数据库基础知识学习笔记 一.oracle数据库类型: Char:  字符型(最大长度2000,定长.不足时以空格补充) Varchar2:字符型 最大长度 4000,变长,实际长度由存储的 ...

最新文章

  1. sklearn中的xgboost_xgboost来了
  2. 小麦的一生矢量图收藏贴-从种子的萌发到完熟
  3. HTML5怎样创建画布?
  4. Angular学习资料
  5. Ch5501-环路运输【环形处理dp】
  6. java rtmp推流_rtmp推流直播流程
  7. 打印list_按之字形顺序打印二叉树
  8. logger.debug的用处
  9. .Net中Cookie乱码解决方法
  10. u盘文件看得见却打不开_u盘文件夹打不开怎么办【图解】
  11. 爬取分析拉勾网招聘信息
  12. 给语音信号加混响的常用方法(方法一)
  13. 2022年的5G行业:“5G+”很火,5G网络迟迟未能普及
  14. STM32F407高级定时器-死区时间研究-STM32CubeMX
  15. JavaScript - 语言进阶
  16. 《面向对象程序设计(Java)》第四周学习总结
  17. 五十二.用户配额管理 云主机类型管理 、 镜像管理 网络管理 案例和实例管理 、 安装额外计算节点...
  18. jqweui Toast
  19. Vue的计算属性、侦听属性与过滤器解析
  20. 牛客刷题笔记-远景智能2021秋季招聘软件技术笔试题

热门文章

  1. Xcelsius调用CR报表,总是弹出输入参数页面
  2. 【C++要笑着学】多态 | 重写(覆盖) | 协变构多态 | 父虚子非虚也构多态 | final与override关键字(C++11) | 抽象类 | 纯虚函数 | 抽象类指针
  3. 郑明秋什么版本的MySQL_mysql数据库实用教程教学课件作者郑明秋代码数据库脚本代码9787568250825.docx...
  4. 华师在线计算机网络,华师在线-作业计算机网络.docx
  5. 继承中各代码块的执行顺序
  6. ps-通道实现故障色彩效果
  7. android(微博 微信 qq) 分享和第三分认证登录的封装
  8. SNSyx荣光医院合成配方与药剂合成攻略
  9. 七位高僧大德的临终开示,非大福报者不得见
  10. leaflet怎么获取矩形的中心点位 getCenter()