如何压缩我的git分支提交到相同的分支没有变基?

Mic*_*ant 8 git git-merge git-checkout git-branch git-squash

我有一个本地分支,我们正在使用带有Pull请求的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
Run Code Online (Sandbox Code Playgroud)

但我不确定.
通过这么多步骤,使用函数将它们绑定在一起并将分支名称作为参数传递似乎也是一个很好的例子.当然,自动化它意味着确保处理错误,异常,边缘情况等.

我不想使用交互式rebase,因为对我训练的新手来说是正确的.我也不想知道提交的数量,我只想做这个分支上存在的所有提交.

exu*_*sum 6

VonC 的答案几乎就在那里。但是知道你想要返回 3 个提交是很困难的。

相反,你应该使用 merge-base

git reset --soft $(git merge-base YOUR_BRANCH WHERE_YOU_BRANCHED_FROM)
git commit
Run Code Online (Sandbox Code Playgroud)

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

如果您在该分支上,则可以使用 HEAD 并假设您从 master 分支,您的命令将是(使用 origin/master 由于本地 master 可能已过时)

git reset --soft $(git merge-base HEAD origin/master)
git commit
Run Code Online (Sandbox Code Playgroud)

如果您不记得从哪里分支,那么您将 PR 合并回的位置可能是正确的


Tod*_*odd 1

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

有什么困难git rebase -i HEAD~N(是N要返回进行压缩的提交数量)?您只需阅读该列表,然后根据需要压缩提交即可。“重写历史”指南有更多细节,我认为它非常适合新用户。

您始终可以创建一个演示分支供学员练习。只需对分支进行 5-6 次提交以进行演示,然后让受训者使用交互式 rebase 压缩提交,然后向您提交 PR 以证明他们可以在实时分支上处理它。