\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{Michele Sacchetti (mikesac)} \pdfinfo{ /Title (base-git.pdf) /Creator (Cheatography) /Author (Michele Sacchetti (mikesac)) /Subject (Base Git 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}{379434} \definecolor{LightBackground}{HTML}{F2F8F2} \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{Base Git Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Michele Sacchetti (mikesac)} via \textcolor{DarkBackground}{\uline{cheatography.com/34000/cs/10643/}}} \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}Michele Sacchetti (mikesac) \\ \uline{cheatography.com/mikesac} \\ \uline{\seqsplit{aroundthecode}.org} \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 26th January, 2017.\\ Updated 10th April, 2017.\\ 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{tabularx}{17.67cm}{x{8.8077 cm} x{8.4623 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Global Configuration}} \tn % Row 0 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git config -{}-global user.name "John Doe"}}\{\{nobreak\}\} & Globally configure your committer name \tn % Row Count 4 (+ 4) % Row 1 \SetRowColor{white} \{\{nobreak\}\}{\bf{git config -{}-global user.email johndoe@example.com}}\{\{nobreak\}\} & Globally configure your committer email \tn % Row Count 8 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{17.67cm}}{Execute these step {\bf{before}} any other action with your git client} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Initialize new repository}} \tn % Row 0 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git init}}\{\{nobreak\}\} & Initialize current directory as a new git repostiroy \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} \{\{nobreak\}\}{\bf{git remote add origin \seqsplit{https://repourl/repo}.git}}\{\{nobreak\}\} & Add remote repository with name 'origin' \tn % Row Count 7 (+ 4) % Row 2 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git add -{}-all}}\{\{nobreak\}\} & Promote all folder content for commit \tn % Row Count 9 (+ 2) % Row 3 \SetRowColor{white} \{\{nobreak\}\}{\bf{git commit -am"initial commit"}}\{\{nobreak\}\} & Commit all files with given comment \tn % Row Count 12 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Clone existing remote repostiroy}} \tn % Row 0 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git clone https://giturl/repo.git}}\{\{nobreak\}\} & Clone remote repository via HTTPS, access credential could be reqeuired \tn % Row Count 4 (+ 4) % Row 1 \SetRowColor{white} \{\{nobreak\}\}{\bf{git clone ssh://giturl/repo.git}}\{\{nobreak\}\} & Clone remote repository via SSH, private/public key exchange is required \tn % Row Count 8 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Inspect your work}} \tn % Row 0 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git status}}\{\{nobreak\}\} & Provide you with the difference in commits and push between your local repo and the remote origin \tn % Row Count 5 (+ 5) % Row 1 \SetRowColor{white} \{\{nobreak\}\}{\bf{git log}}\{\{nobreak\}\} & List latest commit on the local repository \tn % Row Count 8 (+ 3) % Row 2 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git diff \$\{FILENAME\}}}\{\{nobreak\}\} & Provide a diff view between the local file and the HEAD version on the remote origin \tn % Row Count 13 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Save you work}} \tn % Row 0 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git pull origin develop}}\{\{nobreak\}\} & Retrieve all commit from remote repository named "origin" and branch "develop" and merge them into local repository \tn % Row Count 6 (+ 6) % Row 1 \SetRowColor{white} \{\{nobreak\}\}{\bf{git add -{}-all}}\{\{nobreak\}\} & Promote ALL unstaged files for commit - {\bf{use with care!}} \tn % Row Count 9 (+ 3) % Row 2 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git add \$\{FILENAME\}}}\{\{nobreak\}\} & Promote given file/folder for commit \tn % Row Count 12 (+ 3) % Row 3 \SetRowColor{white} \{\{nobreak\}\}{\bf{git commit -m"my details on commit"}}\{\{nobreak\}\} & Commit all promoted file to {\bf{local}} repository \tn % Row Count 16 (+ 4) % Row 4 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git push origin develop}}\{\{nobreak\}\} & Push all commit to remote repository named "origin" and branch "develop". Branch will be created if not present. May fail if remote repository has not been pulled before pushing since local repository is not up-to-date \tn % Row Count 27 (+ 11) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Branching}} \tn % Row 0 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git branch -a}}\{\{nobreak\}\} & List all avaiable branches \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \{\{nobreak\}\}{\bf{git fetch}}\{\{nobreak\}\} & Fetch all remote repository data into local one, including new branches \tn % Row Count 6 (+ 4) % Row 2 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git fetch -p}}\{\{nobreak\}\} & Fetch all remote repository data into local one, including new branches. {\bf{-p}} (prune) causes unexisting remote branches to be dropped also locally \tn % Row Count 14 (+ 8) % Row 3 \SetRowColor{white} \{\{nobreak\}\}{\bf{git checkout -b newbranch}}\{\{nobreak\}\} & create a new branch named "newbranch" starting from current commit \tn % Row Count 18 (+ 4) % Row 4 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git merge otherbranch}}\{\{nobreak\}\} & Merge {\bf{local}} branch named "otherbranch" to be merged into current local branch \tn % Row Count 23 (+ 5) % Row 5 \SetRowColor{white} \{\{nobreak\}\}{\bf{git push origin newbranch}}\{\{nobreak\}\} & Push all commit in {\bf{local}} branch newbranch to remote origin, creating {\bf{remote}} branch if not already present \tn % Row Count 29 (+ 6) % Row 6 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git branch -D oldbranch}}\{\{nobreak\}\} & Delete {\bf{local}} branch named "oldbranch". Any tag pushed from deleted branch will be preserved. \tn % Row Count 34 (+ 5) \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Branching (cont)}} \tn % Row 7 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git push origin -{}-delete oldbranch}}\{\{nobreak\}\} & Delete {\bf{remote}} branch named "oldbranch". Any tag pushed from deleted branch will be preserved. \tn % Row Count 5 (+ 5) % Row 8 \SetRowColor{white} \{\{nobreak\}\}{\bf{git merge -{}-squash featurebranch}}\{\{nobreak\}\} & Merge branch named "featurebranch" into current one, squasshing all commit into a single one. Commit with comment is needed to complete operation. \tn % Row Count 13 (+ 8) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Tagging}} \tn % Row 0 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git tag -l}}\{\{nobreak\}\} & List all avaiable tags \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \{\{nobreak\}\}{\bf{git fetch -{}-tags}}\{\{nobreak\}\} & Fetch all remote repository data into local one, including tags \tn % Row Count 6 (+ 4) % Row 2 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git fetch -{}-tags -p}}\{\{nobreak\}\} & Fetch all remote repository data into local one, including new tags. {\bf{-p}} (prune) causes unexisting remote tags to be dropped also locally \tn % Row Count 13 (+ 7) % Row 3 \SetRowColor{white} \{\{nobreak\}\}{\bf{git tag mytag}}\{\{nobreak\}\} & Creates a new tag named "mytag" and attach it to current {\bf{local}} commit \tn % Row Count 17 (+ 4) % Row 4 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git push origin -{}-tags}}\{\{nobreak\}\} & Push {\bf{local}} tags to remote origin \tn % Row Count 20 (+ 3) % Row 5 \SetRowColor{white} \{\{nobreak\}\}{\bf{git tag -d oldtag}}\{\{nobreak\}\} & Delete {\bf{local}} tag named "oldtag". \tn % Row Count 23 (+ 3) % Row 6 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git push origin :refs/tags/oldtag}}\{\{nobreak\}\} & Delete {\bf{remote}} tag named "oldtag". \tn % Row Count 26 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Cleaning up your repository}} \tn % Row 0 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git reset -{}-soft origin master}}\{\{nobreak\}\} & Reset local repository commit to remote origin on branch master. All changes will be preserved as uncommitted files \tn % Row Count 6 (+ 6) % Row 1 \SetRowColor{white} \{\{nobreak\}\}{\bf{git reset -{}-hard origin master}}\{\{nobreak\}\} & Reset local repository commit to remote origin on branch master. All changes will be discarted - {\bf{use with care!}} \tn % Row Count 12 (+ 6) % Row 2 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git clean -{}-dry-run}}\{\{nobreak\}\} & Remove untracked files - show only candidates no actual removal (alias {\bf{-n}} ) \tn % Row Count 16 (+ 4) % Row 3 \SetRowColor{white} \{\{nobreak\}\}{\bf{git clean -f}}\{\{nobreak\}\} & Remove untracked files - Actual remove {\bf{use with care!}} \tn % Row Count 19 (+ 3) % Row 4 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git clean -f -d}}\{\{nobreak\}\} & Remove untracked files and folders - Actual remove {\bf{use with care!}} \tn % Row Count 23 (+ 4) % Row 5 \SetRowColor{white} \{\{nobreak\}\}{\bf{git clean -f -X}}\{\{nobreak\}\} & Remove ignored files - Actual remove {\bf{use with care!}} \tn % Row Count 26 (+ 3) % Row 6 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git clean -f -x}}\{\{nobreak\}\} & Remove ignored and non-ignored files - Actual remove {\bf{use with care!}} \tn % Row Count 30 (+ 4) \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{x{8.635 cm} x{8.635 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Cleaning up your repository (cont)}} \tn % Row 7 \SetRowColor{LightBackground} \{\{nobreak\}\}{\bf{git log -{}- \$\{FILENAME\}}}\{\{nobreak\}\} & Show history for \$\{FILENAME\} even if deleted, useful to know when a file has been removed \tn % Row Count 5 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \end{document}