我目前正在与其他多个人一起从事一个项目。问题是我们创建了一个现有项目的分支,并且需要将所有提交从分叉过程之后压缩到单个提交,以对Bitbucket进行拉取请求。
是否有任何方法(最好使用SourceTree,否则使用终端)将已经推送的提交压缩为单个提交,使得Bitbucket中所有提交的历史记录也只是一个提交加上在我们分叉项目之前已经存在的提交?
举一个简单的项目为例,它的一个master
分支中只有几个文件。
找到了发布的答案的不错的总结。这一点更清楚: 压入commits。创建分叉时,需要创建第二个分支。该第二分支可以根据需要对远程服务器进行任意多次推送。
创建一个将被压缩的新的个人分支。
#从包含您所有提交的现有个人分支开始。
$ git checkout {ExistingBranchName}
#创建一个将被压缩的新个人分支。
$ git checkout -b {BranchName}
确定您的个人分支与现有CEF分支不同的第一次提交。
#将{BranchName}替换为新的分支名称。
#适当地将“ master”替换为另一个CEF分支(例如“ 2272”,“ 2171”等)。
$ git merge-base {BranchName}主
使用从第2步返回的提交哈希值启动交互式rebase。
$ git rebase --interactive {hash}
这将启动一个文本编辑器,其中包含您的个人分支中所有提交的列表。它看起来应该像这样:
选择59d2a23初始实现
选择752ae4c添加更多功能
选择cd302a3修复某些问题
选择5410de3修复其他问题
将第一行以外的所有内容更改为“ 壁球 ”,而不是“ pick ”。现在的内容应如下所示:
pick 59d2a23初始实现
squash 752ae4c添加更多功能
squash cd302a3修复某些问题
squash 5410de3修复其他问题
保存更改并关闭文件(可以通过按esc
并键入以下命令来完成:wq
。
现在,将打开一个新文件,其中包含来自所有提交的提交消息。重新编写提交消息,然后保存更改并关闭文件。
将修改推送到您的个人远程存储库。
#如果分支已经被推送到远程存储库,则需要添加 --force
参数。
git push origin {BranchName}或git push origin {BranchName} --force