将多个不相关的提交推送到远程git仓库

时间:2011-07-07 21:33:15

标签: git gerrit

我有一种情况,我正在处理特定分支上的两个不同项目。我完成了项目“A”,提交了更改,并将更改推送到远程。此更改“A”目前正在审核中,因此尚未合并到分支机构。与此同时,我已开始为同一分支中的另一个项目进行无关的更改,将此更改称为“B”。我已完成对此更改的编码,我已准备好提交并推送此更改。但是我不确定应该怎么做,因为改变“A”还没有合并。如何将这两个更改“A”和“B”作为不相互依赖的单独更改?

2 个答案:

答案 0 :(得分:3)

首先,您需要确定将成为更改A和B的公共父级的提交。如您所述,这是提交A的父级。使用git log查找提交的哈希值答:请注意,您只需键入提交哈希的前几个字母/数字即可。我们假装它是“parent_commit”

现在检查这个提交,我们将把它作为变更B的新分支的负责人。

git checkout parent_commit

接下来从中创建一个新分支,我们将在其中提交B更改。

git checkout -b changeB

最后,使用git addgit commit在此新分支上提交更改B.完成后,执行git push从独立于更改A的新分支推送提交B.或者,如果您已提交更改B,则使用git cherry-pick commitB,然后使用git pull

现在,您将拥有A的原始分支,以及带有B的新分支,将历史记录共享到A的父级。

结束评论:如果你已经提交了B并为它做了一个分支(并且已经检出)你可以完成另一个答案中提到的rebase one-liner:

git rebase --onto master commit_A_sha

答案 1 :(得分:0)

与Shelhamer的回应基本相同;但您可以使用git rebase --onto在单个命令中获得相同的结果。找到“旧”父级的SHA ID(示例中为A),以及新父级的SHA ID(例如 master )。然后假设你已经检查了问题(B)的分支,运行:

git rebase --onto <new parent> <old parent>

这将从A开始基本上“拾取”分支B上的所有内容并将其移动,使其基于主人。然后正常git push