Re: Cleaning up history with git rebase
On Thu, 04 Aug 2011 14:35:19 -0000, Michael Witten <mfwitten@gmail.com>
wrote:
Show 118 quoted lines
> [Put your reply text below the quoted text.]
>
> On Wed, 03 Aug 2011 17:58:26 -0300, Patricia Egeland wrote:
>
>> On Mon, 01 Aug 2011 01:07:33 -0000, Michael Witten wrote:
>>
>>> Michael Witten wrote:
>>>
>>>> On Sun, 31 Jul 2011 18:44:43 -0300, Ricky, Egeland wrote:
>>>>
>>>>> On Jul 31, 2011, at 6:33 PM, Michael Witten wrote:
>>>>>
>>>>>> On Sun, Jul 31, 2011 at 20:21, Michael Witten
>>>>>> <mfwitten@gmail.com>
>>>>>> wrote:
>>>>>>> Why are there conflicts anyway?
>>>>>>
>>>>>> Oh...
>>>>>>
>>>>>> I guess there were conflicts when the merge commit was made in
>>>>>> the original repository, and these conflicts were resolved by
>>>>>> the merge commit itself. Hence, when rebase tries to split up
>>>>>> a merge by dealing with just the non-merge parents, you end up
>>>>>> having to deal with the conflict again.
>>>>>
>>>>> Yes, I thought it was something like this going on, too. In the
>>>>> pre-rebase history, when there is a commit with "Conflict:" and
>>>>> listing file which is in the sub-repository history, this is a
>>>>> point where rebase stops with a conflict.
>>>>>
>>>>>> Shouldn't rebase take this into account?
>>>>>
>>>>> Not sure. Seems that it does not, it makes me resolve the
>>>>> conflict
>>>>> =
>>>>> again.
>>>>
>>>> I think git rebase should take this into account is what I'm
>>>> saying.
>>>>
>>>> The following implements what I think `git rebase' should be
>>>> doing;
>>>> run it instead of `git rebase' in your repo:
>>>>
>>>> git branch saved
>>>> git rev-list HEAD --reverse --first-parent --parents |
>>>> {
>>>> read root
>>>> git reset --hard $root
>>>> rebase_head=$root
>>>>
>>>> while read commit first_parent other_parents; do
>>>>
>>>> if [ -z "$other_parents" ]; then
>>>>
>>>> git cherry-pick $commit
>>>> rebase_head=$commit
>>>>
>>>> else
>>>>
>>>> for parent in $other_parents; do
>>>>
>>>> if ! git cherry-pick $parent; then
>>>>
>>>> git reset --hard $rebase_head
>>>> git merge $other_parents
>>>> git rm -rf .
>>>> git checkout -- $commit
>>>> git commit -aC $commit
>>>> break
>>>>
>>>> fi
>>>>
>>>> done
>>>>
>>>> rebase_head=$(git rev-parse HEAD)
>>>>
>>>> fi
>>>>
>>>> done
>>>> }
>>>
>>> Woops!
>>>
>>> This line:
>>>
>>> git checkout -- $commit
>>>
>>> should be:
>>>
>>> git checkout $commit -- .
>>
>> I tried to run the script in my repo. However, seems like the
>> 'git
>> merge $other_parents' process fails. In the script output I see some
>> lines saying that files were not able to be merged, ie:
>>
>> warning: Cannot merge binary files:
>> scienceportal/images/tabs/tabs-gray.png (HEAD vs.
>> 84f6fc283861aa7c5798f58769789dd0b91a5e9d)
>> warning: Cannot merge binary files: scienceportal/images/waiting.gif
>> (HEAD vs. e033cbbf1e9d24b66cb55a04701c059dc945c1c3)
>>
>> Do you have some suggestion?
>
> That's probably as expected; the script is coming across the
> conflict, but
> it should be taking care of the conflict automatically.
>
> Unfortunately, though, the results probably end up being almost
> completely
> similar to the original un-rebased branch because the original script
> actually has ANOTHER mistake (sorry!). See the updated version here
> (or
> in your inbox):
>
> http://marc.info/?l=git&m=131246773005168&w=2
> Message-ID: <d62225a3cc5740cda7cb163a94d55892-mfwitten@gmail.com> Thanks for taking a look at it again.
I tried to run the script with that update, but in the end I got more
merge messages than I had originally. (71 additional merges. From those
71, I got 53 "Merge commit" messages. While in the saved repo I have 1
"Merge commit".). Do you see what may be causing that?
Another thing I noticed is that the auto-merging is still failing:
fatal: Commit b0596fce207735081b8aa9afdd9686b7d412f5d8 is a merge but
no -m option was given.
HEAD is now at ac5eaa2 *Continue Last Commit*
Auto-merging scienceportal/css/myprofile.css
CONFLICT (content): Merge conflict in scienceportal/css/myprofile.css
Auto-merging scienceportal/css/qc.css
Automatic merge failed; fix conflicts and then commit the result.
scienceportal/css/myprofile.css: needs merge
rm 'scienceportal/css/des.css'
Looking at this thread:
http://www.mail-archive.com/git-users@googlegroups.com/msg01046.html
I thought that the attempt of removing the files was the step first
facing the conflicts as the one shown above. So that, I tried to iterate
through the files and in case the removal of any file failed, I added
the steps as suggested in the thread:
git checkout --theirs $file
git add $file
git commit -m 'Fixing conflict during rebase'
But that didn't work either.
I'd be greatly appreciated if you are still willing to help.
Thanks,
Patricia