Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个子分支的git rebase_Git_Version Control_Merge_Branch_Rebase - Fatal编程技术网

具有多个子分支的git rebase

具有多个子分支的git rebase,git,version-control,merge,branch,rebase,Git,Version Control,Merge,Branch,Rebase,在中等复杂的分支场景中,我很难让git做我想做的事情。每当我使用rebase命令时,似乎我的一些工作都丢失了。我是git的新手,来自Perforce的背景。我是否使用了错误的命令或缺少一些标志?我对本地存储库内部状态的直觉正确吗 注:branchB依赖于branchA,branchC依赖于branchB git签出主机 git牵引主控器 git签出-b branchA ==O master \==A branchA 1 origin/master, master, HEAD ->

在中等复杂的分支场景中,我很难让git做我想做的事情。每当我使用rebase命令时,似乎我的一些工作都丢失了。我是git的新手,来自Perforce的背景。我是否使用了错误的命令或缺少一些标志?我对本地存储库内部状态的直觉正确吗

注:branchB依赖于branchA,branchC依赖于branchB

  • git签出主机
  • git牵引主控器
  • git签出-b branchA

    ==O master
       \==A branchA
    
    1 origin/master, master, HEAD -> branchA
    |
    0
    
  • 编辑布兰卡
  • git添加
  • git提交
  • git评论
  • git签出-b branchB

    ==O==O master
       \==A branchA
           \==B branchB
    
    2 branchA, HEAD -> branchB
    |
    1 origin/master, master
    |
    0
    
  • 编辑branchB
  • 代码审查需要更改branchA
  • git添加
  • git提交
  • 吉特结帐分行
  • 编辑布兰卡
  • git添加

  • git commit--amend您需要理解提交是前一个提交的依赖项,而分支只是指向提交图中一个提交的指针

    这是提交图的演变,数字是提交,上限是更新的,引用和分支是旁侧提交,
    HEAD
    是您当前的位置

    您可以通过在每一步启动
    git log--graph--oneline--all--decoration
    来查看提交图的演变

  • git签出主机

    1 origin/master, HEAD -> master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, HEAD -> master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    |   2'' branchA
    |   |
    2   |
    |   |
    |   6 origin/master, HEAD -> master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
  • git牵引主控器

    1 origin/master, HEAD -> master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    | 2' branchA
    | |
    2 |
    | |
    | | 6 origin/master, HEAD -> master
    | | |
    |/ /
    | /
    |/
    2
    |
    0
    
  • git签出-b branchA

    ==O master
       \==A branchA
    
    1 origin/master, master, HEAD -> branchA
    |
    0
    
  • 编辑布兰卡

  • git添加
  • git提交
  • git评论

    2 HEAD -> branchA
    |
    1 origin/master, master
    |
    0
    
    3 branchB
    |
    | 2' HEAD -> branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    4 HEAD -> branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    5' branchC
    |
    4' branchB
    |
    |  7 HEAD -> refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • git签出-b branchB

    ==O==O master
       \==A branchA
           \==B branchB
    
    2 branchA, HEAD -> branchB
    |
    1 origin/master, master
    |
    0
    
  • 编辑branchB

  • 代码审查需要更改branchA
  • git添加
  • git提交

    3 HEAD -> branchB
    |
    2 branchA
    |
    1 origin/master, master
    |
    0
    
    5 HEAD -> branchC
    |
    4 branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
  • 吉特结帐分行

    3 branchB
    |
    2 HEAD -> branchA
    |
    1 origin/master, master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    | 2' HEAD -> branchA
    | |
    2 |
    | |
    | | 6 origin/master, master
    | | |
    |/ /
    | /
    |/
    1
    |
    0
    
  • 编辑布兰卡

  • git添加
  • git commit--amend=>通过使用
    --amend
    可以使用相同的父级创建新的提交
  • git评论

    2 HEAD -> branchA
    |
    1 origin/master, master
    |
    0
    
    3 branchB
    |
    | 2' HEAD -> branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    4 HEAD -> branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    5' branchC
    |
    4' branchB
    |
    |  7 HEAD -> refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • git签出分支

    3 HEAD -> branchB
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    5 branchC
    |
    4 HEAD -> branchB
    |
    3
    |
    |   2'' branchA, master
    |   |
    2   |
    |   |
    |   6 origin/master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
    5' branchC
    |
    4' HEAD -> branchB
    |
    |  7 refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • 再编辑一些

  • git添加
  • git提交
  • git评论

    2 HEAD -> branchA
    |
    1 origin/master, master
    |
    0
    
    3 branchB
    |
    | 2' HEAD -> branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    4 HEAD -> branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    5' branchC
    |
    4' branchB
    |
    |  7 HEAD -> refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • git签出-b Branch

    ==O==O==O==O master
      \==A branchA
          \==B branchB
              \==C branchC
    
    4 branchB, HEAD -> branchC
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
  • 编辑分支

  • branchA通过代码审查
  • git添加
  • git提交

    3 HEAD -> branchB
    |
    2 branchA
    |
    1 origin/master, master
    |
    0
    
    5 HEAD -> branchC
    |
    4 branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
  • git签出主机

    1 origin/master, HEAD -> master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, HEAD -> master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    |   2'' branchA
    |   |
    2   |
    |   |
    |   6 origin/master, HEAD -> master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
  • git牵引主控器

    1 origin/master, HEAD -> master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    | 2' branchA
    | |
    2 |
    | |
    | | 6 origin/master, HEAD -> master
    | | |
    |/ /
    | /
    |/
    2
    |
    0
    
  • 吉特结帐分行

    3 branchB
    |
    2 HEAD -> branchA
    |
    1 origin/master, master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    | 2' HEAD -> branchA
    | |
    2 |
    | |
    | | 6 origin/master, master
    | | |
    |/ /
    | /
    |/
    1
    |
    0
    
  • git rebase master branchA

  • 解决合并冲突

    ==O==O==O==O==A master
          \        \==B branchB
           \==C branchC <== is this correct?
    
    ==O==O==O==O==A master
                   \==A' refactorA
                    \  \==B branchB <== is this correct?
                     \==C branchC
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    |   2'' HEAD -> branchA
    |   |
    2   |
    |   |
    |   6 origin/master, master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
    5 branchC
    |
    |   4' HEAD -> branchB
    |   |
    4   |
    |   |
    |   3'
    |   |
    3   |
    |   |
    |   2'' branchA, master
    |   |
    2   |
    |   |
    |   6 origin/master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
    5' branchC
    |
    |  4'' HEAD -> branchB
    |  |
    4' |
    |  |
    |  7 refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • git签出主机

    1 origin/master, HEAD -> master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, HEAD -> master
    |
    0
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    |   2'' branchA
    |   |
    2   |
    |   |
    |   6 origin/master, HEAD -> master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
  • git merge branchA#合并速度很快

    5 branchC
    |
    4 branchB
    |
    3
    |
    |   2'' branchA, HEAD -> master
    |   |
    2   |
    |   |
    |   6 origin/master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
  • git签出分支

    3 HEAD -> branchB
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    5 branchC
    |
    4 HEAD -> branchB
    |
    3
    |
    |   2'' branchA, master
    |   |
    2   |
    |   |
    |   6 origin/master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
    5' branchC
    |
    4' HEAD -> branchB
    |
    |  7 refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • git rebase master branchB#2应该被删除,因为2“”已经是该分支

  • 解决合并冲突

    ==O==O==O==O==A master
          \        \==B branchB
           \==C branchC <== is this correct?
    
    ==O==O==O==O==A master
                   \==A' refactorA
                    \  \==B branchB <== is this correct?
                     \==C branchC
    
    5 branchC
    |
    4 branchB
    |
    3
    |
    |   2'' HEAD -> branchA
    |   |
    2   |
    |   |
    |   6 origin/master, master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
    5 branchC
    |
    |   4' HEAD -> branchB
    |   |
    4   |
    |   |
    |   3'
    |   |
    3   |
    |   |
    |   2'' branchA, master
    |   |
    2   |
    |   |
    |   6 origin/master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
    5' branchC
    |
    |  4'' HEAD -> branchB
    |  |
    4' |
    |  |
    |  7 refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • git签出分支

    5 HEAD -> branchC
    |
    |   4' branchB
    |   |
    4   |
    |   |
    |   3'
    |   |
    3   |
    |   |
    |   2'' branchA, master
    |   |
    2   |
    |   |
    |   6 origin/master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
  • git rebase branchB branchC

  • 解决合并冲突#当重新基础重放branchB历史中不在branchC历史中的所有提交时,它将重放2、3、4和5;这就是为什么,如果你有冲突,你可能会再次遇到它们

        5' HEAD -> branchC
        |
        4' branchB
        |
        3'
        |
        2'' branchA, master
        |
        6 origin/master
        |
       /
      /
     /
    1
    |
    0
    
  • 设计变更需要重构branchA

  • git签出主机
  • 吉特拉力
  • git签出-b重构

    ==O==O==O==O==A master
                  |==A' refactorA
                  |==B branchB
                      \==C branchC
    
    5' branchC
    |
    4' branchB
    |
    3'
    |
    2'' branchA, master, HEAD -> refactorA
    |
    6 origin/master
    |
    1
    |
    0
    
  • 编辑重构

  • ==O==O==O==O==A master
                  |==A' refactorA
                  |==B branchB
                      \==C branchC
    
    5' branchC
    |
    4' branchB
    |
    3'
    |
    2'' branchA, master, HEAD -> refactorA
    |
    6 origin/master
    |
    1
    |
    0
    
  • git添加
  • git提交
  • git评论

    2 HEAD -> branchA
    |
    1 origin/master, master
    |
    0
    
    3 branchB
    |
    | 2' HEAD -> branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    4 HEAD -> branchB
    |
    3
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    5' branchC
    |
    4' branchB
    |
    |  7 HEAD -> refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • git签出分支

    3 HEAD -> branchB
    |
    | 2' branchA
    | |
    2 | 
    |/
    1 origin/master, master
    |
    0
    
    5 branchC
    |
    4 HEAD -> branchB
    |
    3
    |
    |   2'' branchA, master
    |   |
    2   |
    |   |
    |   6 origin/master
    |   |
    |  /
    | /
    |/
    1
    |
    0
    
    5' branchC
    |
    4' HEAD -> branchB
    |
    |  7 refactorA
    |  |
    3' |
    | /
    2'' branchA, master
    |
    6 origin/master
    |
    1
    |
    0
    
  • git rebase重构branchB