如何在不重定基址的情况下将我的git分支提交压缩到同一个分支中?

如何在不重定基址的情况下将我的git分支提交压缩到同一个分支中?,git,git-branch,git-merge,git-checkout,git-squash,Git,Git Branch,Git Merge,Git Checkout,Git Squash,我有一个本地分支,我们正在使用git flow处理拉请求,我希望在收到PR反馈后能够压缩一些提交 如何将所有提交(例如从PR)压缩到同一个分支中 我想会是这样的: git checkout master # For master git pull # Get all branches up-to-date git checkout feature1 # Checko

我有一个本地分支,我们正在使用git flow处理拉请求,我希望在收到PR反馈后能够压缩一些提交

如何将所有提交(例如从PR)压缩到同一个分支中

我想会是这样的:

git checkout master                    # For master
git pull                               # Get all branches up-to-date
git checkout feature1                  # Checkout the branch
git checkout -b feature1_squash        # Make a copy of the branch
git branch -D feature1                 # Delete original branch
git checkout master                    # (?) Branch off latest master for safety
git checkout -b feature1               # Make new (empty) original branch
git merge --squash feature1_squash     # Merge with squash into it
git push -f feature1                   # Push, force will be required
但我不确定。
有了这么多步骤,使用一个函数将其绑定在一起并将分支名称作为参数传递似乎也是一个很好的例子。当然,自动化意味着确保处理错误、异常、边缘情况等


我不想使用交互式重基,因为对于我训练的新手来说,要正确使用它有点棘手。我也不想知道提交的数量,我只想做这个分支上存在的所有提交。

我认为你的建议是非常规的,而且对新手来说比使用
rebase-I
挤压更棘手

git-rebase-i HEAD~N
(其中
N
是返回挤压的提交数)有什么困难?您只需阅读列表,并根据需要压缩提交。“”指南有更多的细节,我认为它非常适合新用户


您可以随时制作一个演示分支,供学员练习。为了演示的目的,只需向分支机构提交5-6份提交,让学员用交互式重新基址压缩提交,然后向您提交PR,以证明他们可以在实时分支机构上处理

挤压提交(特别是分支上的连续提交)的交互式重新基准的替代方法是。
见“


这是我前面提到的“”之一。

VonC的答案几乎就在那里。但是知道你想回去是很困难的

相反,您应该使用
merge base

git reset --soft $(git merge-base YOUR_BRANCH WHERE_YOU_BRANCHED_FROM)
git commit
并编辑您的消息(或者改用git commit-m)

如果您的命令位于该分支上,您可以使用HEAD,并且假设您是从主命令分支而来,那么您的命令将是(使用origin/master,因为本地主命令可能已过时)


如果你记不起你的分支来自何处,那么你要将PR合并回的地方可能是正确的

我不太明白你到底想要什么。您是否有多个分支,每个分支上都有不同的提交,并且您希望将它们全部放在一个分支上的一个提交中,从而丢失开发历史?我有一个分支(“功能1”)有多个提交,我希望有一个提交。谢谢。重新调整汇率给我们带来了麻烦。说来话长。如果我的步骤可以打包成一个函数,那么它将隐藏复杂性。我们可以做一个演示分支,但我们最终还是会遇到拉请求评论出现的情况,我们做了一个小的更改,我们希望将其压缩。我仍然认为,隐藏复杂性(并绕过工具的典型用例,使用外部工具导致相同的行为)对您的学员是有害的。我确实相信,作为有能力的程序员,一旦他们重新调整了几次基准,这将成为他们的第二天性。您还可以使用诸如gitosis()之类的工具来控制对各种功能的访问,尽管它本身也有一层复杂性。无论如何,祝你好运,我希望他们能学好!忘了它吧,它已经不存在了。gitolite替换了它并对其进行了维护。另外一个原因是不需要知道提交的数量
git reset --soft $(git merge-base YOUR_BRANCH WHERE_YOU_BRANCHED_FROM)
git commit
git reset --soft $(git merge-base HEAD origin/master)
git commit