78

我在 GitHub 上提出了拉取请求。现在存储库的所有者说要将所有提交压缩为一个。

当我键入git rebase -i记事本时,会打开以下内容:

noop

# Rebase 0b13622..0b13622 onto 0b13622
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

我在谷歌上搜索,但我不明白如何做到这一点。

4

4 回答 4

73

只是一个简单的补充来帮助其他人寻找这个解决方案。您可以传入您想要压缩的先前提交的数量。例如,

git rebase -i HEAD~3 

这将在编辑器中显示最后 3 次提交。

于 2013-05-20T04:29:16.093 回答
47

好的,我想通了...首先我必须写出git rebase -i xxxxxxxxxxxxxxxxxxxxxxxxxx 是提交的 SHA 的位置,我必须将其压缩。然后在记事本中,我将第一个编辑为挑选,其余的编辑为壁球。然后会出现一个新的记事本窗口,在第一行中我输入了新提交的名称。然后我不得不做一个力推:

git push --force origin master
于 2013-01-26T08:25:21.723 回答
31

自 2016 年 4 月 1 日起,存储库的经理可以通过在拉取请求上选择“压缩并合并”将拉取请求中的所有提交压缩为单个提交。

挤压和合并选项

如果您想在拉取请求中手动压缩提交,请参阅fontno 的答案

于 2017-05-08T23:25:59.173 回答
11

尝试git rebase -i,并为所有要压缩的提交使用 'squash'。

编辑:

git rebase -i将向您显示一个交互式编辑器,其中包含您正在变基的提交列表。每次提交之前的默认命令是“pick”,所以你只需要 s/pick/squash/ 来获取你想要压缩的所有提交,然后它们都将被压缩到他们最后一次提交。

确保你在正确的分支上重新定位。

于 2013-01-26T06:13:51.143 回答