合并上游时Git提交被压扁,如何更新我的本地仓库

时间:2016-09-08 21:12:31

标签: git github merge

我在本地仓库中做了一些提交,将它们推送到远程并向上游主机创建了一个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

为了符合我的历史,但我希望有更清洁的方法来做到这一点。

2 个答案:

答案 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