我错误地合并了一个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
答案 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,解决问题的最佳方法是:
git revert 55bd11c
)这应该添加来自合并分支的所有提交,而不进行任何变基和/或倒带。