|
|
$ cat >> $HGRCPATH <<EOF
|
|
|
> [extensions]
|
|
|
> rebase=
|
|
|
> histedit=
|
|
|
>
|
|
|
> [alias]
|
|
|
> tglog = log -G --template "{rev}: '{desc}' {branches}\n"
|
|
|
> EOF
|
|
|
|
|
|
|
|
|
$ hg init a
|
|
|
$ cd a
|
|
|
|
|
|
$ echo C1 > C1
|
|
|
$ hg ci -Am C1
|
|
|
adding C1
|
|
|
|
|
|
$ echo C2 > C2
|
|
|
$ hg ci -Am C2
|
|
|
adding C2
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
$ hg clone a b
|
|
|
updating to branch default
|
|
|
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
|
|
$ hg clone a c
|
|
|
updating to branch default
|
|
|
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
|
|
$ cd b
|
|
|
|
|
|
$ echo L1 > L1
|
|
|
$ hg ci -Am L1
|
|
|
adding L1
|
|
|
|
|
|
|
|
|
$ cd ../a
|
|
|
|
|
|
$ echo R1 > R1
|
|
|
$ hg ci -Am R1
|
|
|
adding R1
|
|
|
|
|
|
|
|
|
$ cd ../b
|
|
|
|
|
|
Now b has one revision to be pulled from a:
|
|
|
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
rebasing 2:ff8d69a621f9 "L1"
|
|
|
saved backup bundle to $TESTTMP/b/.hg/strip-backup/ff8d69a621f9-160fa373-rebase.hg (glob)
|
|
|
|
|
|
$ hg tglog
|
|
|
@ 3: 'L1'
|
|
|
|
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
Re-run:
|
|
|
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
no changes found
|
|
|
|
|
|
Abort pull early if working dir is not clean:
|
|
|
|
|
|
$ echo L1-mod > L1
|
|
|
$ hg pull --rebase
|
|
|
abort: uncommitted changes
|
|
|
(cannot pull with rebase: please commit or shelve your changes first)
|
|
|
[255]
|
|
|
$ hg update --clean --quiet
|
|
|
|
|
|
Abort pull early if another operation (histedit) is in progress:
|
|
|
|
|
|
$ hg histedit . -q --commands - << EOF
|
|
|
> edit d80cc2da061e histedit: generate unfinished state
|
|
|
> EOF
|
|
|
Editing (d80cc2da061e), you may commit or record as needed now.
|
|
|
(hg histedit --continue to resume)
|
|
|
[1]
|
|
|
$ hg pull --rebase
|
|
|
abort: histedit in progress
|
|
|
(use 'hg histedit --continue' or 'hg histedit --abort')
|
|
|
[255]
|
|
|
$ hg histedit --abort --quiet
|
|
|
|
|
|
Abort pull early with pending uncommitted merge:
|
|
|
|
|
|
$ cd ..
|
|
|
$ hg clone --noupdate c d
|
|
|
$ cd d
|
|
|
$ hg tglog
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
$ hg update --quiet 0
|
|
|
$ echo M1 > M1
|
|
|
$ hg commit --quiet -Am M1
|
|
|
$ hg update --quiet 1
|
|
|
$ hg merge 2
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
(branch merge, don't forget to commit)
|
|
|
$ hg pull --rebase
|
|
|
abort: outstanding uncommitted merge
|
|
|
(cannot pull with rebase: please commit or shelve your changes first)
|
|
|
[255]
|
|
|
$ hg update --clean --quiet
|
|
|
|
|
|
Abort pull early with unclean subrepo:
|
|
|
$ echo s = s > .hgsub
|
|
|
$ hg add .hgsub
|
|
|
$ hg init s
|
|
|
$ hg commit -m "generated a subrepo"
|
|
|
$ echo a > s/a
|
|
|
$ hg -R s add s/a
|
|
|
$ hg pull --rebase
|
|
|
abort: uncommitted changes in subrepository 's'
|
|
|
(cannot pull with rebase: please commit or shelve your changes first)
|
|
|
[255]
|
|
|
|
|
|
Invoke pull --rebase and nothing to rebase:
|
|
|
|
|
|
$ cd ../c
|
|
|
|
|
|
$ hg book norebase
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
nothing to rebase - updating instead
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
updating bookmark norebase
|
|
|
|
|
|
$ hg tglog -l 1
|
|
|
@ 2: 'R1'
|
|
|
|
|
|
|
~
|
|
|
|
|
|
pull --rebase --update should ignore --update:
|
|
|
|
|
|
$ hg pull --rebase --update
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
no changes found
|
|
|
|
|
|
pull --rebase doesn't update if nothing has been pulled:
|
|
|
|
|
|
$ hg up -q 1
|
|
|
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
no changes found
|
|
|
|
|
|
$ hg tglog -l 1
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
~
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
pull --rebase works when a specific revision is pulled (issue3619)
|
|
|
|
|
|
$ cd a
|
|
|
$ hg tglog
|
|
|
@ 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
$ echo R2 > R2
|
|
|
$ hg ci -Am R2
|
|
|
adding R2
|
|
|
$ echo R3 > R3
|
|
|
$ hg ci -Am R3
|
|
|
adding R3
|
|
|
$ cd ../c
|
|
|
$ hg tglog
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
@ 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
$ echo L1 > L1
|
|
|
$ hg ci -Am L1
|
|
|
adding L1
|
|
|
created new head
|
|
|
$ hg pull --rev tip --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 2 changesets with 2 changes to 2 files
|
|
|
rebasing 3:ff8d69a621f9 "L1"
|
|
|
saved backup bundle to $TESTTMP/c/.hg/strip-backup/ff8d69a621f9-160fa373-rebase.hg (glob)
|
|
|
$ hg tglog
|
|
|
@ 5: 'L1'
|
|
|
|
|
|
|
o 4: 'R3'
|
|
|
|
|
|
|
o 3: 'R2'
|
|
|
|
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
pull --rebase works with bundle2 turned on
|
|
|
|
|
|
$ cd ../a
|
|
|
$ echo R4 > R4
|
|
|
$ hg ci -Am R4
|
|
|
adding R4
|
|
|
$ hg tglog
|
|
|
@ 5: 'R4'
|
|
|
|
|
|
|
o 4: 'R3'
|
|
|
|
|
|
|
o 3: 'R2'
|
|
|
|
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
$ cd ../c
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
rebasing 5:518d153c0ba3 "L1"
|
|
|
saved backup bundle to $TESTTMP/c/.hg/strip-backup/518d153c0ba3-73407f14-rebase.hg (glob)
|
|
|
$ hg tglog
|
|
|
@ 6: 'L1'
|
|
|
|
|
|
|
o 5: 'R4'
|
|
|
|
|
|
|
o 4: 'R3'
|
|
|
|
|
|
|
o 3: 'R2'
|
|
|
|
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
|
|
|
pull --rebase only update if there is nothing to rebase
|
|
|
|
|
|
$ cd ../a
|
|
|
$ echo R5 > R5
|
|
|
$ hg ci -Am R5
|
|
|
adding R5
|
|
|
$ hg tglog
|
|
|
@ 6: 'R5'
|
|
|
|
|
|
|
o 5: 'R4'
|
|
|
|
|
|
|
o 4: 'R3'
|
|
|
|
|
|
|
o 3: 'R2'
|
|
|
|
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
$ cd ../c
|
|
|
$ echo L2 > L2
|
|
|
$ hg ci -Am L2
|
|
|
adding L2
|
|
|
$ hg up 'desc(L1)'
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
rebasing 6:0d0727eb7ce0 "L1"
|
|
|
rebasing 7:c1f58876e3bf "L2"
|
|
|
saved backup bundle to $TESTTMP/c/.hg/strip-backup/0d0727eb7ce0-ef61ccb2-rebase.hg (glob)
|
|
|
$ hg tglog
|
|
|
o 8: 'L2'
|
|
|
|
|
|
|
@ 7: 'L1'
|
|
|
|
|
|
|
o 6: 'R5'
|
|
|
|
|
|
|
o 5: 'R4'
|
|
|
|
|
|
|
o 4: 'R3'
|
|
|
|
|
|
|
o 3: 'R2'
|
|
|
|
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
|
|
|
pull --rebase update (no rebase) use proper update:
|
|
|
|
|
|
- warn about other head.
|
|
|
|
|
|
$ cd ../a
|
|
|
$ echo R6 > R6
|
|
|
$ hg ci -Am R6
|
|
|
adding R6
|
|
|
$ cd ../c
|
|
|
$ hg up 'desc(R5)'
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
nothing to rebase - updating instead
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
updated to "65bc164c1d9b: R6"
|
|
|
1 other heads for branch "default"
|
|
|
$ hg tglog
|
|
|
@ 9: 'R6'
|
|
|
|
|
|
|
| o 8: 'L2'
|
|
|
| |
|
|
|
| o 7: 'L1'
|
|
|
|/
|
|
|
o 6: 'R5'
|
|
|
|
|
|
|
o 5: 'R4'
|
|
|
|
|
|
|
o 4: 'R3'
|
|
|
|
|
|
|
o 3: 'R2'
|
|
|
|
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
|
|
|
Multiple pre-existing heads on the branch
|
|
|
-----------------------------------------
|
|
|
|
|
|
Pull bring content, but nothing on the current branch, we should not consider
|
|
|
pre-existing heads.
|
|
|
|
|
|
$ cd ../a
|
|
|
$ hg branch unrelatedbranch
|
|
|
marked working directory as branch unrelatedbranch
|
|
|
(branches are permanent and global, did you want a bookmark?)
|
|
|
$ echo B1 > B1
|
|
|
$ hg commit -Am B1
|
|
|
adding B1
|
|
|
$ cd ../c
|
|
|
$ hg up 'desc(L2)'
|
|
|
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
nothing to rebase
|
|
|
|
|
|
There is two local heads and we pull a third one.
|
|
|
The second local head should not confuse the `hg pull rebase`.
|
|
|
|
|
|
$ hg up 'desc(R6)'
|
|
|
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
|
$ echo M1 > M1
|
|
|
$ hg commit -Am M1
|
|
|
adding M1
|
|
|
$ cd ../a
|
|
|
$ hg up 'desc(R6)'
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ echo R7 > R7
|
|
|
$ hg commit -Am R7
|
|
|
adding R7
|
|
|
$ cd ../c
|
|
|
$ hg up 'desc(L2)'
|
|
|
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
|
$ hg pull --rebase
|
|
|
pulling from $TESTTMP/a (glob)
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
rebasing 7:864e0a2d2614 "L1"
|
|
|
rebasing 8:6dc0ea5dcf55 "L2"
|
|
|
saved backup bundle to $TESTTMP/c/.hg/strip-backup/864e0a2d2614-2f72c89c-rebase.hg (glob)
|
|
|
$ hg tglog
|
|
|
@ 12: 'L2'
|
|
|
|
|
|
|
o 11: 'L1'
|
|
|
|
|
|
|
o 10: 'R7'
|
|
|
|
|
|
|
| o 9: 'M1'
|
|
|
|/
|
|
|
| o 8: 'B1' unrelatedbranch
|
|
|
|/
|
|
|
o 7: 'R6'
|
|
|
|
|
|
|
o 6: 'R5'
|
|
|
|
|
|
|
o 5: 'R4'
|
|
|
|
|
|
|
o 4: 'R3'
|
|
|
|
|
|
|
o 3: 'R2'
|
|
|
|
|
|
|
o 2: 'R1'
|
|
|
|
|
|
|
o 1: 'C2'
|
|
|
|
|
|
|
o 0: 'C1'
|
|
|
|
|
|
|