Git Product home page Git Product logo

git-katas's Introduction

maintainer
JKrag

Git Katas

Quick Start

In the Cloud

Open in Cloud Shell

On Your Local Machine

Quick Start

  • Clone this repository
  • Go into the folder you want to solve an exercise in
  • Run the setup.sh script
  • Consult the README.md in that folder to get a description of the exercise

Purpose of Git Katas

This repository is a collection of Git exercises. The concept is stolen without shame from Schauderhaft.de. Unfortunately, they have not maintained the system - and we need more good Git exercises.

The exercises are designed for use when we are teaching Git courses. You should be able to use them as self-contained exercises that will allow you to keep your Git skills sharp.

Exercises starting with basic are entry-level - other exercises vary greatly in difficulty.

To get an overview of the exercises in here look in Overview.md.

Feel free to use these exercises, that's why they're public!

Suggested Learning Path

If you are coming to this repository for some basic Git knowledge, we recommend going through the exercises in the following order. This is the order that Jan Krag at Praqma teaches Git and might change over time. There are more exercises than this, but these should take you through everything you need to be able to use Git effectively in your day to day life.

See Overview.md for a more complete list and suggested order.

Contributing

If you miss exercises or find errors in any of them, feel free to improve them and make a pull request.

You can also make an issue so we notice an opportunity to improve!

Thank you!

Celebrating success

On September 6th, 2023, we reached the milestone of having 1000 stars on GitHub. Thank you all for your support! This repository would not be where it is without the valuable contributions from the community.

1000 stars

Cheatsheet

A collection of useful commands to use throughout the exercises:

# Initializing an empty git repository.
git init            # Initialize an empty git repository under current directory.

# Cloning a repository
git clone https://github.com/praqma-training/git-katas.git      # Clone this repository to your current working directory

# Git (user and repo level) configurations
git config --local user.name "Repo-level Username"          # For setting a local git repo level user name.
git config --local user.email "[email protected]" # For setting a local git repo level user email.
                                                            # --global -> User level git config stored in <user-home>/.gitconfig for e.g. ~/.gitconfig
                                                            # --local -> repo level config stored in repo's main dir under .git/config


# See local changes
git status                  # Show the working tree status
git diff                    # Show changes current working directory (not yet staged)
git diff --cached           # Show changes currently staged for commit

# Add files to staging (before a commit)
git add myfile.txt          # Add myfile.txt to stage
git add .                   # Add entire working directory to stage

# Make a commit
git commit                              # Make a new commit with the changes in your staging area. This will open an editor for a commit message.
git commit -m "I love documentation"    # Make a new commit with a commit message from the command line
git commit -a                           # Make a new commit and automatically "add" changes from all known files
git commit -am "I still do!"            # A combination of the above
git commit --amend                      # Re-do the commit message of the previous commit (don't do this after pushing!)
                                        #   We _never_ change "public history"
git reset <file>                        # Unstage a staged file leaving in working directory without losing any changes.
git reset --soft [commit_hash]          # resets the current branch to <commit>. Does not touch the staging area or the working tree at all.
                                        # --hard mode would discard all changes.

# Configuring a different editor
## Avoid Vim but stay in terminal:
- `git config --global core.editor nano`

## For Windows:
- Use Notepad:
`git config --global core.editor notepad`

- or for instance Notepad++:
`git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"`


# See history
git log             # Show commit logs
git log --oneline   # Formats commits to a single line (shorthand for --pretty=oneline  --abbrev-commit )
git log --graph     # Show a graph commits and branches
git log --pretty=fuller     # To see commit log details with author and committer details, if any different.
git log --follow <file>     # List the history of a file beyond renames
git log branch2..branch1    # Show commits reachable from branch1 but not from branch2

# Deferring
git stash                               # Stash (store temporarily) changes in working branch and enable checkingout a new branch
git stash list                          # List stored stashes.
git stash apply <stash>                 # Apply given <stash>, or if none given the latest from stash list.


# Working with Branches
git branch my-branch       # Create a new branch called my-branch
git switch my-branch     # Switch to a different branch to work on it
git switch -c my-branch  # Create a new branch called my-branch AND switch to it
git branch -d my-branch    # Delete branch my-branch that has been merged with master
git branch -D my-branch    # Forcefully delete a branch my-branch that hasn't been merged to master

# Merging
git merge master         # Merge the master branch into your currently checked out branch.
git rebase master        # Rebase current branch on top of master branch

# Working with Remotes
git remote              # Show your current remotes
git remote -v           # Show your current remotes and their URLs
git push                # Publish your commits to the upstream master of your currently checked out branch
git push -u origin my-branch  # Push newly created branch to remote repo setting up to track remote branch from origin.
                              # No need to specify remote branch name, for e.g., when doing a 'git pull' on that branch.
git pull                # Pull changes from the remote to your currently checked out branch

# Re/moving files under version control
git rm <path/to/the/file>                 # remove file and stage the change to be committed.
git mv <source/file> <destination/file>   # move/rename file and stage the change to be committed.

# Aliases - it's possible to make aliases of frequently used commands
#   This is often done to make a command shorter, or to add default flags

# Adding a shorthand "sw" for "switch"
git config --global alias.sw "switch"
# Usage:
git sw master     # Does a "git switch master"

## Logging
git log --graph --oneline --all # Show a nice graph of the previous commits
## Adding an alias called "lol" (log oneline..) that shows the above
git config --global alias.lol "log --graph --oneline --all"
## Using the alias
git lol     # Does a "git log --graph --oneline --all"

Testing

There is a very small test that you can run in powershell or bash. It is contained in the scripts test.sh and test.ps1.

Cleanup

You can remove testing artifacts, exercise directories, with the git clean command:

git clean -ffdX

git-katas's People

Contributors

adamatan avatar alxb5 avatar andreasjacobsen avatar andrekappes avatar arno-h avatar atombrella avatar bothzoli avatar brent-clark-sed-sw-mgr avatar efigaja avatar figaw avatar ftheile avatar grammeaway avatar indy5858 avatar jkrag avatar kardelio avatar madsbaggesen avatar naesheim avatar natasha2001 avatar neppord avatar ntnhon avatar oehc avatar pedrorijo91 avatar quartercastle avatar randomsort avatar safaie avatar schiluveri avatar sofusalbertsen avatar thedrlambda avatar tomhostyn avatar zanderhavgaard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

git-katas's Issues

make branching kata

examines the following commands in regards to a branch

  1. git branch and -a
  2. git checkout and -b
  3. git diff

Along with the shorthand notations HEAD ^ ~

Examples:

There should be two branches, both pointing to the same commit.

  1. List the branches
  2. Go to the other branch, that points to the same commit
  3. git status
  4. Make a commit
  5. git status
  6. git log --all --decorate --graph --oneline
  7. back to the first branch
  8. make commit
  9. git status
  10. git log --all --decorate --graph --oneline

Talk about merging, but wait to show it to another kata.

basic ignore kata is not basic

The ignore kata is described as basic but launches straight into the advanced use case where you ignored a filetype that is already added, and doesn't even provide explanation as to what is expected.

I think the basic ignore kata should be much more basic.

Create Learning Paths

We should have different learning paths through the gitkatas.

A noob could start with basic-staging -> basic-branching -> something something

while we could also have a "superuser" path that does more advanced stuff
An admin path could also be useful

Remove merging from basic branching

Right now the basic-branching require us to go all the way to slide 44 because is also has merging in it.
I suggest we make a basic-branching and a basic-merging in order to accommodate an early entry of a lab (slide 24)

More detailed documentation of running setup script

The current way may cause confusion and trying to execute a run setup.sh command.

Make it more explicit in the READMEs for example like this:

Run the setup script:

./setup.sh

PS: Does this work in Git Bash without the .sh files being executable?

kata2-squashing

Looking at the text, and the branching, it is not clear where master should be rebased to.
Isn't it the case that it should be kata2-squashing that were at master's place. Else rename master, since you never rewrite public history, and users sees master as something public.

selection_044

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.