当前位置: 首页 > news >正文

【git】关于Git这一篇就够了

目录

  • 教程
  • 基本命令
  • 原理
  • 分支

教程

https://learngitbranching.js.org/
https://backlog.com/git-tutorial/cn/stepup/stepup7_1.html

基本命令

git clone ……
git add README.md
git commit -m "add README"
git push

原理

在这里插入图片描述

  • 1.把 work dir 中的修改加入 stage
git add .
  • 2.把 stage 中的修改还原到 work dir 中
    在 work dir 做出的「修改」会被 stage 覆盖,无法恢复
    这里撤销的只是修改,新增的文件不会被撤销
git checkout a.txt 
  • 3.将 stage 区的文件添加到 history 区
git commit -m '一些描述'
git commit --amend # amend把修改和之前的那个 commit 中的修改合并,作为一个 commit 提交到 history 区
  • 4.将 history 区的文件还原到 stage 区
    不会改变 work dir 中的数据,会改变 stage 区的数据,所以应确保 stage 中被改动数据是可以抛弃的。
git reset a.txt
git reset --mixed HEAD a.txt 
# 不改变 work dir 中的任何数据,
# 将 stage 区域中的 a.txt 文件还原成 HEAD 指向的 commit history 中的样子。
# 就相当于把对 a.txt 的修改从 stage 区撤销,但依然保存在 work dir 中,变为 unstage 的状态。
  • 5.将 work dir 的修改提交到 history 区
    先 git add 然后 git commit
git commit -a # 快捷方法
  • 6.将 history 区的历史提交还原到 work dir 中
    这里撤销的也只是修改,新增的文件不会被撤销
    将指定文件在 work dir 的数据恢复成指定 commit 的样子,且会删除该文件在 stage 中的数据,都无法恢复
git checkout HEAD . 
# work dir 和 stage 中所有的「修改」都会被撤销,
# 恢复成 HEAD 指向的那个 history commit
    1. 合并多个 commit
$ git reset 17bd20c
$ git add .
$ git commit -m 'balabala'
# 相当于把 HEAD 移到了 17bd20c 这个 commit,而且不会修改 work dir 中的数据,所以只要 add 再 commit,
# 就相当于把中间的多个 commit 合并到一个了。
  1. 由于 HEAD 指针的回退,导致有的 commit 在 git log 命令中无法看到,怎么得到它们的 Hash 值呢?
git reflog

分支

创建分支

git branch (branchname)

切换分支

git checkout (branchname)
git checkout -b (branchname)  # 创建新分支并立即切换到该分支下

显示分支

git branch

删除分支

git branch -d (branchname)

分支合并

(A)git merge B 把B合并进A
#修改冲突的文件内容,重新提交。
git add .
git commit -m ""

(A)git rebase B 把A合并进B
#修改冲突的文件内容,重新提交。
$ git add myfile.txt
$ git rebase --continue
# 取消rebase,指定 --abort选项

切换分支

git log
git checkout HEAD^
git checkout HEAD~2

移动分支commit

git branch -f master HEAD~3 # 移动master到HEAD~3
git revert # 创建一个新commit head前进

在这里插入图片描述

git reset (HEAD^) # head回退

在这里插入图片描述

git cherry-pick Y # 将Y commit添加到当前分支

在这里插入图片描述
改写提交的历史记录

git rebase -i HEAD~4 # 要改变倒数第4次后的提交

汇合分支上的提交,然后一同合并到分支

git merge --squash issue1

相关文章:

  • 什么 ? 陪玩都月入过忘拉~这不得python采集一下
  • 基于springboot服饰电商平台的设计与开发-计算机毕业设计源码+LW文档
  • 【STM32】硬件资源及芯片介绍
  • SpringMVC实现文件的上传和下载
  • Android 系统jni到hal层回调代码
  • 初入算法(2)—— 进入算法世界
  • 运行谷歌开源BERT程序时遇到的bug修改记录
  • 算法学习入门
  • 【SSM】spring核心思想——IOC和DI
  • 自由的程序员应该学会自由地控制空间-----动态内存管理
  • [架构之路-51]:架构师 - 用系统化、结构化思维解决复杂难搞的软件故障问题 - 马克思主义哲学在软件系统中的应用
  • 【面试题】JavaScript数组切片方法有哪些?
  • 【PyTorch深度学习项目实战100例】—— 基于CNN卷积神经网络实现中文手写汉字识别 | 第60例
  • HarmonyOS系统中内核实现UART串口通信方法
  • Selenium4.0+Python三种元素等待方式介绍 及 元素等待封装
  • 【React系列】如何构建React应用程序
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • angular2 简述
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS盒模型深入
  • JavaScript异步流程控制的前世今生
  • JDK 6和JDK 7中的substring()方法
  • Joomla 2.x, 3.x useful code cheatsheet
  • Kibana配置logstash,报表一体化
  • Linux各目录及每个目录的详细介绍
  • miaov-React 最佳入门
  • Octave 入门
  • springMvc学习笔记(2)
  • web标准化(下)
  • 阿里研究院入选中国企业智库系统影响力榜
  • 订阅Forge Viewer所有的事件
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 力扣(LeetCode)56
  • python最赚钱的4个方向,你最心动的是哪个?
  • zabbix3.2监控linux磁盘IO
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (10)STL算法之搜索(二) 二分查找
  • (2)(2.10) LTM telemetry
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (待修改)PyG安装步骤
  • (独孤九剑)--文件系统
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)JAVA中的堆栈
  • (轉)JSON.stringify 语法实例讲解
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .net core 连接数据库,通过数据库生成Modell
  • .Net MVC + EF搭建学生管理系统