\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Ghost 21} \pdfinfo{ /Title (git-und-github.pdf) /Creator (Cheatography) /Author (Ghost 21) /Subject (Git und GitHub Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A3A3A3} \definecolor{LightBackground}{HTML}{F3F3F3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Git und GitHub Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Ghost 21} via \textcolor{DarkBackground}{\uline{cheatography.com/151928/cs/38489/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Ghost 21 \\ \uline{cheatography.com/ghost-21} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 10th May, 2023.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Allgemeine Befehle}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{pwd}} & in welchem Ordner man sich befindet \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} {\bf{ls}} & Ordnerinhalt ausgeben \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} {\bf{ls -a}} & um auch versteckte Ordner anzugeben \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} {\bf{cd Ordnername/}} & change directory - Ordner wechseln \tn % Row Count 8 (+ 2) % Row 4 \SetRowColor{LightBackground} {\bf{cd ..}} & geht eine Ebene nach oben (Ordner) \tn % Row Count 10 (+ 2) % Row 5 \SetRowColor{white} {\bf{mkdir Name}} & erstellt einen neuen Ordner \tn % Row Count 12 (+ 2) % Row 6 \SetRowColor{LightBackground} {\bf{touch datei.txt}} & Datei erstellen \tn % Row Count 13 (+ 1) % Row 7 \SetRowColor{white} {\bf{rm datei.txt}} & Datei l{\"o}schen \tn % Row Count 14 (+ 1) % Row 8 \SetRowColor{LightBackground} {\bf{ mv dateiii.txt datei.txt}} & Datei umbenennen dateiii-txt -\textgreater{} datei.txt \tn % Row Count 17 (+ 3) % Row 9 \SetRowColor{white} {\bf{ mv datei.txt ../}}\{\{nl\}\} Auch m{\"o}glich: {\bf{ mv datei.txt ../d.txt}} & verschiebt die Datei in den Desktop \{\{nl\}\} verschoben und umbenannt \tn % Row Count 21 (+ 4) % Row 10 \SetRowColor{LightBackground} {\bf{cp datei.txt d.txt}} & erstellt Kopie der Datei \tn % Row Count 23 (+ 2) % Row 11 \SetRowColor{white} {\bf{clear}} & Konsole leeren \tn % Row Count 24 (+ 1) % Row 12 \SetRowColor{LightBackground} {\bf{cat datei.txt}} & gibt die Datei aus \tn % Row Count 25 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.29402 cm} x{3.68298 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{neues Repository anlegen}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{ git init}} & neues Repository im aktuellen Verzeichnis \{\{nl\}\} im Unterordner .git gespeichert \{\{nl\}\} ist eventuell ein versteckter Ordner \tn % Row Count 5 (+ 5) % Row 1 \SetRowColor{white} {\bf{git status}} & zeigt, welche Dateien ge{\"a}ndert wurden \tn % Row Count 7 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.14011 cm} x{2.83689 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Commit wiederherstellen}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git checkout \textless{}commit hash\textgreater{}}} & stellt Zustand von einem Commit wieder her \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} {\bf{git checkout master}} & springt zurück zum master (stellt den zuletzt gespeicherten Zustand in dem repository wieder her) \tn % Row Count 7 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Wird benutzt, um sich einen {\"a}lteren Zustand anzuschauen (obwohl man wei{\ss}, wie der Code weiter verarbeitet wurde)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.69218 cm} x{3.28482 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Repository-History ausgeben}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git log}} & zeigt Commit-Historie \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} {\bf{git log -p}} & zeigt mehr Details in der Commit-Historie (was hat sich ge{\"a}ndert) \tn % Row Count 4 (+ 3) % Row 2 \SetRowColor{LightBackground} {\bf{git log -{}-oneline}} & gibt nur einen kurzen Kommentar an \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.74195 cm} x{3.23505 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Commit ab{\"a}ndern}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git commit -{}-amend}} & überschreibt letzten Commit \{\{nl\}\} Vorsicht: Am besten nur bei lokalen Änderungen \tn % Row Count 4 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Änderungen anzeigen}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git diff}} & zeigt Änderungen zur staging area (z. working directory \textless{}-\textgreater{} staging area) \tn % Row Count 4 (+ 4) % Row 1 \SetRowColor{white} {\bf{git diff -{}-cached}} & zeigt gestagete Änderungen an (zw. staging area \textless{}-\textgreater{} Reposiory \tn % Row Count 8 (+ 4) % Row 2 \SetRowColor{LightBackground} {\bf{git diff \textless{}hash1\textgreater{} \textless{}hash2\textgreater{}}} & zeigt Änderungen zw. zwei Commits \tn % Row Count 10 (+ 2) % Row 3 \SetRowColor{white} {\bf{git diff \textless{}hash1\textgreater{} \textless{}hash2\textgreater{} -{}-Datei.txt}} \{\{nl\}\} \{\{nl\}\}{\bf{git log -{}-datei.css}} & fügt man " -{}- Datei.txt" dann wird der "diff" Befehl oder andere wie "log" Befehl nur aus dieser Datei gezeigt \{\{nl\}\} mit {\bf{ -{}- datei.* }} werden alle Dateien genommen, die Datei. hei{\ss}en (Beispiel datei.txt, datei.css etc.) \tn % Row Count 22 (+ 12) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{git diff \textless{}hash1\textgreater{} \textless{}hash2\textgreater{} Beispiel: \newline Mit "git log -{}-oneline" kann man die Historie sehen und nimmt sich dann zwei der linken ID's und fügt diese an die Stelle von hash1 und hash2 (Hash1 sollte am besten der Commit sein, der weiter in der Vergangenheit liegt)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Änderungen durchführen}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git add \textless{}file\textgreater{}}} & Datei in staging area übernehmen \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} {\bf{git add \textless{}folder\textgreater{}}} & ganzer Ordner in staging area übernehmen \tn % Row Count 5 (+ 3) % Row 2 \SetRowColor{LightBackground} {\bf{git commit}} \{\{nl\}\} **git commit -m "\textless{}message\textgreater{}" & Commit aus allen get{\"a}tigten Änderungen \{\{nl\}\} Alternativ auch mit kurzer Commit-Nachricht \tn % Row Count 10 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Mit "Commit" wird der Zustand des Projektes abgespeichert (quasi "Version") \newline In Staging Are werden Commits vorbereitet \newline Änderungen werden zun{\"a}chst im working directors gelegt und müssen mit "git add" in die staging are gelegt werden \newline In der staging area sammeln wir alle Änderungen die wir vornehmen m{\"o}chten \newline Mit "git commit" speichern wir diese Änderungen auch in das Repository \newline (Best Practice: nur eine Änderung pro commit (ein Bug, ein neues Feature...)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.28942 cm} x{2.68758 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Änderungen zurücknehmen}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Git Reset}}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} {\bf{git reset}} & nimmt {\bf{alle}} Änderungen aus der staging-area \tn % Row Count 4 (+ 3) % Row 2 \SetRowColor{LightBackground} **git reset \textless{}dateiname\textgreater{} & nimmt diese Änderung aus staging-area \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} \mymulticolumn{2}{x{5.377cm}}{{\bf{Git Reset mit Commit}}} \tn % Row Count 7 (+ 1) % Row 4 \SetRowColor{LightBackground} {\bf{git reset \textless{}commit hash\textgreater{}}} & L{\"o}scht alle Commits nach \textless{}commit hash\textgreater{}. Alle Änderungen bleiben im working directory bestehen \tn % Row Count 12 (+ 5) % Row 5 \SetRowColor{white} {\bf{git reset -{}-hard \textless{}commit hash\textgreater{}}} & L{\"o}scht alle Commits nach \textless{}commit hash\textgreater{}. Änderungen werden verworfen \tn % Row Count 16 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.64701 cm} x{4.32999 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{HEAD}} \tn % Row 0 \SetRowColor{LightBackground} HEAD & ist der gerade ausgecheckte Commit \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} HEAD\textasciitilde{}1 & ist der Parent vom gerade ausgecheckten Commit (sprich eins vorher) \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} HEAD\textasciitilde{}2 & Parent vom Parent vom gerade ausgecheckten Commit \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{genutzt um z.B. \newline statt: {\emph{git diff 239f87 98237dc}} \newline schreib man: {\emph{git diff HEAD\textasciitilde{}2 HEAD}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.24425 cm} x{3.73275 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Änderungen zwischenspeichern}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{Git Stash}} & aktuellen Zustand vom Working directory und der Staging Area zwischenzuspeichern \tn % Row Count 3 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Beispiel-Workflow: Du speicherst den Zustand im Stash, schaust dir einen alten Commit an, wechselst \newline wieder zum aktuellen Stand, und liest den alten Zustand aus dem Stash aus \newline \newline Git Stash ist ein {\emph{Last In First Out}} (Stack) \newline git stash (sichert den aktuellen Stand vom working directory) \newline git stash pop (stellt den letzten Stand vom working directory wieder her) \newline git stash list (zeigt alle Stashes an) \newline git diff stash (zeigt den diff des letzten Stashes an)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.04057 cm} x{2.93643 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Änderungen rückg{\"a}ngig machen}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git revert \textless{}commit hash\textgreater{}}} & Erstellt einen neuen Commit, der die Änderungen von \textless{}commit hash\textgreater{} rückg{\"a}ngig macht \tn % Row Count 4 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Würde man eine Sache l{\"o}schen, auf den die anderen Commits aufbauen, dann würde es zu einem Konflikt führen =\textgreater{} werden gefragt, ob wir sie wirklich l{\"o}schen wollen \newline \newline (mit {\emph{git reset -{}-hard}} k{\"o}nnte man zu dem letzten commit springen und den aktuellen L{\"o}schvorgang beenden)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.29402 cm} x{3.68298 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Datei ignorieren}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{.gitignore}} & Liste an Pfaden, die von git ignoriert werden \tn % Row Count 2 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Änderungen an diesen Dateien haben dann keine Auswirkung auf {\emph{git diff, git add}}, etc. \newline {\emph{.gitignore}} sollte mit commitet werden \newline \newline Bsp: \newline - Datei mit Passw{\"o}rter oder Liste an Pfaden die ignoriert werden sollen. \newline - {\bf{file/{\emph{.text}} würde bedeuten, dass alle .text Dateien in dem Ordner file ignoriert werden sollen \newline \newline }}https://github.com/github/gitignore* ist eine Sammlung von m{\"o}glichen .gitignore Dateien. (Aufpassen die Datei in.gitignore umbenennen)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Datei l{\"o}schen und umbenennen}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git rm \textless{}datei\textgreater{}}} & l{\"o}scht die Datei aus working directory und staging area \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} {\bf{git mv \textless{}alter Dateiname\textgreater{} \textless{}neuer Dateiname\textgreater{}}} & bewegt die Datei \tn % Row Count 6 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{um Datei richtig zu l{\"o}schen (working directory und staging area) -\textgreater{} {\emph{git rm datei.txt}} \newline \newline Datei umbenennen: \newline - {\emph{mv index.html index2.html}} würde dazu führen, dass die Datei nur kopiert wird und damit die ganze Historie von index.html ebenfalls verschwindet \newline - richtig: *git mv index.html index2.html} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.43873 cm} x{2.53827 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Git blame}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git blame \textless{}filename\textgreater{}}} & zeigt Zeile für Zeile an, in welchem Commit diese zuletzt ge{\"a}ndert wurde \tn % Row Count 4 (+ 4) % Row 1 \SetRowColor{white} {\bf{git blame -{}-color-lines \textless{}filename\textgreater{}}} & gleiche Commits farblich hervorheben \tn % Row Count 6 (+ 2) % Row 2 \SetRowColor{LightBackground} {\bf{git log -p -{}- \textless{}Dateiname\textgreater{}}} & ist eine Alternative die alles im log Stil zeigt \tn % Row Count 9 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\emph{git blame}} zeigt, wer welche Zeile geschrieben hat \newline {\emph{-{}-color-lines}} führt dazu, dass gezeigt wird, welche Zeilen in einem commit hinzugefügt/ge{\"a}ndert wurden} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{{\bf{Branches}}}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Git Branches}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git branch}} & zeigt alle vorhandenen Branches an \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} {\bf{git branch \textless{}branch name\textgreater{}}} & legt einen neuen Branch an \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} {\bf{git checkout \textless{}branch name\textgreater{}}} & wechselt zu einem Branch \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} Shortcut: {\bf{git checkout -b \textless{}branch name\textgreater{}}} & legt einen neuen Branch an, und wechselt direkt dorthin \tn % Row Count 9 (+ 3) % Row 4 \SetRowColor{LightBackground} {\bf{git log -{}-online -{}-graph -{}-branches}} & gibt auch die Branches aus \tn % Row Count 11 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{"Branches" meint eine Verzweigung. Einer arbeitet an feature1 der andere an feature2, oder es wird in einer neuen branch ein Bug gefixt \newline Wenn dann ein feature fertig ist, wird es an der master-branch gelegt \newline \newline Der * bei git branch zeigt an, in welchem branch man sich gerade befindet \newline Genauso {\bf{git log -{}-online -{}-graph -{}-branches}} zeigt HEAD -\textgreater{} auf welchem Zweig man sich im Moment befindet} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.74195 cm} x{3.23505 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Branches mergen (Fast-Forward-Merge)}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git merge \textless{}branch\textgreater{}}} & Versucht den Branch branch mit dem aktuellen Branch zusammenzuführen \tn % Row Count 3 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{fast-forward Merge: \newline 1) {\emph{git checkout master}}, da wir von master aus das neue feature holen \newline 2) {\emph{git merge feature}}, damit holen wir uns das feature \newline 3) {\emph{git log -{}-oneline -{}-branches}}, müsste jetzt (HEAD -\textgreater{} master, feature) ausgeben \newline 3) git branch -d feature, das feature am besten nach dem Merge l{\"o}schen \newline 4) {\emph{git log -{}-online -{}-branches}}, müsste jetzt (HEAD -\textgreater{} master) ausgeben (feature wurde hinzugefügt, jedoch sieht es aus, als h{\"a}tte es ihn nie gegeben)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Branches mergen (Three-Way-Merge)}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Befehle sind die selben wie bei Fast-Forward-Merge} \tn % Row Count 1 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Wenn kein Fast-Forward-Merge m{\"o}glich ist, da in Master ebenfalls Änderungen statt fanden \newline \newline Three-Way-Merge \newline 1) {\emph{git log -{}-oneline -{}-branches -{}-graph}}, Linien zeigen, was letzter gemeinsame Commit war \& wie sich Pfad aufgeteilt hat \newline 2) {\emph{git checkout master}}, um in master zu wechseln \newline 3) {\emph{git merge \textless{}feature\textgreater{}}}, git erkennt, dass Three-Way-Merge gemacht werden muss und merged automatisch (Best Practice: Die Zeile "Merge branch 'feature' " so lassen, Zusatzkommentar ist m{\"o}glich} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Merge-Konflikte beheben}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{selben Befehle wie bei den Merge \newline 1) Meldung, dass man den Konflikt manuell prüfen soll \newline 2) wird gezeigt, welche Zeilen von welchem Commit kam \newline 3) Code anpassen, Vorsicht!: Die Zeilen \textgreater{}\textgreater{}\textgreater{} HEAD, ... müssen gel{\"o}scht werden} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.94103 cm} x{3.03597 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Branch aktuell halten}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git rebase \textless{}branch\textgreater{}}} & baut Commit-Historie basierend auf anderen Branch auf \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} {\bf{git rebase -i \textless{}branch\textgreater{}}} & erlaubt es, dabei: \{\{nl\}\} • Commits anzupassen (edit) \{\{nl\}\} • Commit-Messages zu editieren (fixup) \{\{nl\}\} • mehrere Commits zusammenzufassen (squash) \tn % Row Count 10 (+ 7) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Die features werden nicht an dem {\"a}lteren Branch, sondern an dem aktuellsten Branch gesetzt} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.84149 cm} x{3.13551 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Merge-Strategien}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git merge -{}-no-ff}} & Verhindert, dass git einen fast-forward-Merge durchführt. Es wird also immer ein Merge-Commit erstellt. \tn % Row Count 5 (+ 5) % Row 1 \SetRowColor{white} {\bf{git merge -{}-ff-only}} & Erzwingt einen fast-forward Merge \tn % Row Count 7 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{NUR FAST-FORWARD-MERGE \newline • Repository ist „in einem Strang" \newline • Dadurch einfach zu sehen, wie Änderungen aufeinander aufbauen \newline \newline NUR THREE-WAY-MERGE \newline • Jedes Feature in eigenen Branch entwickelt \newline • einfach zu sehen, wie welches Feature entwickelt wurde} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.9908 cm} x{2.9862 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Git tag}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git tag -a v\textless{}x.y\textgreater{}}} & neuen Tag für Version x.y erstellen \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} {\bf{git tag}} & alle bestehenden Tags anzeigen \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} **git tag v\textless{}x.y\textgreater{} \textless{}commit\textgreater{} & altem Commit eine Versionsnummer geben \tn % Row Count 6 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Mit {\emph{git tag}} kann man einen Release einer neuen Version markieren \newline \newline bei {\emph{git log}} sieht man dann den {\emph{tag}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{{\bf{GitHub}}}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Remote-Repository clonen}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git clone \textless{}url\textgreater{}}} & erstelltlokale Kopie des master-Branches eines Repositories \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} {\bf{git remote -v}} \{\{nl\}\} Ausführlicher: {\bf{git remote -vv}} & zeigt, welche remote Repositories getrackt \tn % Row Count 6 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{clone: \newline 1) git clone https://... \newline master ist dann unser lokales Repository \newline origin/master ist unser remote Repository} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Remote-Workflow: fetch \& pull}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{git fetch}} & l{\"a}dt Commits und Branches von remote Repository herunter \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} {\bf{git log origin/\textless{}branch\textgreater{}}} \{\{nl\}\} {\bf{git merge origin/\textless{}branch\textgreater{}}} & l{\"a}dt Commits und Branches von remote Repository herunter \tn % Row Count 7 (+ 4) % Row 2 \SetRowColor{LightBackground} {\bf{git pull}} & Shortcut beider Befehle (man muss in master sein) \tn % Row Count 10 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{zeigt, ob im Repository Änderungen vorgenommen wurden \newline - {\emph{git fetch}} \newline oder: \newline - {\emph{git log -{}- oneline -{}-graph -{}-branches}} zeigt den aktuellen Stand des lok Repository \newline {\emph{git log -{}- oneline -{}-graph -{}-branches origin/master}} zeigt den akt Stand des remote Repositories an \newline \newline um es zu mergen: {\emph{git merge origin/master}}, Shortcut: {\emph{git pull}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Einstieg in Github - Code auf GitHub laden}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{1) Repository erstellen \newline 2) {\emph{git remote add origin https:// link zum repository}} \newline 3) *git push -u origin master} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Änderungen zu GitHub übertragen}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{1) {\emph{git status}} =\textgreater{} Ausgabe sollte sein: \newline Auf Branch master \newline Ihr Branch ist auf demselben Stand wie 'origin/master' \newline 2) Bearbeite die Datei \newline 3) {\emph{git add datei.txt}} \newline 4) {\emph{git commit}} \newline 5) {\emph{git push}} (wenn jemand aber den origin/master {\"a}ndert, dann kommt es zu Konflikten -\textgreater{} Pull-Requests)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Änderungen übernehmen (Pull-Requests)}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{1) {\emph{git status}} wenn nicht auf akt Stand: {\emph{git checkout master}} \& {\emph{git pull}} \newline 2) {\emph{git branch more-content}} \& {\emph{git checkout more-content}} (erstellt neue Branch und wechselt rein) \newline 3) Datei bearbeiten \& {\emph{git add datei.txt}} \& {\emph{git commit}} \newline 4) {\emph{git checkout master}} \& {\emph{git pull}} \newline 5) {\emph{git checkout more-content}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{...}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{6) {\emph{git rebase master}} \newline 7) {\emph{git push}} -\textgreater{} Fehler, wenn more-content keinen Upstream-Branch =\textgreater{} {\emph{git push -{}-set-upstream origin more-content}} =\textgreater{} Jetzt Änderungen in {\bf{neuen}} Branch \newline 8) oben rechts auf {\emph{Compare \& pull request}} -\textgreater{} Änderungen von more-content in master gemerged \newline 9) {\emph{git checkout master}} \& {\emph{git pull}}(Aktuelle auch Lokal)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{GitHub Workflow: Readme \& Markdown-Dateiformat}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{README.md \newline \# Überschrift 1.Ordnung \newline \#\# Überschrift 2.Ordnung (bis 6) \newline \newline man kann die W{\"o}rter dick, kursiv, etc. formatieren \newline \newline Listen erstellen: mit Spiegelstrichen, oder nummeriert \newline \newline {[}link{]} (https:// wo führt der Link hin)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{GitHub Workflow: Issues \& Pull-Requests}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Genutzt, um zu schreiben, was ge{\"a}ndert werden soll oder welcher Bug gefixt werden sollen \newline \newline Assignes und Labels k{\"o}nnen angepasst werden \newline \newline wie l{\"o}se ich issues: \newline {\emph{git branch bg-fix}}, {\emph{git checkout bg-fix}}, Datei {\"a}ndern, {\emph{git add datei.txt}}, {\emph{git commit (mit "Fixes \#Nummer" angeben, welches Issues gefixt}}, {\emph{git push}} / {\emph{... -{}-set-upstream...}}, Link kopieren um den Pull Befehl zu machen \newline \newline W{\"o}rter wie Fixes, Resloves, etc k{\"o}nnen benutzt werden} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{GitHub Workflow: Collaborator hinzufügen}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Wie füge ich jemanden zum Repository hinzu: \newline Settings - Manage access - Invite a collaborator \newline \newline Um auf Master nicht mehr direkt commiten zu dürfen: \newline Settings - Branches - (Branch protection rules) Add rule - Branch name pattern: "master" - Require pull request reviews before merging ...} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Fork \& Pull-Requests; Fork Rebasen}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Git Bisect}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Verwendung: \newline {\emph{git bisect start}} \newline {\emph{git bisect bad {[}commit-id{]}}} \newline {\emph{git bisect good {[}commit-id{]}}} \newline {\emph{git bisect reset}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.4885 cm} x{2.4885 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{H{\"a}ufigsten Befehle}} \tn % Row 0 \SetRowColor{LightBackground} 1) `git clone https://`\{\{nl\}\} 1) `git pull` & klont das git Repository in den lokalen Ordner \{\{nl\}\} falls git clone schon ausgeführt \tn % Row Count 5 (+ 5) % Row 1 \SetRowColor{white} 2) `git status` & zeigt ob ge{\"a}ndert \tn % Row Count 6 (+ 1) % Row 2 \SetRowColor{LightBackground} 3) `git add Dateinamen.txt` \{\{nl\}\} 3) `git add .` & ge{\"a}nderte Datei zur Staging Area \{\{nl\}\} alle ge{\"a}nderten Datei zur Staging Area \tn % Row Count 10 (+ 4) % Row 3 \SetRowColor{white} 4) `git status` & nochmal überprüfen \tn % Row Count 11 (+ 1) % Row 4 \SetRowColor{LightBackground} 5 `git branch branchname` & erstellt Branch mit dem Namen "Branchname" \tn % Row Count 14 (+ 3) % Row 5 \SetRowColor{white} 6) `git checkout branchname` & Wechsel zur Branch \tn % Row Count 16 (+ 2) % Row 6 \SetRowColor{LightBackground} 7) `git commit -m "Nachricht"` & commitet die ge{\"a}nderten Dateien \tn % Row Count 18 (+ 2) % Row 7 \SetRowColor{white} 8) `git push` \{\{nl\}\} eventuell: `git push origin branchname` & pusht ins Repository \tn % Row Count 21 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}