我在本地仓库中做了一些提交,将它们推送到远程并向上游主机创建了一个Pull Request。公关合并时,这些承诺被压扁了。
$ git commit A
$ git push origin master
$ git commit B
$ git push origin master
创建PR,压缩并合并到上游主站
然后当我做...
$ git pull upstream master
它执行合并而不是快进,因为提交不同。在上传更改/压缩提交后,如何更新本地仓库以匹配上游主历史记录?
我最终做了以下事情......
$ git reset HEAD~2 --hard
$ git pull upstream master
$ git push origin master --force
为了符合我的历史,但我希望有更清洁的方法来做到这一点。
答案 0 :(得分:4)
如果您没有想要保存的本地更改,则可以重置本地分支以匹配遥控器。
首先,使用
从远程获取新数据git fetch upstream
其次,在仔细检查您是否在您的本地主分支
之后git reset --hard upstream/master
这将重置您的本地分支以匹配远程分支。
答案 1 :(得分:2)
根据this answer,并由其他人注意,您应该在获取/更新后运行以下命令:
SELECT colecciones.* FROM productos
INNER JOIN colecciones on colecciones.id = productos.coleccion
GROUP BY coleccion;
然而,更重要的是,知道如何避免让自己陷入困境。
为了避免将来出现此问题,您应始终使用单独的分支进行开发。你发布了:
git fetch upstream git reset --hard upstream/master
从上面的示例中,您似乎正在使用$ git commit A
$ git push origin master
$ git commit B
$ git push origin master
分支进行开发。这是一个很大的 no-no ,这似乎是你问题的真正的原因。相反,请执行以下操作:
master
您不将git checkout -b changes-for-pull-request
# hack hack
git commit
git push origin changes-for-pull-request
# hack hack
git commit
git push origin changes-for-pull-request
分支合并到changes-for-pull-request
分支。相反,您发送拉取请求并将它们指向您单独的主题分支以从中拉出。你甚至可以使用他们最新的工作来改变你的工作,使他们更容易。例如,当您准备好发出提款请求时,可以master
进行如下操作:
rebase
发送拉取请求并将其指向您的git checkout master
git pull upstream master # you never make changes here, so not a problem
git rebase master changes-for-pull-request # fix conflicts, if any
git push origin changes-for-pull-request
分支。当他们将其合并到他们的主人中时,只需要再次执行changes-for-pull-request
并且您不会遇到问题。
由于现在您的pull请求已合并到上游并已进入您自己的git pull upstream master
分支,因此您可以安全地在本地和您自己的master
中删除changes-for-pull-request
分支清理。
origin