ADVERTISEMENT

Protesters rally against German party leader who pushed migration proposal backed by far-right

Published Feb 2, 2025 11:20 pm

BERLIN (AP) — Tens of thousands took to the streets across Germany on the weekend to protest against the center-right leader and front-runner in a Feb. 25 election for sending to parliament proposals for tough new migration rules that received the backing of a far-right party.

AP25033553945077.jpg

People holding signs stand in front of the Reichstag in Berlin during a demonstration on Sunday, Feb. 2, 2025. (Sebastian Christoph Gollnow/dpa via AP)

 

 

Angry protesters in Hamburg, Munich, Cologne and Leipzig said that Friedrich Merz and his Christian Democrats broke Germany's unwritten post-Nazi promise by all democratic parties to never pass any rule or resolution in parliament with the support of far-right, nationalist parties such as the Alternative for Germany, or AfD.

Merz on Wednesday proposed a nonbinding motion in parliament calling for Germany to turn back many more migrants at its borders. The measure squeaked through thanks to AfD's support.

Merz was determined to show commitment of his center-right Union bloc, which also includes the Bavaria-only CSU party, to cutting irregular migration after a deadly knife attack last month by a rejected asylum-seeker.

However, on Friday, the German parliament narrowly rejected a bill calling for tougher rules on migration that risked becoming the first draft legislation to pass thanks to a far-right party. Nonetheless, it has become a focus of a controversy about the attitude toward the far right of the front-runner in the upcoming election.

Merz has been accused by protesters and politicians on the left of breaking a taboo and endangering mainstream parties’ “firewall” against AfD. He insists his position is unchanged and that he didn’t and won’t work with the party.

Hundreds of protesters temporarily blocked offices of the Christian Democrats in different cities, and on Sunday afternoon up to 20,000 came together for a big rally in Berlin.

In Cologne, people protested on 350 boats on the Rhine, German news agency dpa reported. The boats lined up in front of the city's skyline with its famous cathedral with protesters holding up banners with slogans such as “No racism” and “For democracy and diversity."

Polls show the center-right Union, which put forward the migration proposal and bill, leading with around 30% support, while AfD is second with about 20%, and the Social Democrats and Greens further down.

Merz appears to hope that he will gain support by making the Union look decisive in forcing a tougher approach to migration, while blunting the appeal of the anti-immigration AfD and making the governing parties — which say they already have done much to tackle the issue — look out of touch with Germans’ concerns.

The 12-year-old AfD first entered the national parliament in 2017, benefiting from then-Chancellor Angela Merkel’s decision two years earlier to allow large numbers of migrants into the country.

A year ago, hundreds of thousands also protested in weeks-long rallies all over Germany against the rise of the far-right and purported plans to deport millions of immigrants, including some holding German passports.

Related Tags

WORLDNEWS
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.