I have no idea what a "describing explanation" is, but thank you very much.
As I said, a flag is just a bit in a register in the PIC's register file. These bits are set by the hardware, in the the peripheral devices, in the PIC. That is why these registers in the register file do not behave like RAM. Their values can change without the processor executing instructions or doing anything else.
In order for an interrupt to happen you muse enable the individual interrupt by setting the corresponding interrupt enable bit to a one(1) AND you must set GIE to a one(1). If you had told me which PIC you were using, I could point to a page in the datasheet, with a picture, that would make things clearer.
The PIC processor does not "search" for interrupts. There is a multiple input OR-gate whose output says "there is" an interrupt or "there is not". If there is an interrupt the current Program Counter is pushed onto the hardware stack and the value 0x0004 is "jammed" into the program counter in such a way that the next instruction executed is at address 0x0004.
In the main program you do not normally need to be concerned with checking for flags, although you can poll them with all interrupts disabled (GIE = 0). You do need to be concerned with which interrupts are enabled and disabled. When you get to address 0x0004 and have saved W and STATUS, now you have an if-the-else chain to identify which of the many flags associated with enabled interrupts caused the processor to suspend what it was doing and go to address 0x0004.
Different PIC's have different arrangements of things which generate interrupts. I know this is yelling, but WHICH PIC ARE WE TALKING AOBUT?
Yes it is a good idea to start with all the interrupt enables, and flags at zero, and you don't have to do it one bit at a time you can write entire registers. As you intialize each peripheral you can turn on it's individual enable. When initialization is complete and the application is ready to run set GIE to a one(1).
When an interrupt is executing you need for GIE to be zero so you don't end up in an infinite loop. When the PIC goes to address 0x0004 it clears GIE so no further interrupts can happen until you want them to. RETFIE is just a subroutine return which turns GIE back to a one(1). It is a return with interrupts enabled.
If you don't know about the W register it is pretty hard to explain what is going on inside the processor. W is one of the implied operands in the arithmetic and logival instructions. Since the W register and the STATUS register might be modified in an interrupt routine you need to save their values, so that when you return to the main program, the values are the same as they were before you went to the interrupt routine.