你可能不知道的gitrevert操作细节
git revert主要⽤于还原⼀个或多个现有提交,并⽣成⼀条新的更改记录。美国大老鼠
⽇常开发过程中,可能会出现要发版的时候,发现master分⽀上合并了这⼀期不需要发版的功能点,需要将这些提交还原。
以下是给出的git revert命令相关的选项。
git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>
git revert (--continue | --skip | --abort | --quit)
3月15
选项
<commit>...
⽤于还原指定的某次提交记录
git revert 版本号
git revert HEAD~3
git revert -n aster~2
对于合并的提交记录,如果直接使⽤git revert 2a06e3ca2840277c6c3d1991f4f815cec0fea546,则会提⽰下⾯的错误信息:error: 提交 2a06e3ca2840277c6c3d1991f4f815cec0fea546 是⼀个合并提交但未提供 -m 选项。 fatal: 还原失败
git revert -m 2a06e3ca2840277c6c3d1991f4f815cec0fea546
error: 选项 `mainline' 期望⼀个⼤于零的数字
这就需要⽤到下⾯的这个命令选项
-m parent-number | --mainline parent-number
该选项主要⽤于还原merge操作产⽣的记录。也是我们在⼯作场景中最容易⽤到的⼀个命令。
引⾃官⽹原⽂
Usually you cannot revert a merge becau you do not know which side of the merge should be considered the mainline. This option specifies the parent number (starting from 1) of the mainline and allows revert to rever the change relative to the specified parent.
Reverting a merge commit declares that you will never want the tree changes brought in by the merge. As a result, later merges will only bring in tree changes introduced by commits that are not ancestors of the previously reverted merge. This may or may not be what you want.
合并产⽣的提交记录会指向两个⽗结点:如下图所⽰
在还原合并的提交的时候我们要指定以那个⽗节点为mainline本保留该主线的提交记录。
所以就会出现我们经常会⽤到的指令:
git revert -m 1 32f842e7542bfb8b5d4dcf8fbe905028b1b99f33
传统美食作文这个命令的具体含义就是还原feat_revert分⽀合并过来的提交记录。并保留relea-brance的提交记录。
如果你是女孩我们可以看到在relea-brance分⽀⽣成了⼀个新的提交,提交的内容就是还原了
feat_revert分⽀合并过来的提交记录。
如果执⾏#2⽗节点为mainline
git revert -m 2 32f842e7542bfb8b5d4dcf8fbe905028b1b99f33
这个命令的具体含义就是还原relea-brance的提交记录,并保留feat_revert分⽀合并过来的提交记录。
执⾏结果如下:
开背视频-e | --edit
该选项是默认选项,允许我们修改提交的commit message。
--no-edit
该选项不允许我们修改提交的commit message,会直接⽣成提交信息,并⾃动提交。-n | --no-commit
慷慨激扬
风卷残云不进⾏⾃动提交,默认会⾃动提交commit.
quencer⼦命令
--continue
继续当前的还原操作。在处理完冲突后可以使⽤这个命令继续操作。
--skip
跳过当前提交并继续序列的其余部分。咸鱼肉饼
--quit
退出当前正在进⾏的操作。可⽤于在cherry-pick或revert失败后清除quencer state。
--abort
取消操作,返回之前的状态。