Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -e
- root=/tmp/gittest
- mkdir -p $root
- a=$root/a
- b=$root/b
- rm -RfI $a $b || true
- genTestRepo() {
- local isB="$1"
- local r="$2"
- mkdir $r
- cd $r
- git init
- echo "abc def" > a.txt
- echo "xyz" > b.txt
- git add a.txt b.txt
- GIT_AUTHOR_DATE='Fri Feb 22 10:00:00 2013 +0100' git commit -m "commit 1 - $r"
- sleep 1
- if [ -z "$isB" ]; then # make some garbage
- echo "1 2 3" >>z.txt
- git add z.txt
- GIT_AUTHOR_DATE='Fri Feb 22 11:00:00 2013 +0100' git commit -m "commit 1b * $r"
- sleep 1
- fi
- echo "123" > c.txt
- git add c.txt
- GIT_AUTHOR_DATE='Fri Feb 22 12:00:00 2013 +0100' git commit -m "commit 2 - $r"
- sleep 1
- if [ -n "$isB" ]; then # make some garbage
- echo "A B C" >>x.txt
- git add x.txt
- GIT_AUTHOR_DATE='Fri Feb 22 13:00:00 2013 +0100' git commit -m "commit 2b * $r"
- sleep 1
- fi
- rm b.txt
- git rm b.txt
- GIT_AUTHOR_DATE='Fri Feb 22 14:00:00 2013 +0100' git commit -m "commit 3 - $r"
- sleep 1
- rm a.txt
- echo "another line" >a.txt
- git add a.txt
- GIT_AUTHOR_DATE='Fri Feb 22 15:00:00 2013 +0100' git commit -m "last common commit"
- sleep 1
- if [ -n "$isB" ]; then # make this branch newer
- echo "2nd line" >>a.txt
- git add a.txt
- GIT_AUTHOR_DATE='Fri Feb 22 16:00:00 2013 +0100' git commit -m "commit 4 * $b"
- sleep 1
- echo "xxx" >d.txt
- git add d.txt
- GIT_AUTHOR_DATE='Fri Feb 22 17:00:00 2013 +0100' git commit -m "commit 5 * $b"
- sleep 1
- fi
- git log | cat
- }
- genTestRepo "" "$a"
- genTestRepo "1" "$b"
- echo "== rebase new master =="
- cd $b
- git branch -m master master_tmpnew
- git remote add origin file://$a
- git fetch origin master:refs/remotes/origin/master
- git checkout master
- #echo "== rebase new master (easy way) =="
- #git checkout master_tmpnew
- #git rebase master
- echo "== rebase new master (safe way) =="
- echo " find:"
- lastbr=
- lastrest=
- revU= # Update
- revB= # Base
- rm -f rev.*.tmp
- (
- git log --format='format:b %H %at %an %ae %f' master
- echo
- git log --format='format:u %H %at %an %ae %f' master_tmpnew
- ) | sort -r -t' ' -k3 | while read br rev rest; do
- echo "? $br $rev $rest"
- [ "$br" != "u" ] || revU="$rev"
- [ "$br" != "b" ] || revB="$rev"
- if [ "$lastrest" = "$rest" -a "$lastbr" != "$br" ]; then
- echo "found match: base $revB updae $revU"
- echo "$revB" >rev.base.tmp
- echo "$revU" >rev.update.tmp
- break
- fi
- lastrest="$rest"
- lastbr="$br"
- done
- echo " do:"
- if [ ! -f rev.base.tmp ]; then
- echo "No matching revision found"
- exit 1
- fi
- revB="`cat rev.base.tmp`"
- revU="`cat rev.update.tmp`"
- git rebase --onto $revB $revU master_tmpnew
- echo "== merge =="
- git checkout master
- git merge --ff-only master_tmpnew
- echo "== log =="
- #echo "== push =="
- #git push origin master
- git log | cat
- echo "done."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement