Git(11)-cherry-pick、reset、rebase

更改提交,版本回退

  • 1.get reset 重置HEAD指针的指向
  • 2.git cherry-pick
  • 3.git revert
  • 4.git commit --amend修改提交
  • 5.git rebase 变基提交
    • 5.1 git rebase --onto
    • 5.2rebase 产生冲突,解决冲突/终止变基
    • 5.3git rebase -i
  • 6. rebase Vs merge

git 提供了【修改】【完善】版本库中提交的机制。有很多需要让你去修改或返工某个提交的情况,例如:在某个问题编程器遗留问题前修复它。
【注意事项】如果一个分支已经公开,就不应该重写、修改、更改该分支的任何部分。应该使用git revert命令产生新的提交。

命令概览

git reset commit_flag   # --soft、--mixed、--hard 三个选项, 移动HEAD指向的提交git checkout branch1    # 转移一个分支上的提交->另一个分支上
git cherry-pick commit_flag git revert commit_x    # 撤销某些内容,产生一个新的提交git checkout topic     # 改变topic分支的基础为master分支上的最新提交
git rebase master      # 等价于git rebase master topicgit rebase --continue   # 解决冲突后变基操作
git rebase --skip      # 跳过某些会产生冲突提交,以避免某些冲突。
git rebase --abort    # 可以终止变基础操作,使版本库恢复到变基前的状态
git rebase -i [startpoint] [endpoint]  # 和并多次提交并变基

git rebase -i合并多次提交

1.get reset 重置HEAD指针的指向

git reset 调整HEAD引用指向给定的提交,默认情况下会更新索引以匹配该提交。该命令的三个选项对应对HEAD、索引和工作目录的影响记录于下表。

git reset 命令将原来的HEAD存放在ORIG_HEAD 中。

|选项 | HEAD | 索引| 工作目录|
|–|–|–|–|–|
| git reset --soft | yes | no| no|
| git reset --mixed| yes | yes | no|
| git reset --hard | yes | yes| yes|

git reset HEAD --废弃最新提交的入库状态,可以重新编辑废弃提交中新加的文件,添加全新文件,产生新的添加哦。
git reset --soft --仅仅调整提交消息,You can, but you don’t it. 提倡用git commit --amend.
git reset --hard --完全废弃最新提交。改变工作目录,原有的未保存修改将丢失,新文件被删除 。

注意事项:如果将reset 命令应用在分支名上,会造成很多没必要的问题。

2.git cherry-pick

[有趣的程序员,挑樱桃呢]。

  1. 转移一个提交:用于 将一个分支的 特定提交 引入 一个不同的分支中,常见用法是将 开发分支的提交 移植到 维护分支 上。
git checkout master              # 需要引入新提交的目标分支
git cherry-pick commit-id1       # 在master 分支上新建一个提交,提交的内容是 commit-id1相对于commit_id0的新增内容【commit_id0 是 commit-id1 的上一个提交】
# 可能伴随着解决冲突                # 没有冲突的话,就会直接复用原有的提交信息,直接在当前分支上产生一个新的提交
  1. 转移一批提交:另一个常见用途 用于重建一系列提交, 即从一个提分支中选一批提交,然后把他们引入新的提交中。
git checkout master
git cherry-pick commit-id1..commit-id3

3.git revert

与git cherry-pick 命令作用相反:引用一个新的提交,消除给定提交的内容。(我想:git revert 无需解决冲突,但是如果某个提交基于需撤销的提交,撤销该提交后可能会出现问题)记得在提交日志中记录相关的撤销信息。

git revert commit_x

4.git commit --amend修改提交

当最新的提交 需要 小范围的修改,可以使用git commit --amend 补救一下最新提交。 (其实它可以修改任意提交,但是一般情况下不推荐),对于普通git commit --amend 会弹出编辑会话,可在里面修改提交信息。

5.git rebase 变基提交

每一个在编辑的准提交都是基于某个父亲提交进行的,可以改变准提交的基础,即使用rebase操作。
一个常见的用途是–保持你正在开发的一系列提交相对于另一个分支(master)的最新提交进行的。

git checkout topic  # 切换到topic分支, topic 分支是基于 master 分支的某个提交建立的
git rebase master   # 变基础操作, topic分支基于master分支的最新提交建立。
# 以上两个命令等价于
git rebase master topic

5.1 git rebase --onto

一条分支上的开发线 整个 移植到不同的分支上

git rebase --onto master maint^ feature      # feature分支基于maint^, 将feature 提交的基础变为master分支。

5.2rebase 产生冲突,解决冲突/终止变基

变基操作一次只迁移一个提交,从原始提提交迁移到新的提交基础。因此每个移动提交都可能产生冲突。

如果在rebase 的过程中发生了冲突,git 会自动挂起 rebase进程,当你手动解决冲突后,使用git rebase --continue命令恢复变基操作。

git rebase --continue命令提交解决冲突后的内容,继续处理需要变基的下一个提交。

git rebase --skip 命令可以跳过某些提交,以避免某些冲突。但是这是非常不提倡的,产生的问题可能会像滚雪球一样。

git rebase --abort 可以终止变基础操作,使版本库恢复到变基前的状态(后面半句是否需要配合其他命令)

5.3git rebase -i

重新排序、编辑、删除、把多个提交合并成一个、把一个提交分离成多个

git rebase -i master~3  # 会自动打开编辑器,编辑重新排序文件。
# 提交默认按照最老->最新的顺序排列, 每个提交都有前都有一个pick, 放在最前面的提交将最先被拾起应用到目标分支
# 修改提交顺序后,保存退出。
# squash 提交会合并的前一个提交中,(自动弹出)合并提交信息模版,是两个提交信息的简单合并

Git 将两个提交合并为一个

6. rebase Vs merge

把在branch1上的一系列提交rebase branch2的头部 与 合并两个分支 产生的效果是一致的,即在branch2 的新头是两个分支内容的组合。rebase 还是 merge 需要依据实际情况而言。具体技巧希望后续会说

要记住的重要概念:

  1. 变基础操作会把提交重新线性化成新的提交。如果想要保留分支和合并结构需要使用

git rebase --preserve-merges master dev

  1. 不可达的旧提交会消失
  2. 如果有分支2基于 变基提交1,很有可能需要对2也进行相应的变基操作。

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

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

相关文章

Elasticsearch集群节点配置详解

注意:如果是在局域网中运行elasticsearch集群也是很简单的,只要cluster.name设置一致,并且机器在同一网段下,启动的es会自动发现对方,组成集群。 三、配置浅涉 elasticsearch的config文件夹里面有两个配置文件&#…

MongoDB修改器使用

欢迎关注我的新微信公众号 ipgame,有什么问题可以提供交流的平台,欢迎大家讨论。 对于文档的更新除替换外,针对某个或多个文档只需要部分更新可使用原子的更新修改器,能够高效的进行文档更新。更新修改器是中特殊的键, 用来指定复杂的操作,比如增加、删除或者调整键,还…

Git(12)-stash, reflog

git stash1. git stash2. reflog命令概览git stash save "WIP:xxxxx" # save后可以跟笔记,WIP:work in process git stash list # 查看存储状态栈的条目 git stash pop # 当前工作目录和索引还原至最近一次save操作的内容…

cmake生成Win64位工程

使用cmake编译64的dll 一开始使用cmake --build .来生成了dll,在导入到java项目中使用的时候,才发现是32位的。导致程序不能正常运行,报错如下: Exception in thread "main" java.lang.UnsatisfiedLinkError Cant load…

leetcode 106. 从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder [9,3,15,20,7] 后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 思路:和前…

Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解

一)Mat矩阵(图像容器)创建时CV_8UC1,CV_8UC2等参数详解 1--Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类 2--创建一个Mat对象的方法很多 3--使用Mat图像容器类创建Mat类的对象 //! default constructor Mat(); //! constructs …

TensorFlow(1)-模型相关基础概念

TensorFlow-11.Graph对象2.Session对象3.Variabels变量4. placeholders与feed_dict5. tf.train.Saver() 模型参数保存、加载Tensorflow 中文官网教程–2.0版本的官方教程 TensorFlow教程:TensorFlow快速入门教程(非常详细) pytorch Vs tensor…

memcache的使用入门C++代码

下载源码编译,memcached就是生成的主程序,启动可指定端口,memcached作为server端,依然是我们熟悉的cs模式,使用两个client一个setkey,一个getkey一百万个做测试。 ./memcached -d -m 300 -p 11211 -u root…

leetcode78 子集

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 思路&…

Fiddler抓包工具使用

先下载Fiddler 欢迎关注我的新微信公众号 ipgame,有什么问题可以提供交流的平台,欢迎大家讨论。 电脑最好是笔记本,这样能和手机保持统一局域网内;其他不多说,直接说步骤了。 一.对PC(笔记本&#xff0…

Tensorboard--模型可视化工具

Tensorboard1.tensorboard in tensorflow1.1 tensorboard的启动过程1.2 tf.summary 可视化类型1.3 tf.summary 使用demo2.tensorboard in pytorch2.1 SummaryWriter 使用demo12.2 tSummaryWriter 使用demo22.3 tensorboard 数据再读取tensorboard in tensorflow :te…

opencv findContours 报错_acrt_first_block == header

报错_acrt_first_block header 之前一直使用OpenCV3.3VS2015 void AOIAlgorithm::findUnits(Mat& blkGray, vector<vector<cv::Point>> & blkContours) {Mat blkOBW;blur(blkGray, blkGray, cv::Size(5, 5));threshold(blkGray, blkOBW, 0, 255, CV_THR…

TensorFlow(2)-训练数据载入

tensorflow 训练数据载入1. tf.data.Dataset2. dataset 创建数据集的方式2.1 tf.data.Dataset.from_tensor_slices()2.2 tf.data.TextLineDataset()2.3 tf.data.FixedLengthRecordDataset()2.4 tf.data.TFRecordDataset()3. dateset 迭代操作iterator3.1 make_one_shot_iterato…

leetcode66. 加一

给定一个由整数组成的非空数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入…

设备硬件加密方法

在机器视觉或者一些传统制造业行业里经常牵扯到软件加密算法,或者一些简单的加密,比如相机绑定,或者USB接口绑定之类的,那么针对这些硬件设备绑定加密方式,我这里简单的提供一个方法来实现: 方法很简单,从设备管理器里查找关心的USB设备,对比PID,VID和全球唯一标识GU…

addr2line 和 tombstone问题分析

做安卓开发的同学对于tombstone问题应该是很熟悉了,但是对于如何排查和分析值得总结和整理的,这篇文章对入门安卓开发的技术来说是个入门指导,同时对安卓开发的中高级开发也有借鉴。 首先我们来说下什么是tombstone : 当一个动态库(native 程序)开始执行时,系统会注册…

TensorFlow(3)-与训练相关的操作

与训练相关的操作0 gpu版本的tensor flow安装1. tf.control_dependencies(update_ops)0 gpu版本的tensor flow安装 cuda10.2 conda create -n py27 python2.7 conda activate py27 pip install tensorflow1.14.0 验证 gpu版本的tensor可用 import tensorflow as tf print(tf.t…

leetcode14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar",&quo…

Android在子线程里使用Toast报错Can't toast on a thread that has not called Looper.prepare()

在接android SDK的时候有时候为了方便debug调试查看&#xff0c;通过Toast输出相关信息&#xff0c; 实际上这个是在子线程中输出的&#xff0c;在logcat里查看有如下报错java.lang.RuntimeException: Cant toast on a thread that has not called Looper.prepare()。 解决办法…

虚拟机安装windows2012和虚拟机安装国产系统deepin

虚拟机安装windows2012和虚拟机安装国产系统deepin 一.安装windows20121.安装VMWare虚拟机2.1.注意点一&#xff1a;VMWare虚拟网卡2.2.注意点二&#xff1a;配置虚拟网络编辑器3.安装配置Windows Server 2012 R2 二.虚拟机安装deepin1.deepin官网下载ios镜像2.deepin下载合适的…