From: Igor Djordjevic <igor.d.djordjevic@gmail.com>
To: git@vger.kernel.org
Cc: Johannes Sixt <j6t@kdbg.org>,
Nikolay Shustov <nikolay.shustov@gmail.com>,
Johannes Schneider <mailings@cedarsoft.com>,
Patrik Gornicz <patrik-git@mail.pgornicz.com>,
Martin Waitz <tali@admingilde.org>,
Shawn Pearce <spearce@spearce.org>, Sam Vilain <sam@vilain.net>,
Jakub Narebski <jnareb@gmail.com>
Subject: [SCRIPT/RFC 1/3] setup.sh
Date: Sun, 26 Nov 2017 23:36:20 +0100 [thread overview]
Message-ID: <397276a1-8f2b-117d-ce51-84ab832ce562@gmail.com> (raw)
In-Reply-To: <8998e832-f49f-4de4-eb8d-a7934fba97b5@gmail.com>
On 26/11/2017 23:35, Igor Djordjevic wrote:
>
> This is what we end up with once "master" and topic branches are
> merged in merge commit M1 inside temporary "test" branch for further
> integration testing:
>
> (2) o---o---A (topicA)
> / \
> / M1 (test, HEAD)
> / /||
> ---o---o---M---/ || (master)
> \ \ / |
> \ o---B-/ | (topicB)
> \ |
> o---o---C--/ (topicC)
To begin with, you can use provided "setup.sh"[*1*] script, putting
you straight into position shown on graph (2) above, with addition of
tag "A" and remote branch "origin/topicA" so you could try using
these as "--onto-parent" values, too.
As seen in there, change "X" is already made and staged, so you can
now just run something like:
git-commit--onto-parent.sh --onto-parent topicA
... to see the logic in action.
Instead of "topicA", you may try providing tag "A", remote branch
"origin/topicA" or even plain commit hash. It`s interesting to add
"--amend" option into the mix, too, and see what happens. Also, you
can try using "topicB" and see the commit fail (as it doesn`t merge
cleanly).
All this while "test.txt" file doesn`t get modified on disk (nor
would any other file) - being desired behaviour, as we didn`t
actually change anything inside the working tree, but just amended
history of how we got here, so recompilation isn`t needlessly
triggered :)
p.s. Note these two lines near the end:
sed -i '4iX1' test.txt # works with simple patch apply
sed -i '17iX2' test.txt # needs three-way file merge
You can play with it, commenting out one or the other and observing
how it influences "git commit --onto-parent" in regards of the parent
provided.
Regards, Buga
[*1*] "setup.sh", can clean previous setup run as well, but commented
out here for safety, not to unexpectedly delete something for unwary
user.
--- 8< ---
#!/bin/sh
#rm -rf ./.git
#rm -f ./test.txt
git init
touch ./test.txt
git add -- test.txt
for i in {1..10}
do
echo $i >>test.txt
git commit -am "$i"
done
echo M >>test.txt
git commit -am "M"
git checkout -b topicA HEAD~2
for i in 1 2
do
sed -i "${i}iA${i}" test.txt
git commit -am "A$i"
done
sed -i '3iA' test.txt
git commit -am "A"
git tag A
# simulate remote branch
mkdir -p ./.git/refs/remotes/origin &&
echo $(git rev-parse HEAD^0) >$_/topicA
git checkout -b topicB master^
sed -i '4iB1' test.txt
git commit -am "B1"
sed -i '5iB' test.txt
git commit -am "B"
git checkout -b topicC master~2
for i in 1 2
do
j=`expr "$i" + 5`
sed -i "${j}iC${i}" test.txt
git commit -am "C$i"
done
sed -i "8iC" test.txt
git commit -am "C"
git checkout -b test master
git merge --no-edit topicA topicB topicC
sed -i '4iX1' test.txt # works with simple patch apply
sed -i '17iX2' test.txt # needs three-way file merge
git add -- test.txt
echo
git log --all --decorate --oneline --graph
echo
git diff --cached
next prev parent reply other threads:[~2017-11-26 23:01 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-26 22:35 [SCRIPT/RFC 0/3] git-commit --onto-parent (three-way merge, no working tree file changes) Igor Djordjevic
2017-11-26 22:36 ` Igor Djordjevic [this message]
2017-11-26 22:36 ` [SCRIPT/RFC 2/3] git-merge-one-file--cached Igor Djordjevic
2017-11-26 22:45 ` [SCRIPT/RFC 3/3] git-commit--onto-parent.sh Igor Djordjevic
2017-11-27 21:54 ` [SCRIPT/RFC 0/3] git-commit --onto-parent (three-way merge, no working tree file changes) Johannes Sixt
2017-11-28 1:15 ` Igor Djordjevic
2017-11-29 19:11 ` Johannes Sixt
2017-11-29 23:10 ` Igor Djordjevic
2017-12-01 17:23 ` Johannes Sixt
2017-12-04 2:33 ` Igor Djordjevic
2017-12-06 18:34 ` Johannes Sixt
2017-12-06 18:40 ` Junio C Hamano
2017-12-08 0:15 ` Igor Djordjevic
2017-12-08 16:24 ` Junio C Hamano
2017-12-08 23:54 ` Igor Djordjevic
2017-12-09 2:18 ` Alexei Lozovsky
2017-12-09 3:03 ` Igor Djordjevic
2017-12-09 19:00 ` [SCRIPT/RFC 0/3] git-commit --onto-parent (three-way merge,noworking " Phillip Wood
2017-12-09 19:01 ` [SCRIPT/RFC 0/3] git-commit --onto-parent (three-way merge, noworking " Phillip Wood
2017-12-10 1:20 ` Igor Djordjevic
2017-12-10 12:22 ` [SCRIPT/RFC 0/3] git-commit --onto-parent (three-way merge,noworking " Phillip Wood
2017-12-10 23:17 ` Igor Djordjevic
2017-12-11 1:13 ` Alexei Lozovsky
2017-12-11 1:00 ` Alexei Lozovsky
2017-11-30 22:40 ` [SCRIPT/RFC 0/3] git-commit --onto-parent (three-way merge, no working " Chris Nerwert
2017-12-03 23:01 ` Igor Djordjevic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=397276a1-8f2b-117d-ce51-84ab832ce562@gmail.com \
--to=igor.d.djordjevic@gmail.com \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=jnareb@gmail.com \
--cc=mailings@cedarsoft.com \
--cc=nikolay.shustov@gmail.com \
--cc=patrik-git@mail.pgornicz.com \
--cc=sam@vilain.net \
--cc=spearce@spearce.org \
--cc=tali@admingilde.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).