【问题标题】:What exactly does `git rebase --skip` skip during a rebase?`git rebase --skip` 在变基期间到底跳过了什么?
【发布时间】:2018-01-18 15:07:23
【问题描述】:

当您执行变基时,如果 git 无法解决当前分支和新基础分支之间的差异,git 会要求人工干预。

如果您解决冲突并输入 git rebase --continue,git 会将已解决的代码视为该提交的“新代码”。

但是当你点击git rebase --skip 时会发生什么?它不能让代码保持原样——存在冲突——所以它必须做的不仅仅是“跳过”。

【问题讨论】:

    标签: git


    【解决方案1】:

    如果有冲突,git rebase --skip 会跳过整个提交。在 rebase 成功完成后,来自该提交的更改将不会出现在历史记录中。我们来看一个例子

    A-B-C <- master
     \
      D-E <- foo
    

    现在说 D 在之后引起冲突

    git checkout foo
    git rebase master
    

    然后git rebase --skip 结果

    A-B-C <- master
         \
          E' <- foo
    

    其中 E' 包含与 E 相同的文本变化。

    【讨论】:

    • 感谢@Code-Apprentice。我仍然不是 100% 清楚:假设我在 D 中添加了一些代码并在 E 中保持不变。我在 D 中添加的代码在 rebase 后是否仍然存在于 E 中?
    • @adc17 不,E 中不存在更改。变基完成后,它们将不会在新分支中。
    • @adc17 请注意,每次提交都是自上次提交以来的一组增量更改。所有文件的本地副本是当前分支(或 HEAD,如果您没有签出分支)的所有提交的累积。由于 E 不包含 D 的变化,因此 E' 也不包含。
    • 谢谢,这正是阻碍我的原因。所以听起来git rebase --skip 更像是git rebase --delete-commit-and-continue
    • @adc17 "skip" 更合适,因为git rebase 在分支foo 上复制每个提交,我们告诉它跳过复制 D。
    猜你喜欢
    • 2012-03-21
    • 2012-06-22
    • 2017-06-04
    • 2020-09-29
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多