1. Za veće timove ne znam, ali za manje nema potrebe ništa osim version controla i eventualno nekog teamwork alata (kao npr. Asana) čisto zbog koordinacije šta ko treba da radi ako numete da pričate IRL.
2. Konflikte će pokušati da reši VCS sistem ako može (tj ako su izmene u fajlu "dovoljno daleko", jer ih generiše "diff" alat koji osim offseta čuva i ime funkcije u kojoj su izmene plus nekoliko redova pre i posle, pa će uspeti da ih nađe čak i ako nisu na odgovarajućem offsetu u fajlu), ali može da ne prođe, ostaće ti "rejected" fajlovi pa možeš da probaš ručno da ubaciš. U krajnjem slučaju, ako radiš nešto bitno, tu je uvek "lock" fajla (samo ne treba da zaboraviš da otključaš nakon što komituješ). Doduše ne znam kako ide na web projektima, ali u ovim "tradicionalnim" jezicima se obično sve pocepa na mnogo fajlova (tipa svaka klasa ili logička celina u jedan fajl), tako da ako ga zaključaš, obično nećeš zajebati ostale.
3. Nema neke potrebe za branchovanjem osim ako ne radiš nešto što će ići u više koraka i za šta postoji dobra verovatnoća da neće proći. Ali dobro si shvatio branchovanje.
Uglavnom iščitaj opet http://git-scm.com/book/en/Git-Basics