假设您在一个git分支上有一些工作是从一个分支开始的,您希望将这些工作转移到另一个分支上,就好像您最初是从那里开始的一样。git-rebase命令为您提供了执行此操作的工具,但它很复杂,而且我永远记不住细节,所以我最终对其进行了配置,并使用了一个别名来执行此操作。
在这篇文章中,我将使用一个例子,我正在“我的工作”分支上工作,它从“旧家”开始,我想把它搬到“新家”。我最初的状态是这样的:
%git日志--一行--装饰--图表--所有*a8ab80e(HEAD->;我的工作)我的工作编辑2*5f66562我的工作编辑1 |*9682932(旧家)旧家编辑3 |/*98d09e4旧家编辑2*a6fa334旧家编辑1 |*e409e95(新家)新家编辑2 |*7d3ca09新家编辑1 |/*1b008d5(主)主编辑2*e9152aa主编辑1
执行这种移动的git工具是“git rebase--On”。命令的一般形式需要三条信息,但第三条是要移动的分支,它默认为当前分支,所以我们可以忽略它。另外两项是:你想从哪里剪断当前的分支,以及你想把它移植到哪里。命令如下所示:
在我们的示例中,我们希望从旧家开始的位置剪断分支。“git merge base”命令可以告诉我们两个分支发散的位置,因此它非常适合:
%git日志--一行--装饰--图表--全部*df22106(HEAD->;我的工作)我的工作编辑2*9ac8707我的工作编辑1*e409e95(新家)新家编辑2*7d3ca09新家编辑1 |*9682932(旧家)旧家编辑3 |*98d09e4旧家编辑2 |*a6fa334旧家编辑1 |/*1B08D5(主)主编辑2*e9152aa主编辑1
[别名]movebranch=";!f(){\:git checkout\git rebase--on$2$(git merge base$1@)\};f";
%git日志--一行--装饰--图表--全部*df22106(HEAD->;我的工作)我的工作编辑2*9ac8707我的工作编辑1*e409e95(新家)新家编辑2*7d3ca09新家编辑1 |*9682932(旧家)旧家编辑3 |*98d09e4旧家编辑2 |*a6fa334旧家编辑1 |/*1B08D5(主)主编辑2*e9152aa主编辑1
谢谢分享。知道你也很难记住如何使用git,我对git的挫折感觉好了一点。:)
姓名是必需的。需要电子邮件或网络。电子邮件赢得';我不会被展示,我赢了';不要给你发垃圾邮件。你的网站赢了';不能被搜索引擎索引。