PageSourceSearch

https://dangitgit.com/de

html dangitgit.com collected 2026-10-02 05:19:09 UTC 26,527 bytes, 529 lines download raw bytes

1<!DOCTYPE HTML>
2<html lang="de">
3<head>
4    <meta charset="utf-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1" />
6	<title>Mist, Git!?!</title>
7	<meta name="lolz" content="My git site brings all the mansplainers to the yard." />
8    <!-- hi this is coming from netlify & 11ty-->
9	<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,700;1,700&family=Open+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
10
11<style>
12    body{font-family:"Open Sans",sans-serif;color:#222;background-color:#fff;line-height:1.4;margin:0;min-height:100%;position:relative}.prevent-safari-overflow-scroll{height:100%;width:100%;overflow-x:hidden;position:relative}h1,h2,h3,h4,h5,h6{font-family:Montserrat,sans-serif;font-weight:700}h1{line-height:1.2;font-size:3em}h2{font-size:1.75em}p{margin:1em 0}.notice,footer{padding:1em;background:#222;color:#fff;text-align:center}.notice a,footer a{color:#fff}.langpicker{float:right;margin-top:.5em;margin-bottom:2em;overflow:hidden}.langpicker *{box-sizing:border-box}.langpicker-button{border:2px solid #222;background:0 0;font-size:1em;display:flex;align-items:center;cursor:pointer;height:2.5em;position:relative;padding:.5em;border-right:none;text-align:left;-webkit-appearance:none;position:relative;left:2px;text-align:left;font-family:"Open Sans",sans-serif}.langpicker-icon{height:2em;width:1.5em;transition:.2s transform}.langpicker-button:active .langpicker-icon,.langpicker-button:focus .langpicker-icon,.langpicker-button:hover .langpicker-icon{transform:rotate(135deg)}.langpicker-text{display:inline-block;white-space:nowrap;padding-left:.5em;min-width:10em}.langpicker-list{list-style-type:none;margin:0;padding:0 0 2em .5em;transform:translateX(100%);transition:.2s ease-out;top:0;right:0;background-color:#222;color:#fff;border:2px solid #222;border-top:none;position:absolute;min-height:100%;width:10em;z-index:1000}.langpicker-button.open+.langpicker-list{transform:translateX(0)}.langpicker-list li{padding:.5em}.langpicker-list a{display:inline-block;color:#fff}.max-width{margin:1em;clear:both}@media screen and (min-width:680px){.max-width{margin:0 100px 0 170px;max-width:680px}}@media screen and (min-width:1020px){.max-width{margin:0 auto}}.centered{text-align:center}.spaced{margin:2em 0}.no-bottom-margin{margin-bottom:0}.top-lined{padding-top:2em;border-top:1px solid #000}.bottom-lined{padding-bottom:2em;border-bottom:1px solid #000}.intro{display:flex;flex-direction:column}.ads{order:1}@media screen and (min-width:680px){.ads{order:inherit}}.permalinked{color:#222;text-decoration:none}.permalinked:focus,.permalinked:hover{text-decoration:underline}.no-wrap{white-space:nowrap}.twitter-icon{height:13px;vertical-align:middle;margin-left:.25em}.github-icon{height:16px;vertical-align:middle;margin-right:.25em}footer{display:flex;flex-direction:column}@media screen and (min-width:800px){footer{flex-direction:row;justify-content:space-between}.copyright{order:0}.contact,.twitter{order:1;margin-left:1em}}#carbonads{position:absolute;display:block;overflow:hidden;margin-left:-160px;max-width:130px;text-align:right;font-size:14px;line-height:1.5}#carbonads a{color:inherit;text-decoration:none}#carbonads a:hover{color:inherit}#carbonads span{display:block;overflow:hidden}.carbon-img{display:block;margin:0 auto 8px;line-height:1}.carbon-text{display:block;margin-bottom:8px}.carbon-poweredby{display:block;text-transform:uppercase;letter-spacing:1px;font-size:10px;line-height:1}@media only screen and (min-width:320px) and (max-width:679px){#carbonads{position:relative;float:none;margin:0 auto;padding:10px;max-width:330px;border:solid 1px #8f8f8f;text-align:left}#carbonads span{position:relative}#carbonads>span{max-width:none}.carbon-img{float:left;margin:0 1em 0 0}.carbon-text{float:left;margin-bottom:0;max-width:calc(100% - 130px - 1em)}.carbon-poweredby{position:absolute;bottom:0;left:144px;display:block}}.rtl{direction:rtl}
13</style>
14<link href="/prism.css" rel="stylesheet" />
15	<link href="favicon-32x32.png" rel="icon" sizes="32x32" type="image/png" />
16	<link href="favicon-16x16.png" rel="icon" sizes="16x16" type="image/png" />
17</head>
18<body>
19    <div class="prevent-safari-overflow-scroll">
20        
21
22        
23<nav class="langpicker" aria-label="In anderen Sprachen anzeigen" id="picker">
24    <button class="langpicker-button" id="picker-btn">
25        <svg xmlns="http://www.w3.org/2000/svg" class="langpicker-icon" stroke="#222" fill="none" viewBox="0 0 420 420">
26          <path stroke-width="26" d="M209 15a195 195 0 102 0z"/>
27          <path stroke-width="18" d="M210 15v390m195-195H15M59 90a260 260 0 00302 0m0 240a260 260 0 00-302 0M195 20a250 250 0 000 382m30 0a250 250 0 000-382"/>
28        </svg>
29
30        <span class="langpicker-text" id="picker-text">In anderen Sprachen anzeigen</span>
31    </button>
32
33    <ul class="langpicker-list" id="picker-list">
34    
35        
36            <li><a href="/af">afrikaans (af)</a></li>
37        
38    
39        
40            <li><a href="/bn">বাংলা (bn)</a></li>
41        
42    
43        
44            <li><a href="/cs">česky (cs)</a></li>
45        
46    
47        
48    
49        
50            <li><a href="/en">english (en)</a></li>
51        
52    
53        
54            <li><a href="/es">español (es)</a></li>
55        
56    
57        
58            <li><a href="/fa">persian (fa)</a></li>
59        
60    
61        
62            <li><a href="/fi">suomi (fi)</a></li>
63        
64    
65        
66            <li><a href="/fr">français (fr)</a></li>
67        
68    
69        
70            <li><a href="/gr">ελληνικά (gr)</a></li>
71        
72    
73        
74            <li><a href="/he">עברית (he)</a></li>
75        
76    
77        
78            <li><a href="/hi">हिन्दी (hi)</a></li>
79        
80    
81        
82            <li><a href="/id">bahasa indonesia (id)</a></li>
83        
84    
85        
86            <li><a href="/it">italiano (it)</a></li>
87        
88    
89        
90            <li><a href="/ja">日本語 (ja)</a></li>
91        
92    
93        
94            <li><a href="/kk">kazakh (kk)</a></li>
95        
96    
97        
98            <li><a href="/ko">한국어 (ko)</a></li>
99        
100    
101        
102            <li><a href="/ne">नेपाली (ne)</a></li>
103        
104    
105        
106            <li><a href="/nl">nederlands (nl)</a></li>
107        
108    
109        
110            <li><a href="/pl">polski (pl)</a></li>
111        
112    
113        
114            <li><a href="/pt_BR">português brasileiro (pt_BR)</a></li>
115        
116    
117        
118            <li><a href="/ro">romana (ro)</a></li>
119        
120    
121        
122            <li><a href="/ru">русский (ru)</a></li>
123        
124    
125        
126            <li><a href="/sr">serbia (sr)</a></li>
127        
128    
129        
130            <li><a href="/sv">swedish (sv)</a></li>
131        
132    
133        
134            <li><a href="/th">ภาษาไทย (th)</a></li>
135        
136    
137        
138            <li><a href="/tr">Türkçe (tr)</a></li>
139        
140    
141        
142            <li><a href="/ua">українська (ua)</a></li>
143        
144    
145        
146            <li><a href="/zh">中文 (zh)</a></li>
147        
148    
149    </ul>
150</nav>
151
152
153        <div class="max-width">
154            <header class="spaced">
155                <h1 class="centered">Mist, Git!?!</h1>
156            </header>
157
158            <main>
159                <section class="intro">
160                    <aside class="ads">
161
162
163
164<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CEBIK2JJ&placement=dangitgitcom" id="_carbonads_js"></script>
164
165
166</aside>
167                    
168                    <p>Git ist schwer: Fehler zu machen ist leicht, und herauszufinden wie man sie wieder behebt ist am Anfang fast unmöglich. Auch die Dokumentation hilft oft nicht weiter, <em>weil man erst die passenden Begriffe kennen muss</em>, mit denen man sein Problem lösen kann.</p>
169
170<p>Deswegen folgen hier einige Situationen, in denen ich mich schon befunden habe, und wie ich da wieder rausgekommen bin – <em>alles in simpler Sprache</em>.</p>
171
172                </section>
173
174                
175                
176                    <section class="spaced">
177                        <h2><a class="permalinked" href="#magische-zeitmaschine" id="magische-zeitmaschine">Ich habe etwas komplett verkackt! Bitte sag mir, dass git eine magische Zeitmaschine eingebaut hat!?!</a></h2>
178                        <pre><code class="language-git">git reflog
179# Du siehst eine Liste mit allem, was du in
180# git getan hast, in allen Branches.
181# Jeder Eintrag hat einen Index: HEAD@{index}
182# Finde den Eintrag VOR demjenigen, der alles
183# kaputt gemacht hat
184git reset HEAD@{index}
185# Alles ist jetzt wieder wie es vorher war
186</code></pre>
187<p>Damit kannst du Dateien zurückholen, die du gelöscht hast, oder Dinge rückgängig machen, die dein Repo zerstört haben, oder einen nicht geglückten Merge oder einfach zu einem Stand zurückkehren, als bestimmte Funktionen noch funktioniert haben. Ich nutze <code>reflog</code> sehr häufig. Vielen Dank an die vielen, vielen, vielen Leute, die vorgeschlagen haben, es hier aufzunehmen.</p>
188
189                    </section>
190                
191                    <section class="spaced">
192                        <h2><a class="permalinked" href="#letzten-commit-aendern" id="letzten-commit-aendern">Ich habe schon commited und dann gemerkt dass ich eine kleine Änderung vergessen habe!</a></h2>
193                        <pre><code class="language-git"># Mach deine Änderung
194git add . # oder füge einzelne Dateien hinzu
195git commit --amend --no-edit
196# Jetzt enthält dein letzter Commit auch die neuen Änderungen!
197# WARNUNG: Niemals solltest du &quot;--amend&quot; bei einem 
198# Commit verwenden, der schon gepusht wurde (es sei denn
199# du bist der einzige Entwickler in dem Repo)
200</code></pre>
201<p>Normalerweise passiert mir das, wenn ich commite und dann erst Tests oder Linter laufen lasse. Dann fallen irgendwelche kleinen Formatierungsfehler auf, zum Beispiel ein vergessenes Leerzeichen. Man könnte die Änderung auch als neuen Commit erstellen und dann mit <nobr><code>rebase -i</code></nobr> beide Commits zusammenführen, aber das hier ist tausend mal schneller.</p>
202<p><em>Warnung: Du solltest niemals das &quot;--amend&quot;-Flag verwenden, wenn dein Commit schon gepusht wurde. Verwende das nur bei lokalen Commits, ansonsten wird es kompliziert.</em></p>
203
204                    </section>
205                
206                    <section class="spaced">
207                        <h2><a class="permalinked" href="#aendere-letzte-commit-message" id="aendere-letzte-commit-message">Ich muss die letzte Commit-Message ändern!</a></h2>
208                        <pre><code class="language-git">git commit --amend
209# Anschließend öffnet sich dein normaler Editor und
210# du kannst eine neue Commit-Message eingeben
211</code></pre>
212<p>Immer diese nervigen Anforderungen für den Aufbau von Commit-Messages.</p>
213
214                    </section>
215                
216                    <section class="spaced">
217                        <h2><a class="permalinked" href="#aus-versehen-commit-master" id="aus-versehen-commit-master">Ich habe aus Versehen etwas auf master commited, das eigentlich auf einen eigenen Branch gehört</a></h2>
218                        <pre><code class="language-git"># Erstelle einen neuen Branch mit dem Stand des master
219git branch neuer-branch-name
220# Entferne den letzten Commit vom master
221# und wechsel zum neuen Branch
222git reset HEAD~ --hard
223git checkout neuer-branch-name
224# Dein Commit lebt jetzt in dem neuen Branch weiter :)
225</code></pre>
226<p>Hinweis: Das funktioniert nicht, wenn du den Commit schon auf einen öffentlichen Branch gepusht hast. Wenn du vorher schon mehr Dinge probiert hast, musst du vielleicht <code>git reset HEAD@{anzahl-der-commits}</code> statt <code>HEAD~</code> verwenden. Vielen Dank an die vielen vielen Leute, die vorgeschlagen haben, wie man dieses Problem am schnellsten lösen kann – ich kannte diese Lösung bisher noch nicht.</p>
227
228                    </section>
229                
230                    <section class="spaced">
231                        <h2><a class="permalinked" href="#falscher-branch-commit" id="falscher-branch-commit">Ich habe auf dem falschen Branch commited!</a></h2>
232                        <pre><code class="language-git"># Mach den letzten Commit rückgängig, aber erhalte die Änderungen
233git reset HEAD~ --soft
234git stash
235# Navigiere zum richtigen Branch
236git checkout name-des-richtigen-branch
237git stash pop
238git add . # oder füge einzelne Dateien hinzu
239git commit -m &quot;Deine Nachricht hier&quot;
240# Jetzt sind die Änderungen auf dem richtigen Branch
241</code></pre>
242<p>Viele haben vorgeschlagen <code>cherry-pick</code> hierfür zu verwenden. Das ist auch absolut okay, also wähle die Variante, die dir besser gefällt!</p>
243<pre><code class="language-git">git checkout name-des-richtigen-branch
244# Wähle den letzten Commit vom master
245git cherry-pick master
246# Und lösche den Commit vom master
247git checkout master
248git reset HEAD~ --hard
249</code></pre>
250
251                    </section>
252                
253                    <section class="spaced">
254                        <h2><a class="permalinked" href="#wo-ist-mein-diff" id="wo-ist-mein-diff">Ich wollte einen Diff anzeigen lassen, aber er ist leer?!</a></h2>
255                        <p>Wenn du dir sicher bist, dass du Dateien geändert hast, aber <code>diff</code> trotzdem nichts anzeigt, dann hast du die Dateien wahrcheinlich schon ge-<code>add</code>-et und musst deswegen ein spezielles Flag verwenden.</p>
256<pre><code class="language-git">git diff --staged
257</code></pre>
258<p>Das gehört zur Kategorie ¯\_(ツ)_/¯ (Ja, ich weiß dass das Verhalten ein Feature ist, aber für Einsteiger ist das super verwirrend!)</p>
259
260                    </section>
261                
262                    <section class="spaced">
263                        <h2><a class="permalinked" href="#commit-rueckgaengig-machen" id="commit-rueckgaengig-machen">Ich muss einen Commit rückgängig machen, der schon 5 Commits zurückliegt!</a></h2>
264                        <pre><code class="language-git"># Finde den betreffenden Commit
265git log
266# Verwende die Pfeiltasten um in der History zu scrollen
267# und kopiere dir den Hash des betreffenden Commits
268git revert [betreffender hash]
269# git erstellt einen neuen Commit, der den gewählten
270# Commit rückgängig macht. Du musst dafür noch eine
271# Commit-Message eingeben oder einfach abspeichern
272</code></pre>
273<p>Man muss also doch nicht alten Code auswählen und in die aktuellen Dateien einfügen, um Änderungen rückgängig zu machen. Wenn du einen Bug commited hast, kannst du also den ganzen commit mit <code>revert</code> wieder zurücknehmen.</p>
274<p>Du kannst auch nur die Änderungen in einer einzigen Datei rückgängig machen, anstatt eines ganzen Commits. Aber in typischer Git-Manier sind das natürlich komplett andere Befehle. Wäre ja sonst auch zu einfach!</p>
275
276                    </section>
277                
278                    <section class="spaced">
279                        <h2><a class="permalinked" href="#aenderungen-datei-rueckgaengig" id="aenderungen-datei-rueckgaengig">Ich muss Änderungen an einer einzigen Datei rückgängig machen!</a></h2>
280                        <pre><code class="language-git"># Finde den Hash eines Commits vor deinen Änderungen
281git log
282# Verwende die Pfeiltasten um in der History zu scrollen
283# und kopiere dir den entsprechenden Hash
284git checkout [gewählter hash] -- pfad/zur/datei
285# Die alte Version ist jetzt wiederhergestellt
286git commit -m &quot;Wow, rückgängig machen ohne Copy &amp; Paste&quot;
287</code></pre>
288<p>Als ich das herausgefunden habe, war das für mich ein riesiges Ding! Ernsthaft, auf welchem verdammten Planeten macht es Sinn, den Befehl zum rückgängig machen von Änderungen in einer Datei <code>checkout --</code> zu nennen :shakes-fist-at-linus-torvalds:</p>
289
290                    </section>
291                
292                    <section class="spaced">
293                        <h2><a class="permalinked" href="#scheiss-unordnung" id="scheiss-unordnung">Extreme Unordnung, ich gebe auf!</a></h2>
294                        <pre><code class="language-git">cd ..
295sudo rm -r scheiss-git-repo
296git clone https://some.github.url/scheiss-git-repo.git
297cd scheiss-git-repo
298</code></pre>
299<p>Danke an Eric V. für diesen Tipp. Alle Beschwerden über die Verwendung von <code>sudo</code> bitte an ihn schicken.</p>
300<p>Aber mal ernsthaft: wenn dein Branch soo verhunzt ist, dass du den Stand deines Repos auf den Stand auf dem Git-Server zurücksetzen musst, dann solltest du das hier ausprobieren. Aber aufpassen, denn diese Kommandos lassen sich nicht rückgängig machen!</p>
301<pre><code class="language-git"># Hole den neusten Stand vom Server
302git fetch origin
303git checkout master
304git reset --hard origin/master
305# Lösche alle Dateien und Ordner, die noch nicht eingecheckt wurden
306git clean -d --force
307# Wiederhole checkout/reset/clean für jeden verhunzten Branch
308</code></pre>
309
310                    </section>
311                
312
313                <section class="spaced">
314                    
315                    <p>
316    *Disclaimer: Diese Seite soll keine umfangreiche Dokumentation sein. Ja, es gibt andere Wege um dieselben Dinge zu erreichen, vielleicht auch elegantere. Aber ich habe diese Schritte durch Trial and Error und nach vielem Fluchen und Ausrasten zusammengetragen, und hatte eben die verrückte Idee, sie auch in der entsprechenden Ausdrucksweise zu teilen. Take it or leave it!
317</p>
318                </section>
319
320                <section class="spaced top-lined">
321                    
322                    <p>Vielen Dank an alle, die sich freiwillig gemeldet haben, um die Website in neue Sprachen zu übersetzen. Ihr seid die Besten!
323
324    
325        <a href="https://github.com/michaeljabotha">
326          Michael Botha
327          </a> (<a href="/af">af</a>) &middot; 
328    
329        <a href="https://github.com/sheralam">
330          Khaja Md Sher E Alam
331          </a> (<a href="/bn">bn</a>) &middot; 
332    
333        <a href="https://github.com/edee111">
334          Eduard Tomek
335          </a> (<a href="/cs">cs</a>) &middot; 
336    
337        <a href="https://github.com/pReya">
338          Moritz Stückler
339          </a> (<a href="/de">de</a>) &middot; 
340    
341        <a href="https://github.com/francofantini">
342          Franco Fantini
343          </a> (<a href="/es">es</a>) &middot; 
344    
345        <a href="https://github.com/hamidmoheb1">
346          Hamid Moheb
347          </a> (<a href="/fa">fa</a>) &middot; 
348    
349        <a href="https://github.com/sjarva">
350          Senja Jarva
351          </a> (<a href="/fi">fi</a>) &middot; 
352    
353        <a href="https://github.com/michelc">
354          Michel
355          </a> (<a href="/fr">fr</a>) &middot; 
356    
357        <a href="https://github.com/Tzal3x">
358          Alex Tzimas
359          </a> (<a href="/gr">gr</a>) &middot; 
360    
361        <a href="https://github.com/eladleev">
362          Elad Leev
363          </a> (<a href="/he">
363he</a>) &middot; 
364    
365        <a href="https://github.com/aryansarkar13">
366          Aryan Sarkar
367          </a> (<a href="/hi">hi</a>) &middot; 
368    
369        <a href="https://github.com/quellcrist-falconer">
370          Ricky Gultom
371          </a> (<a href="/id">id</a>) &middot; 
372    
373        <a href="https://github.com/fedemcmac">
374          fedemcmac
375          </a> (<a href="/it">it</a>) &middot; 
376    
377        <a href="https://github.com/meih">
378          Meiko Hori
379          </a> (<a href="/ja">ja</a>) &middot; 
380    
381        <a href="https://github.com/zshanabek">
382          Zhunisali Shanabek
383          </a> (<a href="/kk">kk</a>) &middot; 
384    
385        <a href="https://github.com/ryanking13">
386          Gyeongjae Choi
387          </a> (<a href="/ko">ko</a>) &middot; 
388    
389        <a href="https://github.com/rahuldahal">
390          Rahul Dahal
391          </a> (<a href="/ne">ne</a>) &middot; 
392    
393        <a href="https://github.com/MartijntenHeuvel">
394          Martijn ten Heuvel
395          </a> (<a href="/nl">nl</a>) &middot; 
396    
397        <a href="https://github.com/lwojcik">
398          Łukasz Wójcik
399          </a> (<a href="/pl">pl</a>) &middot; 
400    
401        <a href="https://github.com/davialexandre">
402          Davi Alexandre
403          </a> (<a href="/pt_BR">pt_BR</a>) &middot; 
404    
405        <a href="https://github.com/catalinafox">
406          Catalina Focsa
407          </a> (<a href="/ro">ro</a>) &middot; 
408    
409        <a href="https://github.com/dadyarri">
410          Daniil Golubev
411          </a> (<a href="/ru">ru</a>) &middot; 
412    
413        <a href="https://github.com/GoodbyePlanet">
414          Nemanja Vasić
415          </a> (<a href="/sr">sr</a>) &middot; 
416    
417        <a href="https://github.com/cybear">
418          Björn Söderqvist
419          </a> (<a href="/sv">sv</a>) &middot; 
420    
421        <a href="https://github.com/kitt-tientanopajai">
422          Kitt Tientanopajai
423          </a> (<a href="/th">th</a>) &middot; 
424    
425        <a href="https://github.com/tpaksu">
426          Taha Paksu
427          </a> (<a href="/tr">tr</a>) &middot; 
428    
429        <a href="https://github.com/LastGenius-edu">
430          Andriy Sultanov
431          </a> (<a href="/ua">ua</a>) &middot; 
432    
433        <a href="https://github.com/taojy123">
434          Tao Jiayuan
435          </a> (<a href="/zh">zh</a>)
436    
437. Mit zusätzlicher Hilfe von 
438    
439        <a href="https://github.com/alliejones">Allie Jones</a> &middot; 
440    
441        <a href="https://github.com/vorot93">Artem Vorotnikov</a> &middot; 
442    
443        <a href="https://github.com/davidfyffe">David Fyffe</a> &middot; 
444    
445        <a href="https://github.com/DirtyF">Frank Taillandier</a> &middot; 
446    
447        <a href="https://github.com/imurray">Iain Murray</a> &middot; 
448    
449        <a href="https://github.com/LucasLarson">Lucas Larson</a> &middot; 
450    
451        <a href="https://github.com/mvrzvbvk">Myrzabek Azil</a>
452    
453</p>
454
455<p>Wenn Sie beim Hinzufügen einer Übersetzung in Ihre Sprache helfen möchten, senden Sie einen PR auf <a href="https://github.com/ksylor/ohshitgit" class="no-wrap"><svg class="github-icon" xmlns="http://www.w3.org/2000/svg" fill="#222222" viewBox="0 0 1024 1024"><path fill-rule="evenodd" clip-rule="evenodd" d="M512 0C229.12 0 0 229.12 0 512c0 226.56 146.56 417.92 350.08 485.76 25.6 4.48 35.2-10.88 35.2-24.32 0-12.16-.64-52.48-.64-95.36-128.64 23.68-161.92-31.36-172.16-60.16-5.76-14.72-30.72-60.16-52.48-72.32-17.92-9.6-43.52-33.28-.64-33.92 40.32-.64 69.12 37.12 78.72 52.48 46.08 77.44 119.68 55.68 149.12 42.24 4.48-33.28 17.92-55.68 32.64-68.48-113.92-12.8-232.96-56.96-232.96-252.8 0-55.68 19.84-101.76 52.48-137.6-5.12-12.8-23.04-65.28 5.12-135.68 0 0 42.88-13.44 140.8 52.48 40.96-11.52 84.48-17.28 128-17.28 43.52 0 87.04 5.76 128 17.28 97.92-66.56 140.8-52.48 140.8-52.48 28.16 70.4 10.24 122.88 5.12 135.68 32.64 35.84 52.48 81.28 52.48 137.6 0 196.48-119.68 240-233.6 252.8 18.56 16 34.56 46.72 34.56 94.72 0 68.48-.64 123.52-.64 140.8 0 13.44 9.6 29.44 35.2 24.32C877.44 929.92 1024 737.92 1024 512 1024 229.12 794.88 0 512 0z" fill="#1B1F23"/></svg>GitHub</a></p>
456
457                </section>
458            </main>
459        </div>
460        
461        <footer>
462    <small class="contact">Was war dein "Mist, git"-Moment? Lass es mich wissen!</small>
463    <small class="twitter"><a href="https://twitter.com/ksylor" class="no-wrap">
463<svg class="twitter-icon" viewBox="0 0 235 191" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M73.7 191c88.7 0 137.2-73.5 137.2-137.2 0-2.1 0-4.2-.1-6.2 9.4-6.8 17.6-15.3 24.1-25-8.6 3.8-17.9 6.4-27.7 7.6 10-6 17.6-15.4 21.2-26.7-9.3 5.5-19.6 9.5-30.6 11.7C189 5.8 176.5 0 162.6 0c-26.6 0-48.2 21.6-48.2 48.2 0 3.8.4 7.5 1.3 11-40.1-2-75.6-21.2-99.4-50.4-4.1 7.1-6.5 15.4-6.5 24.2 0 16.7 8.5 31.5 21.5 40.1-7.9-.2-15.3-2.4-21.8-6v.6c0 23.4 16.6 42.8 38.7 47.3-4 1.1-8.3 1.7-12.7 1.7-3.1 0-6.1-.3-9.1-.9 6.1 19.2 23.9 33.1 45 33.5-16.5 12.9-37.3 20.6-59.9 20.6-3.9 0-7.7-.2-11.5-.7C21.1 183 46.5 191 73.7 191" fill="#fff" fill-rule="nonzero"/></svg>@ksylor</a></small>
464    <small class="copyright">&copy; 2016-2025 Katie Sylor-Miller</small>
465</footer>
466
467
468    </div>
469
470    
470<script src="/prism.js" async></script>
470
471    
471<script async>
472        function setupLangPicker() {
473            // passive event listener polyfill
474            // Test via a getter in the options object to see if the passive property is accessed
475            var supportsPassive = false;
476            try {
477              var opts = Object.defineProperty({}, 'passive', {
478                get: function() {
479                  supportsPassive = true;
480                }
481              });
482              window.addEventListener("testPassive", null, opts);
483              window.removeEventListener("testPassive", null, opts);
484            } catch (e) {}
485
486            var picker = document.getElementById('picker');
487            var pickerText = document.getElementById('picker-text');
488            var pickerList = document.getElementById('picker-list');
489            var pickerBtn = document.getElementById('picker-btn');
490            var isOpen = false;
491
492            function toggle() {
493                if (!isOpen) {
494                    pickerList.style.width = pickerText.scrollWidth + 'px';
495                }
496                pickerBtn.classList.toggle('open');
497                isOpen = !isOpen;
498            }
499            // handle button clicks
500            pickerBtn.addEventListener('click', toggle);
501
502            // close open picker via outside clicks
503            document.addEventListener('click', function(evt) {
504                if (isOpen && !evt.target.closest('#picker')) {
505                    toggle();
506                }
507            }, supportsPassive ? { passive: true } : false);
508
509            // if user tabs into list, open it
510            pickerList.addEventListener('focusin', function(evt) {
511                if (!isOpen) {
512                    toggle();
513                }
514            });
515            pickerList.addEventListener('focusout', function(evt) {
516                if (isOpen) {
517                    toggle();
518                }
519            });
520        }
521        setupLangPicker();
522    </script>
522
523    <div style="display:none">
524	<!-- temporarily ading hidden links for social verification without having to update all the footer definitions everywhere -->
525	<a rel="me" href="https://front-end.social/@ksylor">Mastodon</a>
526        <a rel="me" href="https://bsky.app/profile/ksylor.bsky.social">BlueSky</a>
527    </div>
528</body>
529</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.