我在本地存储库中有一堆主题相似的提交。我想把它们合并成一个单独的提交,然后再进行远程操作。我该怎么做?我认为rebase是这样做的,但我不明白这些文档。
当前回答
这里有很多可行的答案,但我发现这个是最简单的。这个命令将打开一个编辑器,在这里你可以将pick替换为squash,以便将它们删除/合并为一个
git rebase -i HEAD~4
其中,4是你想要压缩成一个的提交数。这里也有解释。
如果您希望压缩包含第一次提交的提交,则使用此命令
git rebase -i --root
其他回答
我想到了
#!/bin/sh
message=`git log --format=%B origin..HEAD | sort | uniq | grep -v '^$'`
git reset --soft origin
git commit -m "$message"
合并、排序、统一和删除提交消息中的空行。我使用这个对github维基进行本地更改(使用咕噜)
我压缩多次推送的方法是(也许你向你自己的分支推送了很多提交,现在你想做一个pull请求,你不想用你已经推送的许多提交来混乱它们)。我这样做的方式(就我所知,没有其他更简单的选择)。
创建一个新的分支(你希望将请求拉到的原始分支)。 推送新创建的分支。 合并分支并提交(已经推送)到新分支。 重新建立新的分支和挤压。 推送新分支。 为新分支创建新的拉请求,该分支现在有单次提交。
例子:
git checkout from_branch_you_wish_to_pull_request_to
git checkout -b new_branch_will_have_single_squashed_commit
git push -u new_branch_will_have_single_squashed_commit
git merge older_branch_with_all_those_multiple_commits
git rebase -i (here you squash)
git push origin new_branch_will_have_single_squashed_commit
现在可以将请求拉入from_branch_you_wish_to_pull_request_to
这里有很多可行的答案,但我发现这个是最简单的。这个命令将打开一个编辑器,在这里你可以将pick替换为squash,以便将它们删除/合并为一个
git rebase -i HEAD~4
其中,4是你想要压缩成一个的提交数。这里也有解释。
如果您希望压缩包含第一次提交的提交,则使用此命令
git rebase -i --root
您可以使用交互式Rebase压缩(加入)提交。YouTube上有一个非常棒的视频,展示了如何在命令行或SmartGit上做到这一点:
https://www.youtube.com/watch?v=qi_QAFrmHJM
如果你已经是一个SmartGit用户,那么你可以选择你所有的提交(按住Ctrl键),然后打开上下文菜单(右键单击)来压缩你的提交。
非常舒服:
Atlassian还有一个非常好的教程,展示了它是如何工作的:
https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase-i
你可能想要使用交互式重基,在那个链接中有详细的描述。
如果你搜索“git rebase interactive”,你可以找到其他好的资源。