代码之家  ›  专栏  ›  技术社区  ›  Pavel

$REMOTE指向git merge和rebase中的不同分支?

  •  1
  • Pavel  · 技术社区  · 9 月前

    我想配置 kdiff3 要对窗口使用特定顺序(从左到右): $REMOTE | $BASE | $LOCAL 然而,我遇到了一个问题 $REMOTE 不同于 merge rebase 命令。

    我已配置 GitBash 使用以下命令:

    git config --global mergetool.kdiff3.cmd "\"C:/Program Files/KDiff3/bin/kdiff3.exe\" \"\$REMOTE\" \"\$BASE\" \"\$LOCAL\" -o \"\$MERGED\""
    

    enter image description here

    以下是我遵循的步骤:

    1. 活动分支: temp2

    2. 合并命令: git merge temp1

      enter image description here

    3. 重基命令: git rebase temp1 The $远程 $LOCAL 窗口切换位置: enter image description here

    4. 重基命令: git rebase --onto temp1 head~1 。此命令还导致 $远程 $本地 窗口切换位置: enter image description here

    我已经尝试解决这个配置问题很长时间了,但还没有成功。有人能解释一下发生了什么以及如何确保这一点吗 $远程 总是指 temp1 在合并和重基操作中?

    1 回复  |  直到 9 月前
        1
  •  2
  •   TTT    9 月前

    你不能做你要求的事。(或者,如果可以的话,这可能是一个特定于工具的更改,而不是与Git相关的更改。)

    Git无法做到这一点的原因是指标 $REMOTE $LOCAL 不代表特定的分支,而是分别代表“传入”和“当前”。

    当你合并时,“传入”和“当前”的名称很好,很明显,“当前”是你当前签出的提交或分支( temp2 ),“传入”是您要合并的提交或分支( temp1 ).

    但是,当在幕后重基时,您实际上是先检查另一个分支(或由指定的提交) --onto ),然后从(之前)签出的分支中挑选每个提交。樱桃选择本身基本上就像合并单个提交的更改 在暂停合并的那一刻 ,“current”现在是已签出的提交( 温度1 )“传入”是您正在重写的分支的提交( 温度2 ).

    为了帮助概念化这一点,想象一下,你没有重新设置基线,而是检查了 温度1 并开始精心挑选每一个提交 温度2 。如果你在其中一次樱桃采摘过程中查看合并,就会更直观地看到你正在樱桃采摘的提交是“传入的”,就像合并时一样。下次你这样做的时候,我建议你在心理上将rebase转换为一系列樱桃采摘,也许你收到的提交会感觉更自然 温度2 分支位于右侧,就像合并时一样 温度1 进入之内 温度2 .

    推荐文章