繁体   English   中英

合并提交并推送到分叉的仓库

[英]Combine commits and push to forked 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

在推送 Git 之前合并多个提交

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

收回您当地的分支机构。 假设您的分支是主分支,而您的后分支名称类似于主备份。 您可以使用以下 git 命令。

git branch master-backup

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

git branch master-backup master

squash your commit点击链接 现在分支通过组合所有提交具有单个提交。

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

git reset --hard master-backup (将您的旧提交返回给本地主机)

their/project Github 存储库的所有者总是可以通过拉取请求 UI 选择Squash and Merge来自您的分支的提交来为您执行此操作:

在此处输入图像描述

对我有用的是使用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 以及其他进一步提交的所有更改。

要将您的 commit#1 推送到 fork 存储库,请执行以下操作:

git push origin <branch_name>

您可以在此处使用 git reset

git reset --soft HEAD~N (N 是提交次数)。

如果您执行 git status,您将看到您更改的所有文件为绿色

再次执行 git 重置。 所以你会看到所有的文件都是红色的。 并且分支将与 master 一起更新

现在你可以做一个 git add 。 和 git commit -m ""

这将在一次提交中提供所有更改

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM