\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{ethan.rahman} \pdfinfo{ /Title (git-cheat-sheet.pdf) /Creator (Cheatography) /Author (ethan.rahman) /Subject (git-cheat-sheet 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-cheat-sheet Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{ethan.rahman} via \textcolor{DarkBackground}{\uline{cheatography.com/194648/cs/40641/}}} \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}ethan.rahman \\ \uline{cheatography.com/ethan-rahman} \\ \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 6th October, 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*}{2} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Most Frequently Used Commands}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git clone \textless{}url\textgreater{}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Downloads a copy of a remote repository. Remember to use the Kerberos (KB5) URL from Gitlab.} \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git add {[}file name{]}} \tn % Row Count 4 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Add a modified file to the staging area. You can also add an entire directory by using the directory name instead.} \tn % Row Count 7 (+ 3) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git commit -m "{[}commit message{]}"} \tn % Row Count 8 (+ 1) % Row 5 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Commits all staged files to the repository with a commit message. If you accidentally run "git commit" without a message, it will likely open Vim. Press "i' to enter insert mode, write a commit message, hit escape, then type":wq" and hit enter to save the message.} \tn % Row Count 14 (+ 6) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git branch {[}branch name{]}} \tn % Row Count 15 (+ 1) % Row 7 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Create a new branch. {\emph{This will not switch the current branch to the newly created branch}}. Use "git checkout {[}branch name{]}" to switch the current branch.} \tn % Row Count 19 (+ 4) % Row 8 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git checkout {[}branch name{]}} \tn % Row Count 20 (+ 1) % Row 9 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Switch the currently active branch to {[}branch name{]}. Note that "git checkout" does many different things depending on the exact arguments you pass to it. Switching branches is the primary use case.} \tn % Row Count 24 (+ 4) % Row 10 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git push -u {[}remote repo{]} {[}branch name{]}} \tn % Row Count 25 (+ 1) % Row 11 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Upload the current branch to the remote repo. Every time you make a new branch, you should run this command with the "-u" option. This sets up a default so git will understand which branch on the remote repo is supposed to track the current branch in the local repo. After running this the first time, you can simply run "git push" with no other arguments.} \tn % Row Count 33 (+ 8) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Most Frequently Used Commands (cont)}} \tn % Row 12 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git fetch} \tn % Row Count 1 (+ 1) % Row 13 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Download all files from the remote repo. This does not actually change your working directory, it just stores a copy of the remote repository in your .git folder.} \tn % Row Count 5 (+ 4) % Row 14 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git merge} \tn % Row Count 6 (+ 1) % Row 15 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{With no arguments, merge will update your local repository with all the changes that were most recently fetched from the remote repository. This will change your working directory.} \tn % Row Count 10 (+ 4) % Row 16 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git pull} \tn % Row Count 11 (+ 1) % Row 17 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{In theory, this is the same thing as running "git fetch" and then running "git merge". Most of the time, you will be running "git pull", but occasionally you will need to fetch and merge manually.} \tn % Row Count 15 (+ 4) % Row 18 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git merge {[}branch name{]}} \tn % Row Count 16 (+ 1) % Row 19 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Updates the current branch with all the changes commited in {[}branch name{]}.} \tn % Row Count 18 (+ 2) % Row 20 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{git status} \tn % Row Count 19 (+ 1) % Row 21 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Lists the current state of the working directory, staging area, and the repository. I would recommend running this very frequently. You should at least run this before you commit any modifications.} \tn % Row Count 23 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Glossary}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Working directory (A.K.A. "working tree")} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{The directory you are currently working in. This will have all the files you are working with, regardless of their status according to git. This is not a git speciifc concept.} \tn % Row Count 5 (+ 4) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Staging area} \tn % Row Count 6 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{This is where git stores the changes you have added but have not yet commited. You can think of this as a space thats "inbetween" the working directory and the repository} \tn % Row Count 10 (+ 4) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Repository (A.K.A. "repo")} \tn % Row Count 11 (+ 1) % Row 5 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{This is where git stores all of your commits. You can think of this as the hidden ".git" directory. Your local repository is what you will be working with directly. Its the repository on your computer.} \tn % Row Count 16 (+ 5) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Remote repository} \tn % Row Count 17 (+ 1) % Row 7 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{A git repository that tracks the same project but exists in some other location. Typically, the Gitlab repo is the only remote repo you will be pushing to. But everyone else involved in the project will probably have their own repo that could be considered "remote" in some sense. Every remote repo is given a name stored in your local repo. By convention, the original repository you cloned from will be given the name "origin."} \tn % Row Count 26 (+ 9) % Row 8 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Commit} \tn % Row Count 27 (+ 1) % Row 9 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{As a noun: A snapshot or version of your project. A point in .git history. \{\{nl\}\}As a verb: to create a new commit by using the "git commit" command.} \tn % Row Count 30 (+ 3) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Glossary (cont)}} \tn % Row 10 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{head (lowercase)} \tn % Row Count 1 (+ 1) % Row 11 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{The most recent commit of a branch.} \tn % Row Count 2 (+ 1) % Row 12 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{HEAD (uppercase)} \tn % Row Count 3 (+ 1) % Row 13 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{The head of the current branch.} \tn % Row Count 4 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{2.64 cm} x{5.36 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{.gitignore Syntax}} \tn % Row 0 \SetRowColor{LightBackground} Pattern \{\{width=50\}\} & Explanation \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \# text comment & Comments in the .gitignore file that are ignored. Useful for documentation \tn % Row Count 5 (+ 3) % Row 2 \SetRowColor{LightBackground} name.file & A specific file to be ignored. You can specify a path to a subdirectory with "/" \tn % Row Count 9 (+ 4) % Row 3 \SetRowColor{white} \seqsplit{*end\_of\_name}.file & Ignore every file that ends in "end\_of\_name.file" \tn % Row Count 11 (+ 2) % Row 4 \SetRowColor{LightBackground} \seqsplit{start\_of\_name*} & Ignore every file that starts with "start\_of\_name" \tn % Row Count 13 (+ 2) % Row 5 \SetRowColor{white} \seqsplit{directoy\_name/*} & Ignore every file in the "directory\_name" folder \tn % Row Count 15 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}