Hi,
At $dayjob we have some simple "code quality" checks that we run to
make sure that things are heading in the right direction. These are
usually run as part of our automated builds but people occasionally
run them when merging updates from other teams or preparing to merge
to the integration branch.
The typical invocation is something like
git checkout HEAD^
score1=$(script.sh)
git checkout master
score2=$(script.sh)
# compare scores ...
The problem is that if this is run after resolving merge conflicts but
before committing the changes (i.e. the merge resolution is in the
index) the fact that a merge was in progress is lost. I have modified
script.sh to check for a clean work tree but I'm wondering if this is
actually a bug worth fixing.
Here's a simple reproduction (apologies in advance for gmails wrapping)
$ git --version
git version 1.8.4.rc2
$ git init
$ for x in a b c d e f; do echo "$x" >"${x}.txt"; git add
"${x}.txt"; git commit -m"Add ${x}.txt"; done
$ git checkout -b foo HEAD^^^
$ for x in d e f; do echo "x" >"${x}.txt"; git add "${x}.txt"; git
commit -m"Add ${x}.txt"; done
$ git checkout master
$ git merge foo
$ git mergetool
# At this point the conflict resolution is in the index as expected
$ git checkout HEAD^
error: Your local changes to the following files would be
overwritten by checkout:
f.txt
Please, commit your changes or stash them before you can switch branches.
Aborting
# OK so far so good. Checkout failed and we're still in a mergey state
$ ll .git
drwxr-xr-x 2 chrisp swdept 4096 Sep 4 17:47 info/
drwxr-xr-x 3 chrisp swdept 4096 Sep 4 17:49 logs/
-rw-r--r-- 1 chrisp swdept 41 Sep 4 17:51 MERGE_HEAD
-rw-r--r-- 1 chrisp swdept 0 Sep 4 17:51 MERGE_MODE
-rw-r--r-- 1 chrisp swdept 52 Sep 4 17:51 MERGE_MSG
-rw-r--r-- 1 chrisp swdept 141 Sep 4 17:51 MERGE_RR
drwxr-xr-x 40 chrisp swdept 4096 Sep 4 17:52 objects/
-rw-r--r-- 1 chrisp swdept 41 Sep 4 17:51 ORIG_HEAD
$ git checkout master
M d.txt
M e.txt
M f.txt
Already on 'master'
# Hmm, that kind of indicates that it did something but "Already on
'master'" makes me think it was a noop
$ ll .git
drwxr-xr-x 2 chrisp swdept 4096 Sep 4 17:47 info/
drwxr-xr-x 3 chrisp swdept 4096 Sep 4 17:49 logs/
drwxr-xr-x 40 chrisp swdept 4096 Sep 4 17:52 objects/
-rw-r--r-- 1 chrisp swdept 41 Sep 4 17:51 ORIG_HEAD
# mergey state is lost but the changes are still in the index.
Cheers,
Chris
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html