/ / Ako aktualizovať začiatočný bod tak, aby nahradil zlúčenie odovzdania - git, git-svn, vetching-and-merging

Ako aktualizovať spúšťací bod nahradzujúci zlúčenie commit - git, git - svn, rozvetvenie a zlúčenie

Radi by sme premenili repozitár svn na git. Teraz by som chcel urobiť nejaké vyčistenie na prevedenej vetve:

A1-A2-A3--A6-A7-----A11-A12-An
                  /
`------B1-B2---B25´

B1 je zlúčený záväzok importovať zmeny A3 do A7 do vetvy B. Lepším spôsobom by mohlo byť začatie od A7 a odstránenie zlúčeného potvrdenia B1.

A1--A6-A7-A8-A9----A12-An
         /
`B2--B25´

Skúsil som rebázu na vetve B až A, ale výsledok je už rovnaký.

aktualizovať Ako nedorozumenie proti prúdu neexistuje na A žiadna sledovaná vzdialená vetva. (svn pobočky a značky boli odstránené).

Názov som tiež aktualizoval

odpovede:

0 pre odpoveď č. 1

Myslím, že ste na správnej ceste. Skúste nasledujúce zrevidovať svoje zmeny z vetvy B na špičku vetvy A:

git checkout A
git pull
git checkout B
git pull
git rebase A
<fix conflicts>
git push -f

0 pre odpoveď č. 2

Tecnický bod: Ak zmeníte históriu, vytvoria sa nové potvrdenia (budú mať nové hashe a ak je vaša história mena už zdieľaná s ostatnými vývojármi, musíte im povedať, aby prinútili aktualizovať svoje repo).

Popíšem spôsob transformácie:

# this :
A1-A2-A3--A6-A7-----A11-A12-An
                  /
`------B1-B2---B25´

# into this :
A1--A6-A7-A8-A9---A11-A"12-A"n
           /
`B"2--B"25´

Záväzky týkajúce sa B pobočkou budú nové záväzky, ako aj záväzky na internete A vetva, začínajúca od merge in B dopustiť.


Pre začiatočníkov by som navrhol pracovať na dočasných pobočkách:

# create branch "wipB" on commit B25 and switch to this new branch :
git checkout -b wipB B25
  1. Ak chcete prehrať B2, ..., B25 na vrchu A7, môžete použiť
    git rebase --onto <new_base> <upstream> <branch>
    variantu git rebase (doc tu):

    # note the `B1` : the commit mentionned as <upstream> is ommitted
    git rebase --onto A7 B1 wipB
    
  2. obnoviť zlúčenie A12 :

    # start a new "A" branch from A11 :
    git checkout -b wipA A11
    
    # merge the new "B" branch :
    git merge wipB
    
    # once merge is resolved, you can compare with the original A12 to see
    # if this new merge commit has all the content you expect :
    git difftool -d wipA A12
    
  3. prehrať A13, .., An na vrchu A"12 :

    git rebase --onto wipA A12 An