代码之家  ›  专栏  ›  技术社区  ›  merry-go-round

合并还是重新定位?

  •  1
  • merry-go-round  · 技术社区  · 6 年前

    这是我目前的承诺。

    commit1 - commit 2 - commit3 - commit4 - cmmit5 (my-app branch)
    

    我退房了 commit1 做出改变

    git checkout <commi1's SHA>
    // made some changes
    git add . && git commit -m "commit prime 1"
    // made other changes
    git add . && git commit -m "commit prime 2"
    

    现在,我想合并(?)或重新定位(?)在上面 my-app 分支。

    我不在乎提交5,我只想把我当前的更改 委员会1 到我的应用分支的顶部(不是合并而是重写!)。因此输出将如下

    commit1 - commit 2 - commit3 - commit4 - cmmit5 - commit prime 1 - commit prime2" (my-app branch)
    
    • 我想我不需要“合并” commit 5 commit prime 2 .
    • 也许我应该用瑞贝斯?

    这是我当前的终端提示:

    jbaaa at jo's computer ~/directory on (HEAD detached from 8a36f955fc)*
    

    Git状态输出:

    HEAD detached from 8a36f955fc
    

    无需承诺,工作树干净。

    假设Commit5是

    '12345'
    ''
    ''
    

    委员会1是

    '1'
    ''
    ''
    

    提交prime2是

    '1' 
    'prime1 and prime2'
    

    最终结果必须是

    '1'
    'prime1 and prime2'
    

    如果我们 merge ,我们得到了这个结果。我们如何避免?

    '12345'
    'prime1 and prime2'
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   sergej    6 年前

    你处于所谓的“头脑分离”状态,这意味着你没有在一个分支上工作。首先,把你目前的工作放在一个部门。

    git checkout -b my-feature
    

    如果要放弃提交5,请将工作重新定位到提交4。

    git rebase <commit4's SHA>
    

    你得到的将是这样的:

    c1 - c2 - c3 - c4 - c5 (my-app)
                    \
                     p1 - p2 (my-feature)
    

    因为你不在乎提交5,所以将我的应用重置为我的功能(p2)。

    git checkout my-app
    git reset --hard my-feature
    

    最终结果:

                     c5 # no branch
                    /
    c1 - c2 - c3 - c4 - p1 - p2 (my-app, my-feature)
    

    我不敢用回扣

    如果不确定是否要重新定位,请保持当前分支不变,并在开始重新定位之前创建一个新分支,例如:

    git checkout -b my-feature-rebased
    

    最终结果:

                     c5 # no branch
                    /
    c1 - c2 - c3 - c4 - p1 - p2 (my-app, my-feature-rebased)
     \
      p1 - p2 (my-feature) # backup
    
        2
  •  -1
  •   li pengfei    6 年前

    你可以用 git rest --hard <commit1 hash> 把你的头移到委员会1