<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Can Cellek</title>
    <description>The latest articles on DEV Community by Can Cellek (@excalith).</description>
    <link>https://dev.to/excalith</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F241756%2F2a1a6381-6376-4f3c-9996-fc51f4a6b4e8.png</url>
      <title>DEV Community: Can Cellek</title>
      <link>https://dev.to/excalith</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/excalith"/>
    <language>en</language>
    <item>
      <title>Dev Cheats - Interactive Cheatsheets For Developers</title>
      <dc:creator>Can Cellek</dc:creator>
      <pubDate>Sun, 19 Feb 2023 18:23:41 +0000</pubDate>
      <link>https://dev.to/excalith/dev-cheats-5b3o</link>
      <guid>https://dev.to/excalith/dev-cheats-5b3o</guid>
      <description>&lt;p&gt;Greetings, fellow developers!&lt;/p&gt;

&lt;p&gt;I just started working on a community-driven project called Dev Cheats. It is aimed at providing developers of all skill levels with a convenient reference for various command line tools and their usage examples.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fni0suk4obmjcl6akocgo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fni0suk4obmjcl6akocgo.gif" alt="Dev Cheats GIF Preview" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Currently only a few cheats are on the database, but if you think you can provide any documentation I would love to receive pull requests!&lt;/p&gt;

&lt;p&gt;Please feel free to check out the demo at &lt;a href="https://dev-cheats.vercel.app/" rel="noopener noreferrer"&gt;dev-cheats.vercel.app&lt;/a&gt; where you can search for &lt;code&gt;git&lt;/code&gt; and see the current implementation for Git commands and usage examples. Additionally, the API directs to the documentation page, making it easy to bookmark pages through an URL like &lt;a href="https://dev-cheats.vercel.app/git" rel="noopener noreferrer"&gt;dev-cheats.vercel.app/git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can find the repository at &lt;a href="https://github.com/excalith/dev-cheats" rel="noopener noreferrer"&gt;github.com/excalith/dev-cheats&lt;/a&gt; and have a look at &lt;a href="https://github.com/excalith/dev-cheats/blob/main/.github/CONTRIBUTING.md" rel="noopener noreferrer"&gt;contributing guideline&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Terminal Inspired, Clean and Customizable Browser Start Page</title>
      <dc:creator>Can Cellek</dc:creator>
      <pubDate>Tue, 14 Feb 2023 08:32:54 +0000</pubDate>
      <link>https://dev.to/excalith/start-page-4nkj</link>
      <guid>https://dev.to/excalith/start-page-4nkj</guid>
      <description>&lt;p&gt;For a long time I wanted to create my own start page looking like my terminal, so &lt;a href="https://excalith-start-page.vercel.app"&gt;here it is&lt;/a&gt;! It includes my common bookmarks where I can search through them with my terminal-inspired prompt. &lt;/p&gt;

&lt;p&gt;There are multiple ways to customize it, so be sure to check out the &lt;a href="https://github.com/excalith/excalith-start-page"&gt;repository&lt;/a&gt; and &lt;a href="https://github.com/excalith/excalith-start-page/wiki"&gt;wiki page&lt;/a&gt; page for customization options.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q3ANo3Ig--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/acjdftoayhn69lfmo65r.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q3ANo3Ig--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/acjdftoayhn69lfmo65r.gif" alt="Start Page animated gif showing some features" width="839" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You can check the working version from &lt;a href="https://excalith-start-page.vercel.app"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;You can pull the Docker image from &lt;a href="https://hub.docker.com/r/excalith/start-page"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Quickly filter links by typing in the prompt. Hitting &lt;code&gt;Enter&lt;/code&gt; will open all filtered links at once&lt;/li&gt;
&lt;li&gt;If nothing filtered, the text in prompt will use the default search engine for searching your input&lt;/li&gt;
&lt;li&gt;Launch websites directly from the prompt. Just type the URL (ie. &lt;code&gt;github.com&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Search websites with custom commands. For example, type &lt;code&gt;s some weird bug&lt;/code&gt; to search StackOverflow for &lt;code&gt;some weird bug&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Multiple ways to customize the start page to your liking&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Built-In Commands
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Show usage with &lt;code&gt;help&lt;/code&gt; command (shows basic usage and your configured search shortcuts)&lt;/li&gt;
&lt;li&gt;Show info with &lt;code&gt;fetch&lt;/code&gt; command (time, date, system and browser data)&lt;/li&gt;
&lt;li&gt;Update your configuration with &lt;code&gt;config&lt;/code&gt; command

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;config import &amp;lt;url&amp;gt;&lt;/code&gt; - Import configuration from a URL to your local storage&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;config edit&lt;/code&gt; - Edit local configuration within editor&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;config reset&lt;/code&gt; - Reset your configuration to default&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Bindings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Clear the prompt quickly with &lt;code&gt;CTRL + C&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Close window with &lt;code&gt;ESC&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Customization
&lt;/h2&gt;

&lt;p&gt;There are multiple ways of customizing the start page to making it yours!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;config edit&lt;/code&gt; to edit your configuration within the start page code editor&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;config import &amp;lt;url&amp;gt;&lt;/code&gt; to import configuration from a URL&lt;/li&gt;
&lt;li&gt;Change the default configuration in &lt;code&gt;startpage.config.js&lt;/code&gt; file and deploy your own version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please refer to &lt;a href="https://github.com/excalith/excalith-start-page/wiki"&gt;wiki page&lt;/a&gt; for more information.&lt;/p&gt;

</description>
      <category>startpage</category>
      <category>react</category>
      <category>browser</category>
      <category>docker</category>
    </item>
    <item>
      <title>My .dotfiles for MacOS and Ubuntu</title>
      <dc:creator>Can Cellek</dc:creator>
      <pubDate>Tue, 14 Feb 2023 08:14:00 +0000</pubDate>
      <link>https://dev.to/excalith/my-dotfiles-322</link>
      <guid>https://dev.to/excalith/my-dotfiles-322</guid>
      <description>&lt;p&gt;I finally revamped my .dotfiles! It includes my MacOS and Ubuntu configurations. I am planning to add Alpine configuration for my iPad, and Arch configuration for my geeky needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IIsEiwqS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6t7v22l9c8cm71ftc842.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IIsEiwqS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6t7v22l9c8cm71ftc842.png" alt="Screenshot of my terminal" width="880" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fully customizable installation depending on OS&lt;/li&gt;
&lt;li&gt;The installer script is seperated from configs and install scripts&lt;/li&gt;
&lt;li&gt;A dotfiles manager for post-install maintenance&lt;/li&gt;
&lt;li&gt;Has post-install scripts for configuring &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;ssh&lt;/code&gt; and &lt;code&gt;gpg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Requires git commands for syncing without fancy dotfile managers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Uses
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Supports &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;zsh&lt;/code&gt; and &lt;code&gt;fish&lt;/code&gt; with &lt;code&gt;starship&lt;/code&gt; shell prompt and has &lt;code&gt;tmux&lt;/code&gt; support&lt;/li&gt;
&lt;li&gt;Replaces default terminal with &lt;code&gt;Alacritty&lt;/code&gt; and &lt;code&gt;kitty&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Does not use any WM (on MacOS, only &lt;code&gt;yabai&lt;/code&gt; and &lt;code&gt;skhd&lt;/code&gt; used on top of the default DE)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;You can find my dotfiles here:&lt;br&gt;
&lt;a href="https://github.com/excalith/.dotfiles/"&gt;https://github.com/excalith/.dotfiles/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The dotfiles setup scripts are heavily &lt;del&gt;knocked-off&lt;/del&gt; inspired version of beautiful &lt;a href="https://github.com/alrra/dotfiles"&gt;Cătălin’s dotfiles&lt;/a&gt;. You should probably check it out!&lt;/p&gt;

</description>
      <category>dotfiles</category>
      <category>macos</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Git Cheat Sheet</title>
      <dc:creator>Can Cellek</dc:creator>
      <pubDate>Mon, 06 Feb 2023 18:09:51 +0000</pubDate>
      <link>https://dev.to/excalith/git-cheat-sheet-2d90</link>
      <guid>https://dev.to/excalith/git-cheat-sheet-2d90</guid>
      <description>&lt;p&gt;Hello there!&lt;br&gt;
Here I would like to share my most commonly used git commands and a few aliases to keep your console simple and beautiful by formatting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; &lt;br&gt;
I have started a new project for common cli tool cheatsheets. You can find git cheatsheets there!&lt;br&gt;
App: &lt;a href="https://dev-cheats.vercel.app" rel="noopener noreferrer"&gt;https://dev-cheats.vercel.app&lt;/a&gt;&lt;br&gt;
Article: &lt;a href="https://dev.to/excalith/dev-cheats-5b3o"&gt;https://dev.to/excalith/dev-cheats-5b3o&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a new local repository&lt;/span&gt;
git init

&lt;span class="c"&gt;# Clone an existing repository&lt;/span&gt;
git clone ssh://user@domain.com/repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Check Changes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check all changes&lt;/span&gt;
git fetch

&lt;span class="c"&gt;# Check status&lt;/span&gt;
git status

&lt;span class="c"&gt;# Changes to tracked files&lt;/span&gt;
git diff

&lt;span class="c"&gt;# Log&lt;/span&gt;
git log &lt;span class="nt"&gt;--oneline&lt;/span&gt;

&lt;span class="c"&gt;# Diff&lt;/span&gt;
git log &lt;span class="nt"&gt;--stat&lt;/span&gt;

&lt;span class="c"&gt;# Shortlog&lt;/span&gt;
git shortlog

&lt;span class="c"&gt;# Graphs&lt;/span&gt;
git log &lt;span class="nt"&gt;--graph&lt;/span&gt; &lt;span class="nt"&gt;--oneline&lt;/span&gt; &lt;span class="nt"&gt;--decorate&lt;/span&gt;

&lt;span class="c"&gt;# Show Log By Author&lt;/span&gt;
git log &lt;span class="nt"&gt;--author&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"John"&lt;/span&gt;
git log &lt;span class="nt"&gt;--author&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"John&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;Mary"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Stash
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add To Stash&lt;/span&gt;
git stash

&lt;span class="c"&gt;# Show Stash List&lt;/span&gt;
git stash show

&lt;span class="c"&gt;# Pop Stash&lt;/span&gt;
git stash pop

&lt;span class="c"&gt;# Apply Spesific Stash&lt;/span&gt;
git stash apply stash@&lt;span class="o"&gt;{&lt;/span&gt;index&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Drop Spesific Stash&lt;/span&gt;
git stash drop stash@&lt;span class="o"&gt;{&lt;/span&gt;index&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Stage &amp;amp; Commit
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add all changes to next commit&lt;/span&gt;
git add &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Add file changes to next commit&lt;/span&gt;
git add

&lt;span class="c"&gt;# Commit staged changes&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Commit Message"&lt;/span&gt;

&lt;span class="c"&gt;# Change the last commit&lt;/span&gt;
git commit &lt;span class="nt"&gt;--ammend&lt;/span&gt;

&lt;span class="c"&gt;# Change the last commit name&lt;/span&gt;
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"New commit message"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Branches &amp;amp; Tags
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List all existing branches&lt;/span&gt;
git branch &lt;span class="nt"&gt;-av&lt;/span&gt;

&lt;span class="c"&gt;# Switch HEAD branch&lt;/span&gt;
git checkout

&lt;span class="c"&gt;# Checkout to a remote branch&lt;/span&gt;
git checkout &lt;span class="nt"&gt;--track&lt;/span&gt; origin/branch-name

&lt;span class="c"&gt;# Create branch&lt;/span&gt;
git branch

&lt;span class="c"&gt;# Delete local branch&lt;/span&gt;
git branch &lt;span class="nt"&gt;-D&lt;/span&gt;

&lt;span class="c"&gt;# Delete origin branch&lt;/span&gt;
git branch &lt;span class="nt"&gt;-dr&lt;/span&gt; origin/branch

&lt;span class="c"&gt;# Tag current commit&lt;/span&gt;
git tag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Update &amp;amp; Publish
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download all changes&lt;/span&gt;
git pull

&lt;span class="c"&gt;# Upload all changes&lt;/span&gt;
git push

&lt;span class="c"&gt;# Publish tags&lt;/span&gt;
git push &lt;span class="nt"&gt;--tags&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Merge &amp;amp; Rebase
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Merge into current HEAD&lt;/span&gt;
git merge

&lt;span class="c"&gt;# Rebase your current HEAD (Don't rebase on public branches!)&lt;/span&gt;
git rebase

&lt;span class="c"&gt;# Abort rebase&lt;/span&gt;
git rebase &lt;span class="nt"&gt;--abort&lt;/span&gt;

&lt;span class="c"&gt;# Continue rebase&lt;/span&gt;
git rebase &lt;span class="nt"&gt;--continue&lt;/span&gt;

&lt;span class="c"&gt;# Use your configured merge tool for conflicts&lt;/span&gt;
git mergetool

&lt;span class="c"&gt;# After solving conflicts mark as resolved&lt;/span&gt;
git add
git &lt;span class="nb"&gt;rm&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  UNDO
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#Discard all tracked changes&lt;/span&gt;
git checkout &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;#Discard all local changes on working directory&lt;/span&gt;
git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; HEAD

&lt;span class="c"&gt;#Discard all local changes in file&lt;/span&gt;
git checkout HEAD

&lt;span class="c"&gt;#Reset HEAD pointer into a previous commit&lt;/span&gt;
git reset &lt;span class="nt"&gt;--hard&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Advanced Stuff
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Local Garbage Collection&lt;/span&gt;

&lt;span class="c"&gt;# finds and removes all references of unused commits in reflog&lt;/span&gt;
git reflog expire &lt;span class="nt"&gt;--expire&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1 hour"&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt;

&lt;span class="c"&gt;# finds remove all references of unreachable commits in reflog&lt;/span&gt;
git reflog expire &lt;span class="nt"&gt;--expire-unreachable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1 hour"&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt;

&lt;span class="c"&gt;# prune all unreachable objects from database&lt;/span&gt;
git prune &lt;span class="nt"&gt;--expire&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1 hour"&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt;

&lt;span class="c"&gt;# clean-up all unnecessary files and optimize the local repo&lt;/span&gt;
git gc &lt;span class="nt"&gt;--aggressive&lt;/span&gt; &lt;span class="nt"&gt;--prune&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1 hour"&lt;/span&gt;

&lt;span class="c"&gt;# count latest objects&lt;/span&gt;
count-objects &lt;span class="nt"&gt;-vH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Delete Old History (link: https://stackoverflow.com/a/41953383)&lt;/span&gt;
&lt;span class="c"&gt;# checkout to the status of the git repo at commit f; creating a branch named "temp"&lt;/span&gt;
git checkout &lt;span class="nt"&gt;--orphan&lt;/span&gt; temp

&lt;span class="c"&gt;# create a new commit that is to be the new root commit&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"new root commit"&lt;/span&gt;

&lt;span class="c"&gt;# now rebase the part of history from  to master on the temp branch&lt;/span&gt;
git rebase &lt;span class="nt"&gt;--onto&lt;/span&gt; temp  master

&lt;span class="c"&gt;# we don't need the temp branch anymore&lt;/span&gt;
git branch &lt;span class="nt"&gt;-D&lt;/span&gt; temp

&lt;span class="c"&gt;# this is a destructive operation&lt;/span&gt;
git push &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check LFS&lt;/span&gt;
git lfs ls-files &lt;span class="c"&gt;# It will show all tracked files.&lt;/span&gt;
git lfs push origin master &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="c"&gt;# Push any missing files&lt;/span&gt;
git count-objects &lt;span class="nt"&gt;-vH&lt;/span&gt; &lt;span class="c"&gt;# Check the real size of the repository.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Editing Global Config File&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Setting An Editor For Config File&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;core]
    editor &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Path/To/Your/Editor.exe'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Git Alias
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Shortcut Git Status: Use 'git st' to show git status -sb&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.st &lt;span class="s2"&gt;"status -sb"&lt;/span&gt;

&lt;span class="c"&gt;# Formatting Git Log: Use 'git ls' to show log with colored format&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.ls &lt;span class="s2"&gt;"log -n 15 --pretty=format:'%C(Yellow) %h %Cred%ad %Cblue%an %Creset%s%Cgreen%d' --date=short --all"&lt;/span&gt;

&lt;span class="c"&gt;# Formatting Git Graph: Use 'git graph' to show log with colored format&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.graph &lt;span class="s2"&gt;"log -n 25 --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"&lt;/span&gt;

&lt;span class="c"&gt;# Show only modified and deleted files including your extension&lt;/span&gt;

&lt;span class="c"&gt;# instead of ls-cs and *.cs, write your own extension&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.ls-cs &lt;span class="s2"&gt;"ls-files -zmd *.cs"&lt;/span&gt;

&lt;span class="c"&gt;# Ignoring Files Locally&lt;/span&gt;
&lt;span class="c"&gt;# use 'git ignore filePath' to ignore a file locally&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.ignore &lt;span class="s2"&gt;"update-index --assume-unchanged"&lt;/span&gt;

&lt;span class="c"&gt;# use 'git unignore filePath' to unignore a file locally&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.unignore &lt;span class="s2"&gt;"update-index --no-assume-unchanged"&lt;/span&gt;

&lt;span class="c"&gt;# use 'git ignored' to see your ignored files&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.ignored &lt;span class="s2"&gt;"!git ls-files -v | grep "&lt;/span&gt;^[[:lower:]]&lt;span class="s2"&gt;""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>git</category>
      <category>cli</category>
    </item>
    <item>
      <title>Git 103 - How To Collaborate</title>
      <dc:creator>Can Cellek</dc:creator>
      <pubDate>Mon, 06 Feb 2023 18:09:10 +0000</pubDate>
      <link>https://dev.to/excalith/git-103-how-to-collaborate-1pb2</link>
      <guid>https://dev.to/excalith/git-103-how-to-collaborate-1pb2</guid>
      <description>&lt;p&gt;This git fundamentals post will help you to understand how to collaborate using git with your colleagues. Considering you already know &lt;a href="https://dev.to/excalith/git-101-kickstart-your-repo-1gn6"&gt;Kickstart Your Repo&lt;/a&gt; and &lt;a href="https://dev.to/excalith/git-102-working-on-a-repo-543p"&gt;Working On A Repo&lt;/a&gt;, now we can dig further using git effectively with other collaborators. Note that this won't include an open-source project approach. Even the principle is the same, some of the projects have different requirements for pull requests. You can further investigate how to create pull requests for this. First of all, I would like to stress what a development process would be like without source control. A friendly piece of advice: if you think it is hard to work with git, think twice. It might take a while to understand and get used to working on git, but it is worths your time. &lt;/p&gt;

&lt;p&gt;Without source control, the major problems are those:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To work together, you should set up a NAS, cloud, or use something like a USB to share your work with your colleagues.&lt;/li&gt;
&lt;li&gt;It would be impossible to work on the same code at the same time. If not careful, you can override your friend's work with your save. If you are careful, you should check the conflicts by hand.&lt;/li&gt;
&lt;li&gt;You can't check the progress of your colleagues and create test builds using only the features you want to test out&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The list above is the common problems, and imagine you can hit much more roadblocks in the development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Theory
&lt;/h2&gt;

&lt;p&gt;Before diving further, we should talk about some theories first. To work effectively you and your collaborators should know the theory behind Git. To keep it simple, we will focus on 2 developers: Back-End and Front-End. Consider your repository as a station at the beginning of a road and each developer is at the same station. Since they are working on different stuff, they should take different paths from that station. When Front-End finishes his work, he puts his work into the road, as a new station. The same applies to Back-End developers as well. This time, when the Back-End developer puts her work into the road, it is automatically put after the Front-End station. Now that the road contains 2 developers' work, when they start a new path they will both have those stations combined. To illustrate this in a graph&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;                   &lt;span class="k"&gt;*&lt;/span&gt;  Road 3 &lt;span class="o"&gt;(&lt;/span&gt;All Back-End Merged&lt;span class="o"&gt;)&lt;/span&gt;
                 / | 
Back-End Work 3 &lt;span class="k"&gt;*&lt;/span&gt;  &lt;span class="k"&gt;*&lt;/span&gt;  Road 2 &lt;span class="o"&gt;(&lt;/span&gt;All Front-End Merged&lt;span class="o"&gt;)&lt;/span&gt;
                |  | &lt;span class="se"&gt;\&lt;/span&gt;
Back-End Work 2 &lt;span class="k"&gt;*&lt;/span&gt;  |  &lt;span class="k"&gt;*&lt;/span&gt; Front-End Work 2
                |  |  |
Back-End Work 1 &lt;span class="k"&gt;*&lt;/span&gt;  |  &lt;span class="k"&gt;*&lt;/span&gt; Front-End Work 1
                 &lt;span class="se"&gt;\ &lt;/span&gt;| /
                   &lt;span class="k"&gt;*&lt;/span&gt; Road 1 &lt;span class="o"&gt;(&lt;/span&gt;Base&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see above, Road now includes all work done! Whenever someone creates a new path from Road 3, they will all have the work done so far, allowing everyone to keep up. All those roads and paths are called branches. Branching is one of the most important things you should learn while collaborating. There are different branching approaches around, you should find or create one that best suits your workflow. You can check GitFlow, an extension for making branching easily. But we will focus on our simple branching model, close to GitFlow rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branches
&lt;/h2&gt;

&lt;p&gt;Here, we have our basic branching rules every colleague should use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Main Branch:&lt;/strong&gt; Master branch will be your release branch. Everything merged to here should have passed QA tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Develop Branch:&lt;/strong&gt; Everything worked on should be merged into develop. When the time comes, QA should test from the latest commit's build. When everything is in order, develop merges into master for release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature Branches:&lt;/strong&gt; Feature branches are the branches you will spend time on mostly. Since branches can be nested, if you create a branch feature/MyBranch it will be created under feature, just like a folder. Those features can be merged into develop branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you create a repository, there will be a master branch by default. When you clone the repo for the first time (considering you didn't directly checked-out to a different branch) you will also be checked out to the master branch. You can use that branch to push your initial commit including your .gitignore and readme files. Then, time to create your first branch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch develop
git checkout develop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create develop branch and check out to it. This branch includes everything committed to the master branch at the time you checked out. You can also create and check-out to a branch with a single command: 'git branch -b develop'. Now everything seems to be set up. but you need to push your branch to the server to let your colleagues access it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial Develop Branch"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will realize there is an error telling you that develop branch does not exist on the server, and it shows a code instead to set upstream. You can copy-paste that code to push it to remote. Once you have pushed develop into remote, you can only use push command instead. Now it is time for your colleagues to checkout to remote develop to create their branches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;--track&lt;/span&gt; origin/develop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code pulls the develop branch and tracks it. Basically tracking is saying "this branch on my local is that branch on remote" in a short way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working on a feature branch
&lt;/h2&gt;

&lt;p&gt;This section is a general approach for all your collaborators. It is time to create your branch to move on&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;-b&lt;/span&gt; feature/MyFeatureBranch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have your feature branch to work on. When you have created files, you are ready to commit. Don't forget, committing is also useful when you want to revert your changes until you push to remote. Here is the code to do so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="c"&gt;# Adds all files. You can add files one by one by giving file path&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Lovely Message"&lt;/span&gt; &lt;span class="c"&gt;# Write something simple yet self-explanatory&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can continue committing your changes whenever you feel right. You can also push your code to remote. First, check if you have anything left to be committed and be sure you are on the correct branch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With that command, you can see untracked files as well. If you need to commit files, you can do so. Otherwise, no necessary files have changed, you can set them to their first state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Reset all tracked files to their latest state&lt;/span&gt;
git checkout &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Remove all untracked files&lt;/span&gt;
git clean &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="c"&gt;# Shows all untracked files&lt;/span&gt;
git clean &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="c"&gt;# Remove all untracked  files if not necessary&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also stash files to get back to them, but to keep it simple I am not going to explain it. You can further investigate how to use stash commands from &lt;a href="https://git-scm.com/docs/git-stash" rel="noopener noreferrer"&gt;Git SCM&lt;/a&gt;. Now that your branch is clean, you can either push it to remote or merge directly into develop. If you are working on a branch that should take time, you can push it to remote a prototype version, so that other colleagues can merge it to their branches to keep adding their code. If you want to keep going on that branch, you can use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you haven't pushed remote before, you will see that upstream error meaning there is no such branch on the remote. Simply use the given code and push it to remote. Now that you can continue committing changes into your local as long as it takes. If you want to finish this feature for good, then without pushing you can directly merge it into develop branch. To do so, you should checkout to develop branch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout develop &lt;span class="c"&gt;# Checks out the develop branch&lt;/span&gt;
git fetch &lt;span class="c"&gt;# Looks for any changes for develop branch on remote&lt;/span&gt;
git status &lt;span class="c"&gt;# Check if you are behind the remote develop&lt;/span&gt;
git pull &lt;span class="c"&gt;# If you are behind, pull the latest changes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that you have the latest develop branch, you can merge your branch into develop and push it. Be sure that you are still on develop branch!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git merge feature/MyFeatureBranch
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If there is no conflict between your changes and develop's changes, it should directly merge. Otherwise, the console will give you a conflict error where you should edit conflicts. There are lots of different GUI merge tools to help you out there! I am using &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VSCode&lt;/a&gt;'s internal merge layout but you can use other apps such as &lt;a href="http://meldmerge.org/" rel="noopener noreferrer"&gt;Meld&lt;/a&gt; on Windows,  &lt;a href="https://www.kaleidoscopeapp.com/" rel="noopener noreferrer"&gt;Kaleidoscope&lt;/a&gt; on macOS. You can also use GUI Git Clients such as &lt;a href="https://git-fork.com/" rel="noopener noreferrer"&gt;Fork&lt;/a&gt;, &lt;a href="https://www.sourcetreeapp.com/" rel="noopener noreferrer"&gt;SourceTree&lt;/a&gt;, and &lt;a href="https://www.gitkraken.com/" rel="noopener noreferrer"&gt;GitKraken&lt;/a&gt;, where they have conflict resolving GUI as well. Decide on an app, and learn their approach how they resolve conflicts. They have your code and the code on branch side-by-side. You can see who deleted what and added where, so you can add yours into the final one. This final one will be the resolved file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;You are asking where is the collaboration part, right? Well, above is the general workflow working on branches. But consider this, if everyone minds the rules above, they should do the very same thing on different branches, just like you did above! So, to sum it up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a branching rule. One of the most common approaches is master, develop, and feature branches. Be sure to know what merges into where.&lt;/li&gt;
&lt;li&gt;Don't commit unnecessary changes. Commit often, when necessary.&lt;/li&gt;
&lt;li&gt;Check your status before committing and pushing.&lt;/li&gt;
&lt;li&gt;Use clear commit messages, your colleagues need to understand what you did from those messages.&lt;/li&gt;
&lt;li&gt;Don't leave your HEAD with uncommitted changes, if you try to checkout you may conflict with existing ones. You can stash them, or revert them if unnecessary.&lt;/li&gt;
&lt;li&gt;Whenever you checkout to a branch used by multiple collaborators, always fetch and see if you are behind the remote branch.&lt;/li&gt;
&lt;li&gt;Solve conflicts and test them. If you are using Pull-Requests for merging into master, ask the pull-request sender to fix conflicts.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tips</category>
      <category>git</category>
    </item>
    <item>
      <title>Git 102 - Working On A Repo</title>
      <dc:creator>Can Cellek</dc:creator>
      <pubDate>Mon, 06 Feb 2023 18:07:37 +0000</pubDate>
      <link>https://dev.to/excalith/git-102-working-on-a-repo-543p</link>
      <guid>https://dev.to/excalith/git-102-working-on-a-repo-543p</guid>
      <description>&lt;p&gt;Since you have already have a basic knowledge of what is Git and a few tools and providers to start with, it is time to get on with working on your repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating A Repository
&lt;/h2&gt;

&lt;p&gt;To work on git, you have to create a repository first. Depending on your choice, GitHub, Bitbucket, GitLab, etc. creating a repository may differ, but the main principles are the same. For instance, for GitHub and  Bitbucket interface you can click the plus icon and select "New Repository". When the page loads;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Choose a repository name (will be called MyRepo from now on)&lt;/li&gt;
&lt;li&gt;  Set the repo visibility either private or public (depending on your provider, private repositories may not be free)&lt;/li&gt;
&lt;li&gt;  Click Create Repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now you have a repository to work with!&lt;/p&gt;

&lt;h2&gt;
  
  
  I Got The Repo!
&lt;/h2&gt;

&lt;p&gt;Now it is time to clone your repository MyRepo from remote to your local. To do that, you have to find the "link" to that repository. Beware: if you have SSH keys already set up, you can use the SSH version. Otherwise, if you have no idea how to do it, you can use HTTPS. It is pretty unsecure compared to SSH, but for this tutorial series, we are only getting into basics.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  SSH Example: &lt;code&gt;git@github.com:YourUserName/MyRepo.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  HTTPS Example: &lt;code&gt;https://github.com/YourUserName/MyRepo.git&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now time to get those links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  GitHub: Click the green button "Clone or Download" and copy the link below&lt;/li&gt;
&lt;li&gt;  Bitbucket: Copy the link on the overview page&lt;/li&gt;
&lt;li&gt;  GitLab: On the Project page, copy the link&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Clone Of My Own...
&lt;/h2&gt;

&lt;p&gt;Time to clone your repository! Since GUI clients have their tutorials, I will explain the CLI version using terminals instead. Don't worry, even if they are commands they are the common terminology and I will explain them step by step. So, I recommend you to read them to have a better understanding of what GUI clients do in the background. Here we go! First, find a place for your git projects. Find somewhere cozy, easy to reach, and without funky characters in the path. Change your directory to your Git folder&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;Git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clone your repo into your Git folder. Don't worry, it will create the repo's folder inside. It will ask for your password since it already knows that you are trying to clone your repo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/YourUserName/MyRepo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you should see a folder called MyRepo inside your Git folder. If you have enabled to view hidden folders by default, you should see a .git folder. This folder encapsulates lots of information related to your repository. Simply put, this is the bridge between your local repo and remote repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Of All...
&lt;/h2&gt;

&lt;p&gt;You have a repository where you can share everything with collaborators. I mean, literally everything within your repository folder. Consider yourself struggling to find files to share within temp files, test codes, etc... Git has a solution for that! With an ignore file, you can simply filter out anything you do not want to share. Depending on your project, ignoring files can differ. You can already find a collection of &lt;a href="https://github.com/github/gitignore" rel="noopener noreferrer"&gt;.gitignore file examples&lt;/a&gt; for different projects on GitHub which you should download and use on your repository root (within MyRepo folder). You can also add your filters to it by opening the .gitignore file with your favorite code editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Real Commitment
&lt;/h2&gt;

&lt;p&gt;Since you have changed something, we can talk about git in depth. Git "stalks" all your files. Even if you change a string, git knows it. To see what your git stalked, use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; git status
On branch master

Initial commit
Untracked files:
    &lt;span class="o"&gt;(&lt;/span&gt;use &lt;span class="s2"&gt;"git add &amp;lt;file&amp;gt;..."&lt;/span&gt; to include &lt;span class="k"&gt;in &lt;/span&gt;what will be committed&lt;span class="o"&gt;)&lt;/span&gt;

    .gitignore

nothing added to commit but untracked files present &lt;span class="o"&gt;(&lt;/span&gt;use &lt;span class="s2"&gt;"git add"&lt;/span&gt; to track&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add .gitignore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have added your first file, it is also tracked by git, and ready to be committed. If you check your status by 'git status' again, you will see something different now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; git status
On branch master

Initial commit

Changes to be committed:
    &lt;span class="o"&gt;(&lt;/span&gt;use &lt;span class="s2"&gt;"git rm --cached &amp;lt;file&amp;gt;..."&lt;/span&gt; to unstage&lt;span class="o"&gt;)&lt;/span&gt;

    new file:   .gitignore

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means you have tracked the .gitignore file and git recognizes it as &lt;strong&gt;staged&lt;/strong&gt;. If you hear "stage your files", it means to add your files. You can add as many files as you can into a staging area. With this, you can share all your project or only a modified file with a single commit. We will get into this now. Now that you have added a file to the staging area, it is time to commit. Commit is simply put your staged files are done and ready to be published. To do so;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;".gitignore added"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command above saves all changes into a commit, so you can share it. The -m is short for --message and the string in between quotation marks are your messages, to be read by other collaborators to see what you are up to without checking your code. Be brief about your messages! You can see your commits by&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--pretty&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;oneline &lt;span class="nt"&gt;--graph&lt;/span&gt; &lt;span class="nt"&gt;--decorate&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a modified version of the 'git log' command, better for the eyes. Right now, since only you contributed a file, it only shows your commit. There are lots of aliases you can use to prevent injuries on your fingers, typing all these commands. &lt;/p&gt;

&lt;p&gt;We haven't uploaded our commit yet, so nobody can see what you did so far. The before-mentioned upload is called 'push' in git terminology. To push;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, your local repository should push the commits to your remote repository. Any collaborator already cloned should now have access to your push. Now you can add your project files and commit them as mentioned above easily:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you have a project already, simply put all your project files into your repository root.&lt;/li&gt;
&lt;li&gt;  If you are starting a brand new project, put your base project files to your repository root.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, your .gitignore file should take care of unnecessary files by not tracking them by default. When it comes to working with multiple collaborators, things get a little nasty. I will cover up that with new commands branching, fetching, pulling, and merging in my next post!&lt;/p&gt;

</description>
      <category>tips</category>
      <category>git</category>
    </item>
    <item>
      <title>Git 101 - Kickstart Your Repo</title>
      <dc:creator>Can Cellek</dc:creator>
      <pubDate>Mon, 06 Feb 2023 17:59:02 +0000</pubDate>
      <link>https://dev.to/excalith/git-101-kickstart-your-repo-1gn6</link>
      <guid>https://dev.to/excalith/git-101-kickstart-your-repo-1gn6</guid>
      <description>&lt;p&gt;The "Git Fundamentals" idea has been around my mind for a long time. For developers, git may be easy to understand but for many artists, it is mostly overwhelming. &lt;br&gt;
In this series I will try to explain what is Git and how you can use it for your projects, specially tailored for non-developers and indie game developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Git Anyway
&lt;/h2&gt;

&lt;p&gt;As KISS (Keep It Simple Stupid) dictates, we can shortly tell that Git is one of the widely used version control systems around. But what is version control? &lt;br&gt;
How can you take benefit from it? Imagine you are working on a project, adding new features and fixes regularly. What if another colleague is working on the same project and modified the same code? What if you have changed something and realized it is not working as it should anymore? Well, in such situations git &lt;br&gt;
will be your best friend!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Git allows you to work with multiple colleagues simultaneously, even on the same code. These are called conflicts and can be solved easily since git can show differences between modifications done by each colleague and you can choose with file or which line of code to choose.&lt;/li&gt;
&lt;li&gt;  Git stores the history of each change. With this approach, you can even get back to the code you wrote a year ago! It is like you have a space-time bending 
Delorian, only working backward to current.&lt;/li&gt;
&lt;li&gt;  You can create branches and continue working on different features at the same time. Git will change each code to the corresponding branch state.&lt;/li&gt;
&lt;li&gt;  When you are done you can merge your branches into a master branch that holds finalized features together, most likely a release candidate.&lt;/li&gt;
&lt;li&gt;  If you are using git with service providers' issue systems, you can close issues with your commits so it will not be a pain to create changelogs and beta testers to check the situation.&lt;/li&gt;
&lt;li&gt;  Working with a team requires good project management. You can keep track of each colleagues commits and keep track of the progress.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are lots of benefits I haven't mentioned yet but these are just the most important ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Get Started
&lt;/h2&gt;

&lt;p&gt;First of all, you need a service to use. There are different services around and they all come with their pros and cons. I will not compare each service in depth, considering these article series are specially tailored for indie devs, I will talk about licenses.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub:&lt;/a&gt; Home of open source projects, GitHub is a widely used git service around the world. &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://bitbucket.org/" rel="noopener noreferrer"&gt;Bitbucket:&lt;/a&gt; Bitbucket is another widely used git service where you can create private projects with a free account. With a free account, it restricts you to having limited contributors working on a private project. If your team is larger, you can subscribe.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://gitlab.com" rel="noopener noreferrer"&gt;GitLab:&lt;/a&gt; GitLab is one of the git services as well. You can create unlimited projects both private and public with unlimited users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep in mind that these can change in the meantime, I strongly recommend you to check out their websites and ask google for in-depth comparisons. In Stygian: Reign of the Old Ones we chose Bitbucket since they have their other services you can use without any hassle. When you are done with the decision part and create your account, it comes to setting up the environment you should work on. Just in case if you are not familiar with some terms, the before-mentioned projects are called a repository. Repositories (shortly repo) are where your project codes are stored. You should create one first to continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Go Already!
&lt;/h2&gt;

&lt;p&gt;Now it is time to make another decision before it gets more technical. First of all, you need your computer to understand "Git". Git will not work like regular uploading or FTP. To do that, you can either&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Use GUI software to do the commands for you&lt;/li&gt;
&lt;li&gt;  Use terminal with git commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both options are viable, but if you are new to this git magic, I strongly recommend you to use GUI software to visualize how git works first if you plan to use the terminal later. Depending on a few researches provided by different resources (sorry, couldn't find a link) majority of git users use both GUI and CLI (terminal) at the same time. &lt;strong&gt;Git GUI Software:&lt;/strong&gt; Here are a few software for you&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://desktop.github.com/" rel="noopener noreferrer"&gt;GitHub Desktop:&lt;/a&gt; If you plan to use GitHub, it has a flawless integration (free)&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.sourcetreeapp.com/" rel="noopener noreferrer"&gt;SourceTree:&lt;/a&gt; If you plan to use Bitbucket, it has a flawless integration (free)&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://www.gitkraken.com/" rel="noopener noreferrer"&gt;GitKraken:&lt;/a&gt; One of the best-looking git clients around, might be easier for you to get used to git. (free for non-commercial projects)&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.git-tower.com/" rel="noopener noreferrer"&gt;Tower:&lt;/a&gt; One of the most advanced git clients around&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git Terminal&lt;/strong&gt; If you plan to use the terminal as well, you first have to &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;download Git from Git SCM&lt;/a&gt; to start. Next article, I will write down how to start working on your repository.&lt;/p&gt;

</description>
      <category>tips</category>
      <category>git</category>
    </item>
  </channel>
</rss>
