Git 交互式重定基特
我正在做git rebase-I--root,有时会发生冲突。我想了解它是如何工作的以及为什么会发生冲突 因此,据我所知,当交互式重基进行时,它会从提交列表的顶部到底部应用提交,因此我将其命名为“源到目标”,其中源是要应用的当前提交,目标表示已应用的提交。这是正确的理解吗?如果是,那么如果与文件“被他们删除”旁边的消息存在冲突,是否意味着该文件已在源中删除并在目标中编辑?因此,它可能在上次应用的提交中被编辑,但在当前要应用的提交中被删除 还有一个问题,是否可以查看哪些提交已经应用?我的意思是在目标中 我很抱歉,如果我对交互式重基的理解是错误的,并且我上面的所有细节都没有任何意义,这个功能对我来说似乎很混乱,所以我正在尝试了解基本的想法 。。。据我所知,当交互式重新基进行时,它会从提交列表的顶部到底部应用提交 是:它首先对初始(Git 交互式重定基特,git,git-rebase,git-rewrite-history,Git,Git Rebase,Git Rewrite History,我正在做git rebase-I--root,有时会发生冲突。我想了解它是如何工作的以及为什么会发生冲突 因此,据我所知,当交互式重基进行时,它会从提交列表的顶部到底部应用提交,因此我将其命名为“源到目标”,其中源是要应用的当前提交,目标表示已应用的提交。这是正确的理解吗?如果是,那么如果与文件“被他们删除”旁边的消息存在冲突,是否意味着该文件已在源中删除并在目标中编辑?因此,它可能在上次应用的提交中被编辑,但在当前要应用的提交中被删除 还有一个问题,是否可以查看哪些提交已经应用?我的意思是在目
--to
)提交执行分离头签出。1这是构建新提交链的点
然后,对于每个pick
命令,它运行git cherry pick
。这是可能发生合并冲突的地方,因为cherry pick使用Git的合并引擎。2此合并的合并基础是当前(分离头)提交的父级。合并的--ours
端是当前提交。合并的--theres
端是被选中的提交
(当最后一次拾取或其他命令完成且一切正常时,交互式重基将分支名称移动到指向分离的头
,并将头
附加到该分支名称。)
。。。如果与文件“被他们删除”旁边的消息存在冲突,是否意味着该文件已在源中删除并在目标中编辑?因此,它可能在上次应用的提交中被编辑,但在当前要应用的提交中被删除
对。在一个更典型的重基过程中,考虑这一点的一种方法是,——他们的
(或索引槽3)是您的提交。--ours
提交通常也是您的一个旧提交的新副本,但要复制的第一个提交除外,其中--ours
是他们从--提交到
目标的提交
还有一个问题,是否可以查看哪些提交已经应用?我的意思是在目标中
一种相对稳定且快速的方法是运行git-rebase--edit-todo
,它会显示剩余的待办事项列表。这与“完成”列表并不完全相同,但是如果你记得原来的待办事项列表,你可以通过减去来恢复它
其他选项包括使用当前(分离的)HEAD
和git log
:
git log [--oneline] onto-target..HEAD
它显示到目前为止已复制的提交,或者在某些情况下,直接查看存储所有内容的.git/rebase-*
目录(但最后一个位置已随时间移动)
1使用
--root
时,交互式重基对第一次提交(必须是“pick”指令)使用特殊情况而不是cherry pick
。必须这样做,因为没有基本提交就不能使用git cherry pick
。因此,它只是从要拾取的第一个提交中获取树,并从该树中进行新的根提交。这一步必须始终成功:这里没有冲突的可能。完成这一步意味着从要拾取的提交列表中删除第一个提交,之后,重基将正常继续
2 herry pick直接调用合并策略,例如,
git merge recursive
,而不是运行git merge
。这有很多技术原因,但主要的两个原因是,通过这种方式,cherry pick自己选择合并基础,通过这种方式,cherry pick自己在合并完成后作为常规的非合并提交进行最终提交。非常感谢您提供的详细答案。这真的帮了我很大的忙!