git rebase 变基命令——移花接木
语法
git rebase [--onto <newbase>] <since> [<till>]
git rebase (--continue | --skip | --abort | --quit)
提示:方括号 [ ]
表示可选,...
表示可以有多项。
描述
-
① 首先会执行 git checkout 切换到 <till>;
-
② 将 <since>…<till>所表示的提交范围写到一个临时文件中;
<since>..<till> 是指包含<till>的所有历史提交,排除<since>及<since>的历史提交后形成的版本范围。
-
③ 将当前分支强制重置(git reset --hard)到 <newbase>(或 <since> 如果未指定 <newbase> );
-
④ 从保存在临时文件中的提交列表中,将提交逐一按顺序重新提交到重置之后的分支上;
-
⑤ 如果遇到提交已经在分支中包含,则跳过该提交;
-
⑥ 如果在提交过程中遇到冲突,则变基过程暂停,用户解决冲突后,执行 git rebase --continue 继续变基操作。或者执行 git rebase --abort 就此终止变基操作并切换到变基前的分支上。
git rebase <since> [<till>]
假设有如下分支
则执行如下命令
结果将会是
git rebase --onto <newbase> <since> <till>
假设有如下分支
则执行如下命令
结果将会是
冲突解决
如果发生冲突,git rebase 会在第一个有问题的提交停止,并在文件中留下冲突标记。您可以使用 git diff 来定位标记 (<<<<<<) 并进行编辑以解决冲突。对于你编辑的每个文件,你需要告诉Git冲突已经解决,这通常是用如下命令完成
git add <filename>
在手动解决冲突并使用所需的解决方案更新暂存区之后,您可以使用如下命令继续变基流程
git rebase --continue
或者你可以使用如下命令撤销 git rebase
git rebase --abort
--onto <newbase> 选项——指定新提交起点
新提交的起始点。如果没有指定——onto选项,则起始点为 <since>。可以是任何有效的提交,而不仅仅是现有的分支名称。
--continue 选项——继续变基
在解决合并冲突后重新启动变基流程。
--abort 选项——终止变基
中止变基操作并将 HEAD 重置到原始分支。如果在 rebase 操作开始时提供了 <till>,那么 HEAD 将被重置为 <till>。否则,HEAD 将被重置到变基操作开始时的位置。
--skip 选项——跳过冲突的提交
跳过当前冲突的提交,继续变基流程。
--quit 选项——终止变基
中止变基操作,但不会将HEAD重置回原始分支。因此,暂存区和工作区也保持不变。