Git commit squashed合并上游时,如何更新本地回购协议

Git commit squashed合并上游时,如何更新本地回购协议,git,github,merge,Git,Github,Merge,我在本地repo中进行了一些提交,将这些提交推送到远程,并创建了一个到上游主机的Pull请求。合并PR时,这些提交被压扁 $ git commit A $ git push origin master $ git commit B $ git push origin master 创建PR、挤压并合并到上游主节点 然后当我这么做的时候 $ git pull upstream master 它执行合并而不是快进,因为提交是不同的。在上游更改/挤压提交后,如何更新本地回购以匹配上游主历史记录 我

我在本地repo中进行了一些提交,将这些提交推送到远程,并创建了一个到上游主机的Pull请求。合并PR时,这些提交被压扁

$ 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

来匹配我的历史,但我希望有一个更干净的方法来做到这一点

如果没有任何要保存的本地更改,只需重置本地分支以匹配远程分支

首先,使用从远程获取新数据

git fetch upstream
第二,在仔细检查您是否在本地主分支机构之后

git reset --hard upstream/master
这将重置您的本地分支以匹配远程分支。

根据,并且其他人注意到,您应该在获取/更新后运行以下命令:

git fetch upstream
git reset --hard upstream/master
然而,更重要的是知道如何避免自己陷入困境

避免问题 为了避免将来出现此问题,您应该始终使用单独的分支进行开发。您发布了:

从上面的示例来看,您似乎在使用
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
您不会将拉取请求的
更改
分支合并到
主分支中。相反,您发送pull请求并将它们指向要从中提取的单独主题分支。你甚至可以用他们的最新版本重新调整你的工作,让他们更轻松。例如,当您准备发出拉取请求时,您可以
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
发送拉取请求并将其指向拉取请求的
更改
分支。当他们将其合并到主控中时,只需您再次执行
git拉动上游主控
,您就不会有问题了

自己打扫 由于现在您的拉取请求已合并到上游,并已进入您自己的
主分支
中,因此您可以安全地在本地和您自己的
来源
中删除拉取请求
分支的
更改以进行清理

git push --delete origin changes-for-pull-request
git branch -d changes-for-pull-request  # note lower-case "-d"

如果您确实有要保存的更改,可以先将其隐藏起来,进行硬重置,然后弹出隐藏。
git push --delete origin changes-for-pull-request
git branch -d changes-for-pull-request  # note lower-case "-d"