当本地分支对远程存储库过时时执行拉取请求的正确标准

问题描述

场景如下:

对于一个项目,比如github上的Spring Security,完成如下:

  • 分叉和克隆
  • git remote add upstream URL-Remote-Repository
  • git fetch upstream
  • master 分支 git merge upstream/master

第一次使用,一切正常。

一个新的分支被创建来修复或添加一些东西 - git checkout -b gh-150 被执行了(还没有 git commit 被执行),完成工作需要几天时间,一旦完成,在执行 { {1}}(第一次为该分支执行该命令),我确认在过去的日子里,原始(远程)存储库代码发生了变化

从远程存储库获取代码到 master 并避免丢失本地分支中的任何数据的正确方法是什么?它的目的是稍后向服务器发送拉取请求。因此我们的目标是,保留本地分支的新代码,从 master 获取代码(不丢失任何数据),并将 pull request 发送到服务器。

即使我在本地分支中提交并返回主分支,执行提取和合并,我的本地分支还没有针对主分支进行更新。如果我返回本地分支并尝试从主分支合并到本地分支,我将丢失更新的代码(当然,如果编辑了相同的组件)

假设理想的场景应该如下所示:

  • 我创建了新分支并编辑了我的更改
  • 我确认在那几天远程存储库中没有任何更改,因此不需要它进行提取和合并 - 所以新的更改只存在于我身边
  • 所以我可以放心地发送拉取请求

考虑:(不关闭这篇文章:我知道 git 和 github 多年前就可用了,但我假设存在一个标准(主要是新的或当前的标准/方法)来平静地处理这种情况,而不会有因错误丢失任何数据的风险 - 例如这些年来经验的最佳实践

解决方法

“如果我返回本地分支并尝试从主分支合并到本地分支,我将丢失更新的代码(当然,如果编辑了相同的组件)”--> 您不会丢失它们, 合并 会将 master 的新修改应用到您分支中的 新提交 如果没有任何冲突,它是透明的,您也可以直接在拉取请求中执行(或使用命令 git merge master

或者,可以选择使用 master 重新设置分支,其主要优点是使您的分支与 master 位于同一历史线(如果您希望 master 分支具有历史记录,这很棒没有任何合并提交)。代价是 master 的新提交可能会出现在您的分支上,并使其不太清楚。

rebase 非常简单:

  • git checkout yourbranch
  • git rebase master -- 这里 git 会提示你解决所有冲突

我认为最好的做法是从 master 变基,但这实际上取决于您的用例。