为什么 git 分多个步骤进行变基?
Why is git doing a rebase in multiple steps?
我不得不在开发分支上对功能分支进行变基。
所以我刚刚做了一个 rebase,它让我分 5 个步骤完成这个 rebase 操作。
我可以看到这些标记:
REBASE 1/5
REBASE 2/5
REBASE 3/5
REBASE 4/5
第一个 git rebase <branch>
命令给我带来了一些冲突。
所以我编辑了文件,添加了它们,最后执行了 git rebase --continue
命令。
但它问我:No changes - did you forget to use 'git add'?
然后我不得不发出 git rebase --skip
命令,它显示了第一步未显示的其他冲突文件。
而且我不得不多次重复该操作,在这种情况下,大约 5 次,最终显示 Applying:
显示不再有冲突并且 rebase 已完成。
假设您的本地和远程分支在变基之前看起来像这样:
remote: A -- B
\
local: C -- D -- E -- F -- G
local
对 remote
的变基将导致以下分支图:
remote: A -- B
\
local: C' -- D' -- E' -- F' -- G'
也就是说,rebase 开始为您的分支使用 A -- B
的新 base。然后它 重新应用 5 在这个新基础上提交 C 到 G。如您所见,rebase 的每个“步骤”都涉及在新基础之上应用这些提交之一。
关于多次修复同一事物,如果在新基础的 HEAD 提交和正在应用的提交中更改了给定的一行或多行,则会触发合并冲突。如果这种情况持续发生,同一代码区域将不断被标记为冲突。
一个确切的例子是您解析一行代码以与初始新基础的 HEAD 合并(上图中的提交 B)。对于每个连续的应用提交,您重新引入旧逻辑,然后需要再次解决。您可能会认为 rebase 就像慢动作合并,其中更改一点一点地分层,就像烤蛋糕一样。
rebase 的工作方式是将分支的基础(分支从其他分支转移的点)修改为另一个提交。这就是操作的名称。因此,该操作更改了提交(包括新的时间戳),因此它具有新的哈希值。简单来说,就是一个全新的正在创建的commit。
由于所有后续提交都依赖于先前的提交,因此它们也需要更改,否则您的历史记录将被完全破坏。因此,涉及多个步骤(每次提交一个)。
除此之外,rebase 为您提供了更多选项,例如将提交压缩在一起、编辑提交消息或 picking/skipping 特定提交。显然你不能一步完成,所以它正在逐步完成。
我不得不在开发分支上对功能分支进行变基。
所以我刚刚做了一个 rebase,它让我分 5 个步骤完成这个 rebase 操作。
我可以看到这些标记:
REBASE 1/5
REBASE 2/5
REBASE 3/5
REBASE 4/5
第一个 git rebase <branch>
命令给我带来了一些冲突。
所以我编辑了文件,添加了它们,最后执行了 git rebase --continue
命令。
但它问我:No changes - did you forget to use 'git add'?
然后我不得不发出 git rebase --skip
命令,它显示了第一步未显示的其他冲突文件。
而且我不得不多次重复该操作,在这种情况下,大约 5 次,最终显示 Applying:
显示不再有冲突并且 rebase 已完成。
假设您的本地和远程分支在变基之前看起来像这样:
remote: A -- B
\
local: C -- D -- E -- F -- G
local
对 remote
的变基将导致以下分支图:
remote: A -- B
\
local: C' -- D' -- E' -- F' -- G'
也就是说,rebase 开始为您的分支使用 A -- B
的新 base。然后它 重新应用 5 在这个新基础上提交 C 到 G。如您所见,rebase 的每个“步骤”都涉及在新基础之上应用这些提交之一。
关于多次修复同一事物,如果在新基础的 HEAD 提交和正在应用的提交中更改了给定的一行或多行,则会触发合并冲突。如果这种情况持续发生,同一代码区域将不断被标记为冲突。
一个确切的例子是您解析一行代码以与初始新基础的 HEAD 合并(上图中的提交 B)。对于每个连续的应用提交,您重新引入旧逻辑,然后需要再次解决。您可能会认为 rebase 就像慢动作合并,其中更改一点一点地分层,就像烤蛋糕一样。
rebase 的工作方式是将分支的基础(分支从其他分支转移的点)修改为另一个提交。这就是操作的名称。因此,该操作更改了提交(包括新的时间戳),因此它具有新的哈希值。简单来说,就是一个全新的正在创建的commit。
由于所有后续提交都依赖于先前的提交,因此它们也需要更改,否则您的历史记录将被完全破坏。因此,涉及多个步骤(每次提交一个)。
除此之外,rebase 为您提供了更多选项,例如将提交压缩在一起、编辑提交消息或 picking/skipping 特定提交。显然你不能一步完成,所以它正在逐步完成。