207 lines
10 KiB
HTML
207 lines
10 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
|
<title>git - the simple guide - no deep shit!</title>
|
|
<link href='http://fonts.googleapis.com/css?family=Chelsea+Market' rel='stylesheet' type='text/css'>
|
|
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/normalize/0/normalize.min.css" type="text/css">
|
|
<link rel="stylesheet" href="css/style.css" type="text/css">
|
|
</head>
|
|
<body>
|
|
<div class="scrollblock block-title">
|
|
<h1>git - the simple guide</h1>
|
|
<p>just a simple guide for getting started with git. no deep shit ;)</p>
|
|
<p class="meta">
|
|
by <a href="https://www.arnaudmorin.fr">Arnaud Morin</a><br />
|
|
Forked from <a href="http://www.twitter.com/rogerdudler">Roger Dudler</a>
|
|
<br />credits to <a href="http://www.twitter.com/tfnico">@tfnico</a>, <a href="http://www.twitter.com/fhd">@fhd</a> and <a href="http://www.namics.com">Namics</a><br />
|
|
</p>
|
|
<img src="img/arrow.png" alt="" />
|
|
</div>
|
|
<a name="intro"></a>
|
|
<div class="scrollblock block-merging">
|
|
<h2>intro</h2>
|
|
<p>
|
|
Git is free open source software (the source code is public) written by Linus Torvalds who also wrote the Linux operating system's kernel.
|
|
</p>
|
|
<p>
|
|
Git is a program for keeping track of changes over time, known in programming as version control. If you've used a track changes feature in a text editing software then you're already familiar with the concept!
|
|
</p>
|
|
</div>
|
|
<a name="setup"></a>
|
|
<div class="scrollblock block-setup">
|
|
<h2>setup</h2>
|
|
<p>
|
|
<a href="http://git-scm.com/book/en/Getting-Started-Installing-Git">Download git for Linux</a>
|
|
</p>
|
|
<p>
|
|
<a href="http://desktop.github.com/">Download git for OSX or Windows</a>
|
|
</p>
|
|
</div>
|
|
<a name="create"></a>
|
|
<div class="scrollblock block-create">
|
|
<h2>create a new repository</h2>
|
|
<p>
|
|
create a new directory, open it and perform a <br />
|
|
<code>git init</code><br />
|
|
to create a new git repository.
|
|
</p>
|
|
</div>
|
|
<a name="checkout"></a>
|
|
<div class="scrollblock block-checkout">
|
|
<h2>checkout a repository</h2>
|
|
<p>
|
|
create a working copy of a local repository by running the command<br />
|
|
<code>git clone /path/to/repository</code><br />
|
|
when using a remote server, your command will be<br />
|
|
<code>git clone username@host:/path/to/repository</code>
|
|
</p>
|
|
</div>
|
|
<a name="trees"></a>
|
|
<div class="scrollblock block-trees">
|
|
<h2>workflow</h2>
|
|
<p>
|
|
your local repository consists of three "trees" maintained by git.
|
|
the first one is your <code>Working Directory</code> which holds the actual files.
|
|
the second one is the <code>Index</code> which acts as a staging area and
|
|
finally the <code>HEAD</code> which points to the last commit you've made.
|
|
</p>
|
|
<img src="img/trees.png" alt="" />
|
|
</div>
|
|
<a name="add"></a>
|
|
<div class="scrollblock block-add">
|
|
<h2>add & commit</h2>
|
|
<p>
|
|
You can propose changes (add it to the <b>Index</b>) using<br />
|
|
<code>git add <filename></code><br />
|
|
<code>git add *</code><br />
|
|
This is the first step in the basic git workflow. To actually commit these changes use<br />
|
|
<code>git commit -m "Commit message"</code><br />
|
|
Now the file is committed to the <b>HEAD</b>, but not in your remote repository yet.
|
|
</p>
|
|
</div>
|
|
<a name="push"></a>
|
|
<div class="scrollblock block-remote">
|
|
<h2>pushing changes</h2>
|
|
<p>
|
|
Your changes are now in the <b>HEAD</b> of your local working copy. To send those changes to your remote repository, execute <br />
|
|
<code>git push origin master</code><br />
|
|
Change <i>master</i> to whatever branch you want to push your changes to.
|
|
<br /><br />
|
|
If you have not cloned an existing repository and want to connect your repository to a remote server, you need to add it with<br />
|
|
<code>git remote add origin <server></code><br />
|
|
Now you are able to push your changes to the selected remote server<br />
|
|
|
|
</p>
|
|
</div>
|
|
<a name="branching"></a>
|
|
<div class="scrollblock block-branching">
|
|
<h2>branching</h2>
|
|
<p>
|
|
Branches are used to develop features isolated from each other. The <i>master</i> branch is the "default" branch when you create a repository. Use other branches for development and merge them back to the master branch upon completion.
|
|
</p>
|
|
<img src="img/branches.png" alt="" />
|
|
<p>
|
|
create a new branch named "feature_x" and switch to it using<br />
|
|
<code>git checkout -b feature_x</code><br />
|
|
switch back to master<br />
|
|
<code>git checkout master</code><br />
|
|
and delete the branch again<br />
|
|
<code>git branch -d feature_x</code><br />
|
|
a branch is <i>not available to others</i> unless you push the branch to your remote repository<br />
|
|
<code>git push origin <branch></code>
|
|
</p>
|
|
</div>
|
|
<a name="update"></a>
|
|
<div class="scrollblock block-merging">
|
|
<h2>update & merge</h2>
|
|
<p>
|
|
to update your local repository to the newest commit, execute <br />
|
|
<code>git pull</code><br />
|
|
in your working directory to <i>fetch</i> and <i>merge</i> remote changes.<br />
|
|
to merge another branch into your active branch (e.g. master), use<br />
|
|
<code>git merge <branch></code><br />
|
|
in both cases git tries to auto-merge changes. Unfortunately, this is not always possible and results in <i>conflicts</i>.
|
|
You are responsible to merge those <i>conflicts</i>
|
|
manually by editing the files shown by git. After changing, you need to mark them as merged with<br />
|
|
<code>git add <filename></code><br />
|
|
before merging changes, you can also preview them by using<br />
|
|
<code>git diff <source_branch> <target_branch></code>
|
|
</p>
|
|
</div>
|
|
<a name="tagging"></a>
|
|
<div class="scrollblock block-tagging">
|
|
<h2>tagging</h2>
|
|
<p>
|
|
it's recommended to create tags for software releases. this is a known concept, which also exists in SVN. You can create a new tag named <i>1.0.0</i> by executing<br />
|
|
<code>git tag 1.0.0 1b2e1d63ff</code><br />
|
|
the <i>1b2e1d63ff</i> stands for the first 10 characters of the commit id you want to reference with your tag. You can get the commit id by looking at the... <br />
|
|
</p>
|
|
</div>
|
|
<a name="log"></a>
|
|
<div class="scrollblock block-log">
|
|
<h2>log</h2>
|
|
<p>
|
|
in its simplest form, you can study repository history using..
|
|
<code>git log</code><br />
|
|
You can add a lot of parameters to make the log look like what you want. To see only the commits of a certain author:<br />
|
|
<code>git log --author=bob</code><br />
|
|
To see a very compressed log where each commit is one line:<br />
|
|
<code>git log --pretty=oneline</code><br />
|
|
Or maybe you want to see an ASCII art tree of all the branches, decorated with the names of tags and branches: <br />
|
|
<code>git log --graph --oneline --decorate --all</code><br />
|
|
See only which files have changed: <br />
|
|
<code>git log --name-status</code><br />
|
|
These are just a few of the possible parameters you can use. For more, see
|
|
<code>git log --help</code><br />
|
|
</p>
|
|
</div>
|
|
<a name="checkout-replace"></a>
|
|
<div class="scrollblock block-checkout-replace">
|
|
<h2>replace local changes</h2>
|
|
<p>
|
|
In case you did something wrong, which for sure never happens ;), you can replace local changes using the command<br />
|
|
<code>git checkout -- <filename></code><br />
|
|
this replaces the changes in your working tree with the last content in HEAD. Changes already added to the index, as well as new files, will be kept.
|
|
</p>
|
|
<p>
|
|
If you instead want to drop all your local changes and commits, fetch the latest history from the server and point your local master branch at it like this<br />
|
|
<code>git fetch origin</code><br />
|
|
<code>git reset --hard origin/master</code>
|
|
</p>
|
|
</div>
|
|
<a name="hints"></a>
|
|
<div class="scrollblock block-hints">
|
|
<h2>useful hints</h2>
|
|
<p>
|
|
use colorful git output<br />
|
|
<code>git config color.ui true</code><br />
|
|
show log on just one line per commit<br />
|
|
<code>git config format.pretty oneline</code><br />
|
|
use interactive adding<br />
|
|
<code>git add -i</code>
|
|
</p>
|
|
</div>
|
|
<a name="resources"></a>
|
|
<div class="scrollblock block-resources">
|
|
<h2>guides</h2>
|
|
<p>
|
|
<ul>
|
|
<li><a href="https://git-scm.com/docs/gittutorial">Introduction to Git</a></li>
|
|
<li><a href="https://git-scm.com/book/en/v2">Pro Git: a free book to learn everything about Git and Github</a></li>
|
|
<li><a href="https://github.com/jlord/git-it-electron#what-to-install">Git-it: an application to help you begin with Git</a></li>
|
|
<li><a href="https://learngitbranching.js.org/">Learning Git branching with a browser interactive tool</a></li>
|
|
</ul>
|
|
</p>
|
|
</div>
|
|
<a name="cheatsheet"></a>
|
|
<div class="scrollblock block-setup">
|
|
<h2>cheat sheet</h2>
|
|
<p>
|
|
<a href="files/github-git-cheat-sheet.pdf">Git cheat sheet</a>
|
|
</p>
|
|
</div>
|
|
</body>
|
|
</html>
|