记录一次cherry-pick和rebase结合的妙用

背景是这样:本地分支合并了test分支,现在要上线,需要把本地分支合并到master分支,但是本地分支多出来了test分支的commit,有些commit还不能上线,怎么能把test分支的commit剔除,合并到master中

如果你想在合并到 master 分支时剔除 test 分支的提交,你可以使用 "rebase" 命令来重构你的本地分支。

首先,你需要切换到本地分支:

Copy code
git checkout <local-branch>
然后,使用 "rebase" 命令来重构你的本地分支,让它基于 master 分支,并排除 test 分支的提交:

Copy code
git rebase --onto master <local-branch>^ test
这个命令会把你的本地分支的所有提交重新应用到 master 分支上,排除 test 分支的提交。这意味着你的本地分支在 master 分支的基础上新增了所有提交,但没有 test 分支的提交。

在这个过程中,Git 会让你重新编辑每个提交的信息,所以你还可以修改你的提交信息。

一旦你完成了重构,你就可以使用 "git push" 命令将你的本地分支推送到远程仓库,并在 master 分支上合并你的提交。

请注意,这种方法会修改你的提交历史,所以如果你的本地分支已经被其他人使用,你应该谨慎使用。

git rebase --onto 是什么
"git rebase" 命令是用来重构 Git 仓库中的提交历史的。它可以让你把一个分支的提交序列应用到另一个分支上,或者把一个分支的提交序列放到另一个分支的后面。

"git rebase" 命令可以接受很多参数,其中 "--onto" 参数是用来指定新的基础分支的。它的格式是:

Copy code
git rebase --onto <new-base> <upstream> <branch>
其中:

<new-base> 是新的基础分支。
<upstream> 是你要重构的分支在原来的基础分支的位置。
<branch> 是你要重构的分支。
例如,如果你的仓库中有两个分支 A 和 B,你希望把 A 分支的提交序列应用到 B 分支上,你可以这样执行:

Copy code
git rebase --onto B A
这个命令会把 A 分支的所有提交重新应用到 B 分支上,把 B 分支看做新的基础分支。这意味着 A 分支的提交会在 B 分支的后面新增,而不是在 B 分支的前面合并。

git rebase --onto master feat/feat/mr-ggq-20221214-tp-pltj^ test 这个是什么意思
这个命令的意思是:使用 "git rebase" 命令重构本地分支 "feat/feat/mr-ggq-20221214-tp-pltj",把它基于 "master" 分支,并排除 "test" 分支的提交。

具体来说,"git rebase" 命令会把 "feat/feat/mr-ggq-20221214-tp-pltj" 分支的所有提交重新应用到 "master" 分支上,排除 "test" 分支的提交。这意味着 "feat/feat/mr-ggq-20221214-tp-pltj" 分支在 "master" 分支的基础上新增了所有提交,但没有 "test" 分支的提交。

你可以理解为,"git rebase --onto master feat/feat/mr-ggq-20221214-tp-pltj^ test" 命令把 "feat/feat/mr-ggq-20221214-tp-pltj" 分支的提交序列应用到 "master" 分支上,排除 "test" 分支的提交。

请注意,"feat/feat/mr-ggq-20221214-tp-pltj^" 表示 "feat/feat/mr-ggq-20221214-tp-pltj" 分支的上一个提交。在这个命令中,它用来表示 "feat/feat/mr-ggq-20221214-tp-pltj" 分支在原来的基础分支(即 "master" 分支)的位置。

$ git rebase --onto master server client
是什么意思
这个命令的意思是:使用 "git rebase" 命令重构本地分支 "client",把它基于 "master" 分支,并排除 "server" 分支的提交。

具体来说,"git rebase" 命令会把 "client" 分支的所有提交重新应用到 "master" 分支上,排除 "server" 分支的提交。这意味着 "client" 分支在 "master" 分支的基础上新增了所有提交,但没有 "server" 分支的提交。

你可以理解为,"git rebase --onto master server client" 命令把 "client" 分支的提交序列应用到 "master" 分支上,排除 "server" 分支的提交。

请注意,"git rebase" 命令会修改你的提交历史,所以如果你的本地分支已经被其他人使用,你应该谨慎使用。

$ git rebase --onto master server^ client
这个命令的意思与上一个命令类似,都是使用 "git rebase" 命令重构本地分支 "client",把它基于 "master" 分支,并排除 "server" 分支的提交。

不同的是,这个命令使用了 "server^" 而不是 "server" 来表示 "server" 分支的上一个提交。这意味着 "client" 分支会在 "server" 分支的上一个提交后面新增,而不是在 "server" 分支的最新提交后面新增。

你可以理解为,"git rebase --onto master server^ client" 命令把 "client" 分支的提交序列应用到 "server" 分支的上一个提交后面,排除 "server" 分支的提交。

请注意,"git rebase" 命令会修改你的提交历史,所以如果你的本地分支已经被其他人使用,你应该谨慎使用。

git 不小心把测试分支合入了开发分支,怎么把开发分支变回没合入的
如果你不小心把测试分支合并到了开发分支,你可以使用 "revert" 命令来撤销这个合并。

首先,你需要切换到开发分支:

Copy code
git checkout <dev-branch>
然后,你可以使用 "revert" 命令来撤销最近一次的合并:

Copy code
git revert HEAD
这个命令会在开发分支上新建一个提交,撤销最近一次的合并。这样,开发分支就变回了没有合并测试分支的状态。

如果你想撤销更早的合并,你可以使用 "git revert" 命令的 "-n" 参数来指定要撤销的合并的提交号:

Copy code
git revert -n <commit-hash>
例如,如果你想撤销开发分支上的第三次合并,你可以这样执行:

Copy code
git revert -n HEAD~3
这个命令会在开发分支上新建一个提交,撤销第三次合并。

请注意,使用 "git revert" 命令会修改你的提交历史,所以如果你的开发分支已经被其他人使用,你应该谨慎使用。

cherry pick 是干啥的
"cherry pick" 命令是用来从一个分支中选择某个提交,并把它应用到另一个分支上的。它可以帮助你从一个分支中挑选出你需要的提交,而不用把整个分支合并到另一个分支上。

例如,假设你有两个分支 A 和 B,你希望把 A 分支上的第三次提交应用到 B 分支上。你可以这样执行:

Copy code
git cherry-pick <commit-hash>
其中,<commit-hash> 是你要选择的提交的哈希值。这个命令会在 B 分支上新增一个提交,并把 A 分支上的第三次提交应用到这个提交上。

你也可以使用 "git cherry-pick" 命令的 "-x" 参数来指定这个提交的来源分支:

Copy code
git cherry-pick -x <commit-hash>
这个命令会在 B 分支上新建一个提交,并把 A 分支上的第三次提交应用到这个提交上。同时,会在提交信息中加入来源分支的信息,方便你追踪这个提交的来源。

请注意,使用 "git cherry-pick" 命令会修改你的提交历史,所以如果你的目标分支已经被其他人使用,你应该谨慎使用。

开发分支合入了测试分支,怎么在合并生产分支的时候,剔除掉测试分支中除去开发分支的commit
如果你想在合并生产分支的时候,剔除测试分支中除去开发分支的提交,你可以使用 "git cherry-pick" 命令来实现。

首先,你需要切换到生产分支:

Copy code
git checkout <prod-branch>
然后,你可以使用 "git cherry-pick" 命令来选择测试分支中除去开发分支的提交:

Copy code
git cherry-pick <commit-hash1> <commit-hash2> ...
其中,<commit-hash1>,<commit-hash2> 等是你要选择的提交的哈希值。这些提交应该是测试分支中除去开发分支的提交。这个命令会在生产分支上新增多个提交,并把测试分支中的这些提交应用到这些提交上。

你也可以使用 "git cherry-pick" 命令的 "-x" 参数来指定这些提交的来源分支:

Copy code
git cherry-pick -x <commit-hash1> <commit-hash2> ...
这个命令会在生产分支上新建多个提交,并把测试分支中的这些提交应用到这些提交上。同时,会在提交信息中加入来源分支的信息,方便你追踪这些提交的来源。

error: commit 256bc4ef8259a51bfb9615de52ecdab87fc3e8e5 is a merge but no -m option was given. 怎么能把别人合并的记录revert掉
如果你在使用 "git revert" 命令时收到了 "commit is a merge but no -m option was given" 的错误消息,这通常是因为你要撤销的提交是一个合并提交,而你没有指定 "-m" 参数。

合并提交是指在合并两个分支时,Git 会自动生成的一种特殊的提交。它包含了两个分支的所有提交,并记录了这两个分支的合并信息。

如果你要撤销一个合并提交,你需要使用 "-m" 参数指定要撤销的分支:

Copy code
git revert -m 1 <commit-hash>
其中,<commit-hash> 是要撤销的合并提交的哈希值,1 指定要撤销的分支是第一个分支。

你也可以使用 2 来指定要撤销的分支是第二个分支:

Copy code
git revert -m 2 <commit-hash>
这个命令会在当前分支上新建一个提交,撤销要撤销的分支的

git rebase -i 怎么合并从commit-a 到commit-b 的所有提交
"git rebase -i" 命令可以让你重构本地分支的提交历史,包括合并提交。

如果你想合并从提交 A 到提交 B 的所有提交,你可以在使用 "git rebase -i" 命令时指定这个范围。

首先,你需要切换到你要重构的分支:

Copy code
git checkout <branch>
然后,你可以使用 "git rebase -i" 命令来打开编辑器,并指定提交 A 到提交 B 的范围:

Copy code
git rebase -i <commit-a>^..<commit-b>
其中,<commit-a>^ 表示提交 A 的上一个提交,<commit-b> 表示提交 B。这个命令会打开编辑器,显示从提交 A

git rebase 时 用 d # d, drop <commit> = remove commit 是什么意思

"git rebase" 命令可以让你重构本地分支的提交历史。当你使用 "git rebase -i" 命令时,它会打开编辑器,让你选择要重构的提交。在编辑器中,你可以使用一些命令来指定对每个提交的操作。

"d" 命令是 "drop" 的缩写,它表示删除提交。当你在编辑器中使用 "d" 命令时,它会删除这个提交。例如,如果你想删除本地分支的第三次提交,你可以在编辑器中输入:

Copy code
d # drop commit
这个命令会在重构时删除这个提交。

请注意,使用 "git rebase" 命令会修改你的提交历史,所以

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容