如何在不使用rebase的情况下将我的git分支提交压缩到同一分支中?

12

我有一个本地分支,我们使用git-flow和Pull Requests,我想在收到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

但我不确定。
有这么多步骤,使用一个函数将所有内容绑在一起,并只传递分支名称作为参数似乎是一个不错的选择。当然,自动化意味着要确保处理错误、异常、边缘情况等。

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


1
我不太明白你想要什么。你有几个分支,每个分支都有不同的提交记录,你想将它们全部合并到一个分支的一个提交记录中,从而丢失开发历史记录吗? - houtanb
1
我有一个分支(“feature1”),其中有几个提交,我希望只有一个提交。 - Michael Durrant
3个回答

7
VonC的回答几乎就要到位了,但是知道你想要回退3个提交是很困难的。相反,你应该使用merge-base。
git reset --soft $(git merge-base YOUR_BRANCH WHERE_YOU_BRANCHED_FROM)
git commit

并编辑您的消息(或使用git commit -m)

如果您在该分支上,可以使用HEAD,并且假设您从主分支创建了分支,则您的命令将是(使用origin / master,因为本地主分支可能过时)

git reset --soft $(git merge-base HEAD origin/master)
git commit

如果您不能记得从哪个分支进行的分支,那么将PR合并回来的位置很可能是正确的。

加一是因为不需要知道提交的数量。 - Michael Durrant

1

我认为你所提出的方法是不常规的,对于新手来说比使用rebase -i更加棘手。

git rebase -i HEAD~N有什么难度(其中N是要回溯的提交数量,以进行压缩)?您只需阅读列表,根据需要压缩提交即可。 "重写历史"指南有更多详细信息,我认为它非常适合新用户。

您可以为您的学员创建一个演示分支进行练习。只需将5-6个提交用于演示目的,并让学员使用交互式rebase压缩提交,然后向您发起PR以证明他们可以在实际分支上处理它。


谢谢。修补已经给我们带来了问题。(太)长的故事。如果我的步骤可以打包成一个函数,它会隐藏复杂性。我们可以做一个演示分支,但我们仍然会遇到Pull Request评论的情况,而我们会做出一些小改变,我们想要压缩它。 - Michael Durrant
1
我仍然相信隐藏复杂性(并且规避工具的典型用例,并使用外部工具导致相同的行为)会对您的学员造成不利影响。 我确实相信,作为有能力的程序员,一旦他们重新定位几次,它将变得自然。您还可以使用像gitosis(https://git-scm.com/book/en/v1/Git-on-the-Server-Gitosis)这样的工具来控制对各种功能的访问,尽管它也是自己的复杂层面。无论如何,祝你好运,希望他们能够学得好! - Todd
忘掉gitosis吧,它已经不再维护了。gitolite取代了它并且得到了维护。 - Matthieu Moy

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接