如何在Git中重新设置父级

如何在Git中重新设置父级,git,Git,在每种情况下,哪些非交互式git命令实现了从之前到之后的更改 1a。再教育我 git rebase -i B # Select the "edit" command for C git reparent -p A git rebase --continue git reparent -p B git rebase -i A # Select the "edit" command for B git reparent -p C git rebase --continue 之前: A---B-

在每种情况下,哪些非交互式git命令实现了从之前到之后的更改

1a。再教育我

git rebase -i B
# Select the "edit" command for C
git reparent -p A
git rebase --continue
git reparent -p B
git rebase -i A
# Select the "edit" command for B
git reparent -p C
git rebase --continue
之前:

A---B---C---D
  C---D
 /
A---B
  C
 /
A---B---D
A---B---C---D
  C---D
 /
A---B
  C
 /
A---B---D
之后:

  C'---D'
 /
A---B
  C
 /
A---B---D'
  C---B'---D'
 /
A
  C'---D'
 /
A---B
  C
 /
A---B---D'
  C---B'---D'
 /
A
1b。再教育II

git rebase -i B
# Select the "edit" command for C
git reparent -p A
git rebase --continue
git reparent -p B
git rebase -i A
# Select the "edit" command for B
git reparent -p C
git rebase --continue
之前:

A---B---C---D
  C---D
 /
A---B
  C
 /
A---B---D
A---B---C---D
  C---D
 /
A---B
  C
 /
A---B---D
之后:

  C'---D'
 /
A---B
  C
 /
A---B---D'
  C---B'---D'
 /
A
  C'---D'
 /
A---B
  C
 /
A---B---D'
  C---B'---D'
 /
A
1c。再教育III

git rebase -i B
# Select the "edit" command for C
git reparent -p A
git rebase --continue
git reparent -p B
git rebase -i A
# Select the "edit" command for B
git reparent -p C
git rebase --continue
之前:

A---B---C---D
  C---D
 /
A---B
  C
 /
A---B---D
A---B---C---D
  C---D
 /
A---B
  C
 /
A---B---D
之后:

  C'---D'
 /
A---B
  C
 /
A---B---D'
  C---B'---D'
 /
A
  C'---D'
 /
A---B
  C
 /
A---B---D'
  C---B'---D'
 /
A

这些看起来都像是git-rebase-on的应用程序

1a。再养育我 之前:

A---B---C---D
  C---D
 /
A---B
  C
 /
A---B---D
A---B---C---D
  C---D
 /
A---B
  C
 /
A---B---D
之后:

  C'---D'
 /
A---B
  C
 /
A---B---D'
  C---B'---D'
 /
A
  C'---D'
 /
A---B
  C
 /
A---B---D'
  C---B'---D'
 /
A
设置分支以标记特定的提交,然后在上重新设置基础

  • git签出-b ex1a-b
  • git签出-b ex1a-d d
  • git签出-b ex1a-a
  • git-rebase——在ex1a-a ex1a-b ex1a-d上
  • 1b。再教育2 之前:

    A---B---C---D
    
      C---D
     /
    A---B
    
      C
     /
    A---B---D
    
    A---B---C---D
    
      C---D
     /
    A---B
    
      C
     /
    A---B---D
    
    之后:

      C'---D'
     /
    A---B
    
      C
     /
    A---B---D'
    
      C---B'---D'
     /
    A
    
      C'---D'
     /
    A---B
    
      C
     /
    A---B---D'
    
      C---B'---D'
     /
    A
    
    创建与上面类似的分支:
    git-rebase——到ex1b-b ex1b-c ex1b-d

    1c。再教育III 之前:

    A---B---C---D
    
      C---D
     /
    A---B
    
      C
     /
    A---B---D
    
    A---B---C---D
    
      C---D
     /
    A---B
    
      C
     /
    A---B---D
    
    之后:

      C'---D'
     /
    A---B
    
      C
     /
    A---B---D'
    
      C---B'---D'
     /
    A
    
      C'---D'
     /
    A---B
    
      C
     /
    A---B---D'
    
      C---B'---D'
     /
    A
    

    同样是分支,但现在只需
    git rebase ex1c-c ex1c-d

    这取决于您对
    B'
    c'
    d'
    的定义

    如果您想在修补程序周围移动,以便(在第一个示例中)
    git-diff-bc
    =
    git-diff-ac'
    ,那么您需要使用
    git-rebase
    来“重新设置基础”(而不是“重新设置”)

    另一方面,如果您想在快照周围移动,那么您确实想“重新复制”。为此,我建议使用

    最有可能的情况是,您实际上希望重设基础,而不是重设基础,但以下是用于重设基础的命令,仅供参考。它们有些复杂,因为这不是一件正常的事情

    (以下假设您目前在D的分行。)

    1a。再教育我

    git rebase -i B
    # Select the "edit" command for C
    git reparent -p A
    git rebase --continue
    
    git reparent -p B
    
    git rebase -i A
    # Select the "edit" command for B
    git reparent -p C
    git rebase --continue
    
    1b。再教育II

    git rebase -i B
    # Select the "edit" command for C
    git reparent -p A
    git rebase --continue
    
    git reparent -p B
    
    git rebase -i A
    # Select the "edit" command for B
    git reparent -p C
    git rebase --continue
    
    1c。再教育III

    git rebase -i B
    # Select the "edit" command for C
    git reparent -p A
    git rebase --continue
    
    git reparent -p B
    
    git rebase -i A
    # Select the "edit" command for B
    git reparent -p C
    git rebase --continue
    

    你的问题听起来像是测验题。。。你确定你可以在互联网上简单地提问吗?保罗,哪个类甚至知道什么是版本控制,更不用说把git graph节点示例放在测试中了?测验不一定是一个类。。。我不知道,但问题的上下文太少了,所以听起来像这样。为什么在这种情况下需要上下文?我故意把问题分解成我试图做的非常具体的操作。