gpt4 book ai didi

git rebase 基础知识

转载 作者:IT王子 更新时间:2023-10-29 00:48:36 25 4
gpt4 key购买 nike

我最近开始使用 git rebase 并且不是 100% 确定我做对了。为了题主的缘故,origin中有两个分支,master和从master分支出来的next

自上次两者同步以来,master 有 2 次提交,next 有 6 次:

$ git log --oneline origin/next..origin/master
59b5552 master commit #2
485a811 master commit #1

$ git log --oneline origin/master..origin/next
4ebf401 next commit #6
e9b6586 next commit #5
197ada0 next commit #4
4a2c3c6 next commit #3
040a055 next commit #2
84537bf next commit #1

当我 checkout next 并执行 git rebase -i origin/master 时,我得到以下信息:

$ git status
# On branch next
# Your branch and 'origin/next' have diverged,
# and have 8 and 6 different commits each, respectively.

最后在执行 git pull --rebase 之后,来自 master 的两个提交在 next 中:

$ git log --oneline origin/next..next 
8741d09 master commit #2
485a811 master commit #1

问题:

  1. 这是正确的方法吗?
  2. 为什么在运行 pull --rebase 之前会有 8 和 6 次不同的提交?
  3. 是否可以简化流程?

感激不尽:)

最佳答案

让我们从头开始。这是您的原始状态图:

A-B-C  (master, origin/master) \  D-E-F-G-H-I  (next, origin/next)

当您 checkout 时 next并重新定位 nextorigin/master ,它在 origin/master 上的两个提交之后创建了 6 个新提交.这些新提交将“master commit #2”(我图中的 C)作为它们的祖先,而不是它们的原始祖先 origin/masterorigin/next发散(在我的图表中为 A),因此它们的哈希值将不同。我相信这就是为什么你会看到 next有 8 个来自 origin/next 的不同提交: 来自 origin/master 的 2以及 origin/next 上的 6 个“重新哈希”提交.

git checkout next ; git rebase -i origin/master 之后,你应该有这个:

A-B-C  (master, origin/master) \   \  \   D'-E'-F'-G'-H'-I' (next)   \    D-E-F-G-H-I  (origin/next)

你可以看到next确实有 8 个提交不在 origin/next 上, 和 origin/next确实有 6 个提交不在 next 上.当然,这只是根据提交的 SHA-1 哈希值。如果您git diff origin/next next,实际内容应该非常接近。 -- diff 应该只显示来自 B 的变化和 C (如图中标记)。

当你做 git pull --rebase同时仍在 next ,它从源(远程 origin/next)获取更改并将当前分支(next) rebase 到该远程。这会导致 next 中的更改但 origin/nextorigin/next 之后出现关于新next分支。它应该看起来像这样:

A-B-C  (master, origin/master) \  D-E-F-G-H-I  (origin/next)             \              B'-C' (next)

如果这就是您希望历史图表看起来的样子,那么您就成功了。

但是,我怀疑您真的想让事情看起来像中间的图表,尤其是如果 next是一个功能分支,您将在其中处理项目的下一部分,并且 master用于稳定代码和小错误修复。如果是这样,那么你应该完成 git push而不是 git pull --rebase让 Remote 反射(reflect)您的历史版本,而不是相反。

关于git rebase 基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com