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

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

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

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

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

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

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

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

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

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

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

Copy code
git rebase --onto
其中:

是新的基础分支。
是你要重构的分支在原来的基础分支的位置。
是你要重构的分支。
例如,如果你的仓库中有两个分支 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
然后,你可以使用 "revert" 命令来撤销最近一次的合并:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
其中, 是要撤销的合并提交的哈希值,1 指定要撤销的分支是第一个分支。

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(记录一次cherry-pick和rebase结合的妙用)