ASAP stop doing rebases when merging. It can create duplicate commits with different SHA1s. This is actually happening in our repository:
https://htcondor-wiki.cs.wisc.edu/index.cgi/chngview?cn=41387
https://htcondor-wiki.cs.wisc.edu/index.cgi/chngview?cn=41474
When you merge from two different locations, the rebase will rewrite the previous rebase. (To be fair, that's exactly what it's advertised as doing.) This can easily happen when working on a topic branch with another person and occasionally merging master into the branch.
For the curious, the attached script creates a toy repository that exhibits the problem.
--
Alan De Smet Center for High Throughput Computing
adesmet@xxxxxxxxxxx http://chtc.cs.wisc.edu
#! /bin/sh
# Bail on failure
set -e
mkdir test.git
pushd test.git
git --bare init
popd
mkdir 1
pushd 1
git clone ../test.git
cd test
cp /etc/services ./
git add services
git commit -m "Start"
git push
popd
mkdir 2
pushd 2
git clone ../test.git/
popd
mkdir 3
pushd 3
git clone ../test.git/
popd
pushd 2/test
git branch newbranch
git checkout newbranch
rm services
(echo "start" ; cat /etc/services) > services
git commit -a -m "add start"
git push --set-upstream origin newbranch
perl -pi -e 's/^start$/START/' services
git commit -a -m "capitalize start"
popd
pushd 3/test
git pull
git checkout newbranch
echo end >> services
git commit -a -m "add end"
git push
popd
pushd 1/test
perl -pi -e 's/00/XX/' services
git commit -a -m "00 to XX"
git push
popd
pushd 2/test
git fetch
git rebase origin/master
git rebase origin/newbranch
git checkout master
git pull
popd
pushd 2/test
cat <<END
The following two lines should identical, as they represent
the same commit. However, the "rebase merge" rewrote it, so
now there are two distinct commits.
END
git log --grep XX | grep commit
git checkout newbranch > /dev/null 2>&1
git log --grep XX | grep commit
cat <<END
You can manually check this by going into 2/test and running:
git checkout master
git log --grep XX
git checkout newbranch
git log --grep XX
END
|