推送后如何压缩Bitbucket上的提交?

Jos*_*hua 6 git bitbucket sourcetree

我目前正在与其他多个人一起从事一个项目。问题是我们创建了一个现有项目的分支,并且需要将所有提交从分叉过程之后压缩到单个提交,以对Bitbucket进行拉取请求。

是否有任何方法(最好使用SourceTree,否则使用终端)将已经推送的提交压缩为单个提交,使得Bitbucket中所有提交的历史记录也只是一个提交加上在我们分叉项目之前已经存在的提交?

举一个简单的项目为例,它的一个master分支中只有几个文件。

Jos*_*hua 7

找到了发布的答案的不错的总结。这一点更清楚: 压入commits。创建分叉时,需要创建第二个分支。该第二分支可以根据需要对远程服务器进行任意多次推送。

  1. 创建一个将被压缩的新的个人分支。
    #从包含您所有提交的现有个人分支开始。
    $ git checkout {ExistingBranchName}
    #创建一个将被压缩的新个人分支。
    $ git checkout -b {BranchName}

  2. 确定您的个人分支与现有CEF分支不同的第一次提交。
    #将{BranchName}替换为新的分支名称。
    #适当地将“ master”替换为另一个CEF分支(例如“ 2272”,“ 2171”等)。
    $ git merge-base {BranchName}主

  3. 使用从第2步返回的提交哈希值启动交互式rebase。
    $ git rebase --interactive {hash}
    这将启动一个文本编辑器,其中包含您的个人分支中所有提交的列表。它看起来应该像这样:
    选择59d2a23初始实现
    选择752ae4c添加更多功能
    选择cd302a3修复某些问题
    选择5410de3修复其他问题

  4. 将第一行以外的所有内容更改为“ 壁球 ”,而不是“ pick ”。现在的内容应如下所示:
    pick 59d2a23初始实现
    squash 752ae4c添加更多功能
    squash cd302a3修复某些问题
    squash 5410de3修复其他问题

  5. 保存更改并关闭文件(可以通过按esc并键入以下命令来完成:wq
    现在,将打开一个新文件,其中包含来自所有提交的提交消息。重新编写提交消息,然后保存更改并关闭文件。

  6. 将修改推送到您的个人远程存储库。
    #如果分支已经被推送到远程存储库,则需要添加 --force参数。
    git push origin {BranchName}git push origin {BranchName} --force


Alw*_*man 5

有一个更简单的方法。

如果您绝对确定没有人会使用该特定分支,则可以执行以下操作:

  1. 创建一个包含每个人提交的本地分支。
  2. 在本地分支上执行 git log 以确定第一个分支提交之前的非分支提交的哈希值。
  3. 做: git reset --soft <hash>
  4. 做: git commit 创建您想要的单个提交消息。
  5. 做:git rebase -i将您的本地分支移动到 master 的尖端。
  6. 修复任何合并冲突。
  7. git push 您的更改到用于 PR 的远程分支。如果已经存在,请使用 -f 进行强制推送。