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 "--amend" 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 "--amend"-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 "Deine Nachricht hier" 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 "Wow, rückgängig machen ohne Copy & Paste" 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>) · 328 329 <a href="https://github.com/sheralam"> 330 Khaja Md Sher E Alam 331 </a> (<a href="/bn">bn</a>) · 332 333 <a href="https://github.com/edee111"> 334 Eduard Tomek 335 </a> (<a href="/cs">cs</a>) · 336 337 <a href="https://github.com/pReya"> 338 Moritz Stückler 339 </a> (<a href="/de">de</a>) · 340 341 <a href="https://github.com/francofantini"> 342 Franco Fantini 343 </a> (<a href="/es">es</a>) · 344 345 <a href="https://github.com/hamidmoheb1"> 346 Hamid Moheb 347 </a> (<a href="/fa">fa</a>) · 348 349 <a href="https://github.com/sjarva"> 350 Senja Jarva 351 </a> (<a href="/fi">fi</a>) · 352 353 <a href="https://github.com/michelc"> 354 Michel 355 </a> (<a href="/fr">fr</a>) · 356 357 <a href="https://github.com/Tzal3x"> 358 Alex Tzimas 359 </a> (<a href="/gr">gr</a>) · 360 361 <a href="https://github.com/eladleev"> 362 Elad Leev 363 </a> (<a href="/he">
363he</a>) · 364 365 <a href="https://github.com/aryansarkar13"> 366 Aryan Sarkar 367 </a> (<a href="/hi">hi</a>) · 368 369 <a href="https://github.com/quellcrist-falconer"> 370 Ricky Gultom 371 </a> (<a href="/id">id</a>) · 372 373 <a href="https://github.com/fedemcmac"> 374 fedemcmac 375 </a> (<a href="/it">it</a>) · 376 377 <a href="https://github.com/meih"> 378 Meiko Hori 379 </a> (<a href="/ja">ja</a>) · 380 381 <a href="https://github.com/zshanabek"> 382 Zhunisali Shanabek 383 </a> (<a href="/kk">kk</a>) · 384 385 <a href="https://github.com/ryanking13"> 386 Gyeongjae Choi 387 </a> (<a href="/ko">ko</a>) · 388 389 <a href="https://github.com/rahuldahal"> 390 Rahul Dahal 391 </a> (<a href="/ne">ne</a>) · 392 393 <a href="https://github.com/MartijntenHeuvel"> 394 Martijn ten Heuvel 395 </a> (<a href="/nl">nl</a>) · 396 397 <a href="https://github.com/lwojcik"> 398 Åukasz Wójcik 399 </a> (<a href="/pl">pl</a>) · 400 401 <a href="https://github.com/davialexandre"> 402 Davi Alexandre 403 </a> (<a href="/pt_BR">pt_BR</a>) · 404 405 <a href="https://github.com/catalinafox"> 406 Catalina Focsa 407 </a> (<a href="/ro">ro</a>) · 408 409 <a href="https://github.com/dadyarri"> 410 Daniil Golubev 411 </a> (<a href="/ru">ru</a>) · 412 413 <a href="https://github.com/GoodbyePlanet"> 414 Nemanja VasiÄ 415 </a> (<a href="/sr">sr</a>) · 416 417 <a href="https://github.com/cybear"> 418 Björn Söderqvist 419 </a> (<a href="/sv">sv</a>) · 420 421 <a href="https://github.com/kitt-tientanopajai"> 422 Kitt Tientanopajai 423 </a> (<a href="/th">th</a>) · 424 425 <a href="https://github.com/tpaksu"> 426 Taha Paksu 427 </a> (<a href="/tr">tr</a>) · 428 429 <a href="https://github.com/LastGenius-edu"> 430 Andriy Sultanov 431 </a> (<a href="/ua">ua</a>) · 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> · 440 441 <a href="https://github.com/vorot93">Artem Vorotnikov</a> · 442 443 <a href="https://github.com/davidfyffe">David Fyffe</a> · 444 445 <a href="https://github.com/DirtyF">Frank Taillandier</a> · 446 447 <a href="https://github.com/imurray">Iain Murray</a> · 448 449 <a href="https://github.com/LucasLarson">Lucas Larson</a> · 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">© 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.