当我想将功能分支的更改引入到我的主分支中时,我经常这样做:
$ git checkout feature-branch
$ git rebase -i master # Clean up the history
$ git checkout master
$ git reset --hard feature-branch这个命令序列有快捷方式吗?
编辑: Tim指出,与其运行git reset --hard feature-branch,不如使用git merge feature-branch。不过,我想要的是像git rebase-merge feature-branch这样的快捷方式,它会产生与我的命令序列相同的主分支。
发布于 2018-06-27 17:05:23
只需为自己编写一个小脚本或别名就可以进行重基,如果(并且只在此情况下!)它成功了,在master上执行快速转发操作(假设这是您想要的结果)。
记住,任何重基都可能出错,要么是被用户中止,要么是因为在其中一个选择步骤中合并失败。幸运的是,git rebase本身是一个行为良好的Unix / Linux / POSIX工具:它在成功时为零,在失败时为非零,因此您可以判断它是成功还是失败。其他Git命令也是类似的。因此,作为小型bash / shell函数,这是可以实现的:
rebase-merge() {
case $# in
1) ;; # good
*) echo "usage: rebase-merge <branch>" 1>&2; exit 1;;
esac
git checkout "$1" &&
git rebase -i master &&
git checkout master &&
git merge --ff-only "$1"
}可以将其作为Git别名添加到全局.gitconfig中的一行表达式中。我把这样做作为读者的练习。
还有其他更好的方法可以做到这一点,但这确实是您正在做的事情(但简化为使用git mege --ff-only确保Git只执行快速转发合并,如果不可能,则会失败),它只是变成了一个命令。我添加了检查,以确保"$#“(参数数)正好是1,使用我喜欢的构造,因为它允许您提供两个参数,如果您决定要目标分支(当前硬编码为master,两次)是可选的:只需将设置从"case .”改为.至:
case $# in
1) target=master;;
2) target="$2";;
*) echo "usage ..." ...
esac然后使用"$target"代替文字master。
发布于 2018-06-27 02:01:03
我不知道交互重基内部发生了什么,但我要提到的是,这是一个更典型的重基工作流:
git checkout feature-branch
git rebase master
git checkout master
git merge feature-branch其基本思想是,通过从master中引入最新的提交来重写特性分支,然后从特性分支中重新应用唯一的提交。然后,我们只需将主分支与特性分支中的新提交一起快速转发。
请注意,这并不比您目前拥有的更短,但我相信这是用于重基的更典型的工作流。根据您在交互重基中所做的工作,我建议的上述工作流可能不再工作。
https://stackoverflow.com/questions/51053489
复制相似问题