Beberapa hal penyebab terjadinya perlawanan rakyat yang dipimpin oleh Pangeran Diponegoro, antara lain sebagai berikut:
- Keraton merasa dihina dan diturunkan martabatnya akibat pemerintahan kolonial Belanda terlalu jauh mencampuri urusan dalam keraton;
- Penderitaan rakyat yang makin hebat akibat perlakuan pemerintah kolonial Belanda yang sewenang-wenang;
- Kekecewaan kaum ulama terhadap sikap orang-orang Belanda yang merendahkan budaya timur dan menjunjung tinggi budaya barat.
Selain penyebab umum seperti di atas, ada satu penyebab khusus Perang Diponegoro, yaitu pembuatan jalan Yogyakarta - Magelang yang melalui makam leluhur Pangeran Diponegoro di Tegalrejo tanpa izin.
Tindakan sewenang-wenang itu menimbulkan amarah Diponegoro. Pancang-pancang sebagai batas jalan segera diganti dengan tombak atas perintah Pangeran Diponegoro. Akibatnya, Belanda marah dan memerintahkan untuk menangkap Pangeran Diponegoro. Pasukan Belanda menyerbu Tegalrejo dan membakar rumah Pangeran Diponegoro. Dengan peristiwa itu, pecahlah Perang Diponegoro.
Pangeran Diponegoro mendapat dukungan dari rakyat Tegalrejo dan bergerak ke bukit Selaroang untuk menghimpun kekuatan. Dari Selaroang laskar Diponegoro kemudian mengepung kota Yogyakarta. Perang tersebut terus berpindah dari satu tempat ke tempat lain. Akibatnya, Belanda cemas karena tidak juga berhasil mengatasinya. Belanda mendatangkan pasukan tambahan dari berbagai daerah di Indonesia, bahkan dari Negeri Belanda. Akan tetapi, semuanya dapat dihancurkan oleh pasukan Diponegoro.
Akibat berbagai kekalahan perang pada periode tahun 1825 - 1826, Belanda pada tahun 1827 mengangkat Jenderal de Kock menjadi panglima pasukan Belanda di Jawa. Jenderal de Kock mengganti siasat perangnya dengan nama Siasat Benteng atau Benteng Stelsel. Artinya, setiap daerah yang dikuasainya didirikan benteng untuk mengawasi daerah sekitarnya. Antara benteng satu dengan benteng lainnya dihubungkan oleh pasukan gerak cepat.
Disamping menerapkan Benteng Stelsel, Belanda juga mengusahakan penyelesaian secara damai melalui perundingan yang dilakukan pada tanggal 9 dan 23 Agustus 1827. Dalam perundingan tersebut, pihak Pangeran Diponegoro diwakili oleh Kiai Mojo dan Abdulrahman. Perundingan tersebut tidak membawa hasil sehingga perang berkobar lagi.
Dengan Benteng Stelsel, pemimpin pasukan Pangeran Diponegoro banyak yang tertangkap, diantaranya Suryomataram, Ario Prangwadono, Pangeran Serang dan Notoprojo (1827).
Untuk memperlemah pasukan Pangeran Diponegoro, Belanda menggunakan pasukan dari Paku Alam dan Mangkunegara untuk menghadang gerak pasukan Pangeran Diponegoro ke barat dan ke timur, sedangkan Belanda bertahan di Magelang. Belanda juga terus membujuk pengikut Pangeran Diponegoro untuk menghentikan perlawanan dengan janji akan diperlakukan dengan baik dan diakui kedudukannya. Akibatnya, banyak pangeran yang menyerah, misalnya Notodiningrat, Aria Sapak, dan Sosrodilogo.
Pasukan Sentot Prawirodirjo terus melakukan pertempuran di sebelah barat Yogyakarta. Namun Belanda memperalat Prawirodiningrat (Bupati Madiun) yang masih kerabat Sentot untuk membujuknya agar mau menyerah. Akhirnya, Sentot Prawirodirjo yang diikuti Pangeran Ariokusumo (putra Diponegoro) dan Kiai mojo berhasil ditangkap Belanda (1828). Kejadian itu merupakan pukulan berat bagi Pangeran Diponegoro. Namun, Pangeran Diponegoro tidak menyerah dan terus melakukan perlawanan.
Untuk mempercepat selesainya perang Belanda bersedia memberi hadiah 50.000 gulden kepada siapa saja yang dapat menangkap Diponegoro. Namun ternyata tidak ada orang yang berani. Akhirnya, Belanda menawarkan penyelesaian secara damai melalui perundingan. Belanda akan menjamin keamanan, keselamatan, dan kebebasan Pangeran Diponegoro untuk kembali ke medan perang seandainya perundingan gagal.
Pangeran Diponegoro menerima tawaran itu. Pada tanggal 18 Maret 1830 dilangsungkan perundingan di Magelang, tetapi perundingan tidak membawa hasil. Atas perintah rahasia Jenderal de Kock, Pangeran Diponegoro ditangkap. Pangeran Diponegoro dibawa ke Batavia dan akhirnya diasingkan ke Manado pada tanggal 3 Mei 1830. Pada tahun 1834 Pangeran Diponegoro dipindahkan ke Makassar sampai dengan wafatnya pada tanggal 8 Januari 1855 dalam usia 70 tahun.
Kiai Mojo yang juga tertangkap segera diasingkan ke Minahasa hingga wafat pada tanggal 29 Desember 1849. Sementara itu, Sentot Prawirodirjo beserta pasukannya yang tertangkap dikirim Belanda ke Minangkabau untuk memerangi kaum Padri. Namun karena dicurigai bersekutu dengan kaum Padri, Sentot Prawirodirjo dibuang ke Cianjur, kemudian diasingkan ke Bengkulu hingga wafat pada tanggal 17 April 1855.