错误地合并git PR后如何重置

时间:2015-12-16 19:28:15

标签: git github

我错误地合并了一个git pull请求(其他人必须合并它,而不是我......)如何回滚并再次创建拉取请求

这就是我所做的:

1)创建了一个拉动请求,将branchA合并到branchB(PR#44)

2)(错误地)合并了拉取请求#100(在GitHub网站上)

3)单击“还原”按钮以“创建新的拉取请求以进行还原 这些变化“(PR#45)

4)合并拉取请求#45

现在我正在尝试再次创建一个pull branch请求将branchA合并到branchB但它不会让我因为“没有任何提交要合并”(我在Mac上使用git桌面gui)

我应该将actionB重置为action(1)之前的最后一次提交吗?

然后创建一个拉取请求以将branchA合并到branchB?

如果是,怎么样?这是正确的吗?

在branchB上:

git reset --hard 4f5oo77

git commit -am "reset to the last commit before merging PR 44"

git push origin

编辑:这是branchB上的日志历史记录

我想回去提交“4f5oo77 2015-12-01 |来自my-repo / branchA的合并拉取请求#36”

*   87a8888 2015-12-16 | Merge pull request #45 from my-repo/revert-44-branchA (HEAD, origin/branchB, branchB)
|\  
| * 55bd11c 2015-12-16 | Revert "merge branchA" (origin/revert-44-branchA) 
|/  
*   y77447a 2015-12-16 | Merge pull request #44 from my-repo/branchA 
|\  

....

| |/  
* |   4f5oo77 2015-12-01 | Merge pull request #36 from my-repo/branchA
...

EDIT-2 这就是最终要做的事情:

git checkout branchB
git reset --hard 4f5oo77
git push --force-with-lease

此时,branchB在不需要的合并之前回到了“状态”,我能够创建一个拉动请求,将branchA合并到branchB

3 个答案:

答案 0 :(得分:1)

除非您真的无法修改已经共享(推送)的历史记录,否则我认为使用' git reset'和' git push --force-with-lease'而不是通过堆叠恢复提交来放弃你的历史!

答案 1 :(得分:0)

这里的问题是branchA中的提交已经在branchB中(即使它们已经被以后的提交还原),所以GitHub认为没有任何内容合并。

起初我想也许你可以用git rebase来解决这个问题,但实际上即使git rebase也会忽略它认为已经在你正在改变的分支中的提交。 (令人惊讶的是,即使您使用--no-ff选项也是如此,这可能是为了防止这种情况。)

相反,您可以从branchA挑选提交到新分支(例如branchA-new),然后使用该分支发送PR:

git checkout -b branchA-new branchB # Create a new branch off of branchB
git cherry-pick 4f5oo77..branchA # Copy the changes from branchA onto the new branch

从那里,您应该能够将branchA-new推送到GitHub,并为这些更改提交新的PR。

答案 2 :(得分:0)

根据this blog post about undoing merges,解决问题的最佳方法是:

  1. 还原恢复合并的提交(在您的情况下为git revert 55bd11c
  2. 再次合并分支以获取第一次合并后完成的任何其他提交。
  3. 这应该添加来自合并分支的所有提交,而不进行任何变基和/或倒带。