Git:包含交互式重基的合并工作流的快捷方式
当我想将功能分支的更改引入主分支时,我通常会执行以下操作:Git:包含交互式重基的合并工作流的快捷方式,git,Git,当我想将功能分支的更改引入主分支时,我通常会执行以下操作: $ git checkout feature-branch $ git rebase -i master # Clean up the history $ git checkout master $ git reset --hard feature-branch 这个命令序列有快捷方式吗 EDIT:Tim Biegeleisen指出,与其运行git reset--hard feature branch,我可以简单地git merge
$ git checkout feature-branch
$ git rebase -i master # Clean up the history
$ git checkout master
$ git reset --hard feature-branch
这个命令序列有快捷方式吗
EDIT:Tim Biegeleisen指出,与其运行
git reset--hard feature branch
,我可以简单地git merge feature branch
。不过,我想要的是一个快捷方式,如git-rebase-merge-feature-branch
,它会产生与我的命令序列相同的主分支。我不知道交互式rebase中发生了什么,但我要提到的是,这是一个更典型的rebase工作流:
git checkout feature-branch
git rebase master
git checkout master
git merge feature-branch
其基本思想是,我们通过引入来自master的最新提交,然后重新应用来自feature分支的唯一提交来重写feature分支。然后,我们可以使用来自功能分支的新提交快速前进主分支
请注意,这并不比您当前拥有的短,但我相信这是与重定基址一起使用的更典型的工作流。根据您在交互式基础中所做的工作,我建议的上述工作流可能不再有效。我不知道交互式基础中发生了什么,但我要提到的是,这是一个更典型的基础工作流:
git checkout feature-branch
git rebase master
git checkout master
git merge feature-branch
其基本思想是,我们通过引入来自master的最新提交,然后重新应用来自feature分支的唯一提交来重写feature分支。然后,我们可以使用来自功能分支的新提交快速前进主分支
请注意,这并不比您当前拥有的短,但我相信这是与重定基址一起使用的更典型的工作流。取决于您在交互式重基中所做的工作,我建议的上述工作流可能不再有效。只需为自己编写一个执行重基的小脚本或别名,如果(并且仅当!)成功,则在
主机上执行快进操作(假设这是您想要的结果)
请记住,任何重基都可能出错,可能是由于用户中止,也可能是由于在其中一个cherry pick步骤中的合并失败。幸运的是,git-rebase
本身是一个性能良好的Unix/Linux/POSIX工具:它在成功时为零,在失败时为非零,因此您可以判断它是成功还是失败。其他Git命令也类似。因此,这可以作为小型bash/sh 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"
}
然后使用“$target”
而不是literalmaster
只需为自己编写一个小脚本或别名来执行重基,如果(且仅当!)成功,则在master
上执行快进操作(假设这是您想要的结果)
请记住,任何重基都可能出错,可能是由于用户中止,也可能是由于在其中一个cherry pick步骤中的合并失败。幸运的是,git-rebase
本身是一个性能良好的Unix/Linux/POSIX工具:它在成功时为零,在失败时为非零,因此您可以判断它是成功还是失败。其他Git命令也类似。因此,这可以作为小型bash/sh 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"
}
然后使用“$target”
而不是文本master
在交互式重新基准中发生了什么?我们需要知道这一点才能回答你的问题,我想。我经常对提交进行重新排序或挤压,或编辑提交消息。在交互的重新基址中发生了什么?我想,我们需要知道这一点才能回答您的问题。通常我会重新排序或挤压提交,或编辑提交消息。我更喜欢不进行合并提交。@sjakobi我的工作流通常不会导致合并提交。我怀疑你不懂重新定基调。我只是不知道快进合并不会导致合并提交。谢谢您知道将这一系列命令简化为单个命令的好方法吗?@sjakobi Fast forwards可能会导致合并提交,如果有人将您的repo(例如Bitbucket、GitHub)配置为始终进行合并提交。但是,我不知道如何缩短时间。我不喜欢合并提交。@sjakobi我的工作流通常不会导致合并提交。我怀疑你不懂重新定基调。我只是不知道快进合并不会导致合并提交。谢谢您知道将这一系列命令简化为单个命令的好方法吗?@sjakobi Fast forwards可能会导致合并提交,如果有人将您的repo(例如Bitbucket、GitHub)配置为始终进行合并提交。但是,我不知道有什么办法可以把它缩短。谢谢!这就是我要找的!:)一旦我弄清楚git别名,我会回来报告的。谢谢!这就是我要找的!:)一旦我弄清楚git别名,我就会回来报告。