【发布时间】:2021-04-06 13:46:19
【问题描述】:
例如,假设我有一个名为 develop 的分支,我的所有功能都将是从 develop 创建的一个分支,稍后我将需要执行合并请求(在 GitLab 中,GitHub 中的内容将是拉取请求)。
如果我需要在将新分支推送到 origin 之前更新它并执行合并/拉取请求,“git pull origin develop”是否也会更新我的新分支?
如果没有,我该怎么做?
【问题讨论】:
例如,假设我有一个名为 develop 的分支,我的所有功能都将是从 develop 创建的一个分支,稍后我将需要执行合并请求(在 GitLab 中,GitHub 中的内容将是拉取请求)。
如果我需要在将新分支推送到 origin 之前更新它并执行合并/拉取请求,“git pull origin develop”是否也会更新我的新分支?
如果没有,我该怎么做?
【问题讨论】:
有几种方法,这取决于您使用的分支策略。在逐个项目的基础上,我会选择一种策略并坚持下去,但最有效的策略取决于您的需求。
合并: (从分支执行):
这保留了历史并且是非破坏性的。它在分支上创建一个新的提交,代表从开发到分支的更改。
变基: (从分支执行):
这会改写历史并且具有破坏性。分支上的原始提交被丢弃并重新创建(它们看起来相似(相同的评论、文件和作者身份),但会有不同的提交 ID 和提交时间。它使历史更加“线性”。
用壁球变基: (从分支执行):
类似于 rebase(上图) - 重写和破坏性 - 但将分支折叠为单个提交。历史不仅是线性的,而且是简洁的——整个分支都被折叠成一个提交。
我通常的建议是避免对没有经验的团队使用 rebase。使用 rebase 很容易陷入困境,并且有各种各样的事情需要提防。然而,rebase 创造了美好的历史(如果这很重要) - 但取证变得更加困难(如果这很重要)。 "--force" 是 git 告诉你正在关闭安全装置并小心你正在做的事情的方式。
查看 git-pull 的手册页。有一些命令可以折叠 pull/merge 或 pull/rebase 以将步骤减少一个。还有 git-config 命令可以指定“拉取”始终是“拉取并合并”或“拉取并变基”。
【讨论】:
正确的命令是:
git fetch
git switch myNewBranch
git rebase origin/develop
git push --force
这样,您将在最新的origin/develop 之上重放(重新设置)您的新分支
现有的拉取请求/合并请求将自动更新,其解决方案将是一个简单的合并(因为myNewBranch 提交都是目标分支develop 之上的所有新 提交)
【讨论】: