结合提交并推送到分叉回购

时间:2018-02-20 17:46:45

标签: git

我有一个repo(bitbucket.org/mine/project),我从另一个仓库(client.com/theirs/project)分叉。我做了一堆提交到我的,现在我想把它推回他们的回购。我知道我可以把它推到上游回购,但似乎包括所有提交。我目前的解决方法是将两个项目克隆并将文件从我的repo工作目录复制到他们的repo工作目录并提交。绝对不理想。当我推送时,如何将我的提交压缩到单个提交但是保留我的历史记录

尝试说明问题:

Client       ---- forked ------>      Bitbucket

their/project                         mine/project

commit #A                             commit #A
commit #B                             commit #B
commit #C                             commit #C

                                  |-  commit #1
                                  |   commit #2
                                  |   commit #3
commit #D    <----- how? ------   |-  commit #4   // I want to keep my commits

引用:

https://help.github.com/articles/merging-an-upstream-repository-into-your-fork/#platform-mac

Combining multiple commits before pushing in Git

3 个答案:

答案 0 :(得分:0)

我不确定是否有任何直接的方法可以做到这一点,但我可以建议你一个解决方法:

取回当地分行。假设您的分支是主分支,并且您的后备名称就像主备份一样。你可以使用下面的git命令。

git branch master-backup

如果你在同一个分支上。或者您也可以使用

git branch master-backup master

squash your commit关注link。 现在,branch通过梳理所有提交来进行单一提交。

git push origin master(通过单次提交将压缩后的推送推送到上游)

git reset --hard master-backup(让你的旧提交回到当地主人)

答案 1 :(得分:0)

their/project Github repo的所有者可以通过Pull Request UI选择Squash and Merge来自您的分支的提交来为您做这件事:

enter image description here

答案 2 :(得分:0)

对我有用的是使用git rebase

您可以使用git rebase -i HEAD~3进行操作,其中'3'是HEAD位置,您将在此处开始修改...在您的示例中将是commit #1,因为您会将所有提交合并到第一次提交,因此您可以执行以下操作:

git rebase -i HEAD~4 //Since you have 4 new commits done

然后您会看到类似的内容:

pick commit#1
pick commit#2
pick commit#3
pick commit#4

并且您还将看到以下说明进行基准调整。所以您应该将其更改为:

pick commit#1
squash commit#2
squash commit#3
squash commit#4

应用此选项时,如果需要,还需要更改提交消息,因此只能更改第一个提交消息,并删除其他提交消息。最后,您将只有commit#1以及其他所有后续提交的所有更改。

要将您的提交#1推送到派生仓库中,请执行以下操作:

git push origin <branch_name>