commit
						c4ead2998f
					
				 39 changed files with 742 additions and 0 deletions
			
			
		- 
					12001.vpm
 - 
					16002.vpm
 - 
					21003.vpm
 - 
					28004.vpm
 - 
					17005.vpm
 - 
					25006.vpm
 - 
					17007.vpm
 - 
					17008.vpm
 - 
					22009.vpm
 - 
					25010.vpm
 - 
					19011.vpm
 - 
					20013.vpm
 - 
					16014.vpm
 - 
					15015.vpm
 - 
					20016.vpm
 - 
					21017.vpm
 - 
					17020.vpm
 - 
					19023.vpm
 - 
					22024.vpm
 - 
					20025.vpm
 - 
					18026.vpm
 - 
					22027.vpm
 - 
					18030.vpm
 - 
					22040.vpm
 - 
					18041.vpm
 - 
					20042.vpm
 - 
					22043.vpm
 - 
					15044.vpm
 - 
					12046.vpm
 - 
					17050.vpm
 - 
					19051.vpm
 - 
					30052.vpm
 - 
					15053.vpm
 - 
					22054.vpm
 - 
					12070.vpm
 - 
					14071.vpm
 - 
					20072.vpm
 - 
					15073.vpm
 - 
					22090.vpm
 
@ -0,0 +1,12 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸         ╻ ╻┏━┓┏━┓╻┏ ┏━┓╻ ╻┏━┓┏━┓ | 
				
			|||
              ┃╺┓┃ ┃    ╺━╸   ┃╻┃┃ ┃┣┳┛┣┻┓┗━┓┣━┫┃ ┃┣━┛ | 
				
			|||
              ┗━┛╹ ╹          ┗┻┛┗━┛╹┗╸╹ ╹┗━┛╹ ╹┗━┛╹   | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
                        27. September 2022 | 
				
			|||
                          Pranger Stefan | 
				
			|||
 | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓┏━┓┏━┓╺┳┓┏┳┓┏━┓┏━┓    | 
				
			|||
              ┣┳┛┃ ┃┣━┫ ┃┃┃┃┃┣━┫┣━┛    | 
				
			|||
              ╹┗╸┗━┛╹ ╹╺┻┛╹ ╹╹ ╹╹      | 
				
			|||
               | 
				
			|||
               | 
				
			|||
 | 
				
			|||
            - git basics, what is git capable of | 
				
			|||
            - what do to in what situations | 
				
			|||
            - project management | 
				
			|||
              - pull requests and feature branches | 
				
			|||
              - bug tracking | 
				
			|||
              - continuous integration | 
				
			|||
            - git gadgets (grep, bisect, etc.)   | 
				
			|||
@ -0,0 +1,21 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏┳┓┏━┓╻┏┓╻   ┏━┓┏━┓╻┏┓╻╺┳╸┏━┓ | 
				
			|||
              ┃┃┃┣━┫┃┃┗┫   ┣━┛┃ ┃┃┃┗┫ ┃ ┗━┓ | 
				
			|||
              ╹ ╹╹ ╹╹╹ ╹   ╹  ┗━┛╹╹ ╹ ╹ ┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - Staging Area and  | 
				
			|||
            - Interactive Rebasing for well crafted commits, | 
				
			|||
 | 
				
			|||
            - Merging and Rebasing, | 
				
			|||
 | 
				
			|||
            - Pull Request workflow and | 
				
			|||
              | 
				
			|||
            - Git as inspection tool. | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
               | 
				
			|||
@ -0,0 +1,28 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏┓ ┏━┓┏━┓╻┏━╸┏━┓ | 
				
			|||
              ┃╺┓┃ ┃    ┣┻┓┣━┫┗━┓┃┃  ┗━┓ | 
				
			|||
              ┗━┛╹ ╹    ┗━┛╹ ╹┗━┛╹┗━╸┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - _distributed_ version control | 
				
			|||
            - staging area | 
				
			|||
              - git add, git reset, etc. instead of only commiting | 
				
			|||
            - branching | 
				
			|||
              - "killer feature" | 
				
			|||
            - content-addressable filesystem | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,17 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ╻┏┓╻╻╺┳╸ | 
				
			|||
              ┃╺┓┃ ┃    ┃┃┗┫┃ ┃  | 
				
			|||
              ┗━┛╹ ╹    ╹╹ ╹╹ ╹  | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Create or clone a repository via | 
				
			|||
            - $ git init | 
				
			|||
            - $ git clone | 
				
			|||
 | 
				
			|||
            Basic configuration: | 
				
			|||
            - $ git config --global user.name "Foo Bar" | 
				
			|||
            - $ git config --global user.email foobar@example.com | 
				
			|||
 | 
				
			|||
@ -0,0 +1,25 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓╺┳╸┏━┓┏━╸╻┏┓╻┏━╸   ┏━┓┏━┓┏━╸┏━┓ | 
				
			|||
              ┗━┓ ┃ ┣━┫┃╺┓┃┃┗┫┃╺┓   ┣━┫┣┳┛┣╸ ┣━┫ | 
				
			|||
              ┗━┛ ╹ ╹ ╹┗━┛╹╹ ╹┗━┛   ╹ ╹╹┗╸┗━╸╹ ╹ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - first main difference to SVN | 
				
			|||
            - advantage of git | 
				
			|||
 | 
				
			|||
            Files can be:  | 
				
			|||
 | 
				
			|||
           ┌─────────┐   ┌──────────┐   ┌────────┐   ┌──────┐   ┌────────┐ | 
				
			|||
           │Untracked│   │Unmodified│   │Modified│   │Staged│   │Commited│ | 
				
			|||
           └─────────┘   └──────────┘   └────────┘   └──────┘   └────────┘ | 
				
			|||
 | 
				
			|||
            Git manages these states as: | 
				
			|||
 | 
				
			|||
                       ┌─────────────────┐           ┌─────┐      ┌────┐ | 
				
			|||
                       │Working Directory│           │Index│      │HEAD│ | 
				
			|||
                       └─────────────────┘           └─────┘      └────┘ | 
				
			|||
                         Your Sandbox               The proposed  The next  | 
				
			|||
                                                    next commit   parent   | 
				
			|||
@ -0,0 +1,17 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓╺┳╸┏━┓┏━╸╻┏┓╻┏━╸   ┏━┓┏━┓┏━╸┏━┓ | 
				
			|||
              ┗━┓ ┃ ┣━┫┃╺┓┃┃┗┫┃╺┓   ┣━┫┣┳┛┣╸ ┣━┫ | 
				
			|||
              ┗━┛ ╹ ╹ ╹┗━┛╹╹ ╹┗━┛   ╹ ╹╹┗╸┗━╸╹ ╹ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - git add | 
				
			|||
            - git add --patch (-p)  | 
				
			|||
             - add individual lines (hunks) to commits | 
				
			|||
             - "interactive staging" | 
				
			|||
             - very useful to craft commits that are easy to understand | 
				
			|||
            - git restore --staged/--worktree | 
				
			|||
            - git reset --soft/--mixed/--hard | 
				
			|||
            - git rm --cached  | 
				
			|||
@ -0,0 +1,17 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓╺┳╸┏━┓┏━╸╻┏┓╻┏━╸   ┏━┓┏━┓┏━╸┏━┓ | 
				
			|||
              ┗━┓ ┃ ┣━┫┃╺┓┃┃┗┫┃╺┓   ┣━┫┣┳┛┣╸ ┣━┫ | 
				
			|||
              ┗━┛ ╹ ╹ ╹┗━┛╹╹ ╹┗━┛   ╹ ╹╹┗╸┗━╸╹ ╹ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Check your modifications or what you are about to commit | 
				
			|||
            - git diff / git diff --staged | 
				
			|||
 | 
				
			|||
            Should help to have a clean process of commiting changes | 
				
			|||
            Finalizing step: git commit | 
				
			|||
 | 
				
			|||
            What if I messed up my current commit? | 
				
			|||
            - $ git commit --amend | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏━┓┏┓  ┏┓┏━╸┏━╸╺┳╸┏━┓ | 
				
			|||
              ┃╺┓┃ ┃    ┃ ┃┣┻┓  ┃┣╸ ┃   ┃ ┗━┓ | 
				
			|||
              ┗━┛╹ ╹    ┗━┛┗━┛┗━┛┗━╸┗━╸ ╹ ┗━┛ | 
				
			|||
 | 
				
			|||
        ┌────────────────┐    ┌──────────────────────┐main.c┌────┐ | 
				
			|||
        │commit (b3aacfe)│───>│tree (think directory)│─────>│blob│  | 
				
			|||
        └────────────────┘    └──────────────────────┘      └────┘ | 
				
			|||
                | parent                              \ | 
				
			|||
                v                                      \ | 
				
			|||
        ┌────────────────┐    ┌──────────────────────┐  \ | 
				
			|||
    ┌──>│commit (a21fh1a)│───>│         tree         │   \ | 
				
			|||
    |   └────────────────┘    └──────────────────────┘    \ | 
				
			|||
 ┌───┐                            /       |        \       \ | 
				
			|||
 │tag│                        main.c    config.h  main.h    \ | 
				
			|||
 └───┘                          /         |          \       \ | 
				
			|||
                             ┌────┐     ┌────┐      ┌────┐<--°  | 
				
			|||
                             │blob│     │blob│<-┐   │blob│   |  | 
				
			|||
                             └────┘     └────┘   \  └────┘   | | 
				
			|||
                                                 └───────────┘ | 
				
			|||
@ -0,0 +1,25 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓┏━╸╻ ╻╻┏━┓╻┏━┓┏┓╻   ┏━┓┏━╸╻  ┏━╸┏━╸╺┳╸╻┏━┓┏┓╻ | 
				
			|||
              ┣┳┛┣╸ ┃┏┛┃┗━┓┃┃ ┃┃┗┫   ┗━┓┣╸ ┃  ┣╸ ┃   ┃ ┃┃ ┃┃┗┫ | 
				
			|||
              ╹┗╸┗━╸┗┛ ╹┗━┛╹┗━┛╹ ╹   ┗━┛┗━╸┗━╸┗━╸┗━╸ ╹ ╹┗━┛╹ ╹ | 
				
			|||
 | 
				
			|||
        ┌────────────────┐  | 
				
			|||
        │commit (b3aacfe)│ | 
				
			|||
        └────────────────┘  | 
				
			|||
 | 
				
			|||
            - $ git show <commit-ish> -- <glob-pattern> | 
				
			|||
 | 
				
			|||
            - commits are referencable via | 
				
			|||
              - their SHA1 | 
				
			|||
              - HEAD | 
				
			|||
              - tags/branchnames | 
				
			|||
             | 
				
			|||
            - Syntax: | 
				
			|||
              - HEAD~<n> // select the n-th ancestor of HEAD | 
				
			|||
              - <commit-ish>..<commit-ish> | 
				
			|||
 | 
				
			|||
            - HEAD-history: | 
				
			|||
              - HEAD@{<n>} | 
				
			|||
 | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏┓ ┏━┓┏━┓┏┓╻┏━╸╻ ╻╻┏┓╻┏━╸ | 
				
			|||
              ┣┻┓┣┳┛┣━┫┃┗┫┃  ┣━┫┃┃┗┫┃╺┓ | 
				
			|||
              ┗━┛╹┗╸╹ ╹╹ ╹┗━╸╹ ╹╹╹ ╹┗━┛ | 
				
			|||
               | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - git's "killer feature"  | 
				
			|||
 | 
				
			|||
            - A new branch is essentially just opening a new history | 
				
			|||
              (i.e. no copying involved!) | 
				
			|||
 | 
				
			|||
            - Highly encouraged to use many (shortlived) branches  | 
				
			|||
 | 
				
			|||
            Create a new branch with  | 
				
			|||
            - $ git switch --create/-c <branch-name> | 
				
			|||
 | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏┓ ┏━┓┏━┓┏┓╻┏━╸╻ ╻╻┏┓╻┏━╸ | 
				
			|||
              ┣┻┓┣┳┛┣━┫┃┗┫┃  ┣━┫┃┃┗┫┃╺┓ | 
				
			|||
              ┗━┛╹┗╸╹ ╹╹ ╹┗━╸╹ ╹╹╹ ╹┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Switching between branches with | 
				
			|||
            - $ git switch <branch-name> | 
				
			|||
            - $ git switch -  | 
				
			|||
 | 
				
			|||
            Cannot switch if that would overwrite modifications | 
				
			|||
 | 
				
			|||
            Untracked files will simply "move along" | 
				
			|||
            | 
				
			|||
            Delete or rename a branch:  | 
				
			|||
            - $ git branch -d <branch-name> | 
				
			|||
            - $ git branch -m <oldbranch> <newbranch> | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏━┓╺┳╸┏━┓┏━┓╻ ╻ | 
				
			|||
              ┃╺┓┃ ┃    ┗━┓ ┃ ┣━┫┗━┓┣━┫ | 
				
			|||
              ┗━┛╹ ╹    ┗━┛ ╹ ╹ ╹┗━┛╹ ╹ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Very helpful to quickly safe modifications  | 
				
			|||
 | 
				
			|||
            - $ git stash push --message/-m "..." | 
				
			|||
            - $ git stash list  | 
				
			|||
            - $ git stash apply/pop | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,15 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏━┓╺┳╸┏━┓┏━┓╻ ╻ | 
				
			|||
              ┃╺┓┃ ┃    ┗━┓ ┃ ┣━┫┗━┓┣━┫ | 
				
			|||
              ┗━┛╹ ╹    ┗━┛ ╹ ╹ ╹┗━┛╹ ╹ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              $ git stash push -m "WIP some frontend feature" | 
				
			|||
              $ git switch stable | 
				
			|||
              ... | 
				
			|||
              $ git commit | 
				
			|||
              $ git switch frontend_feature | 
				
			|||
              $ git stash pop | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ╻┏┓╻╺┳╸┏━╸┏━┓┏━┓┏━╸╺┳╸╻╻ ╻┏━╸   ┏━┓┏━╸┏┓ ┏━┓┏━┓╻┏┓╻┏━╸ | 
				
			|||
              ┃┃┗┫ ┃ ┣╸ ┣┳┛┣━┫┃   ┃ ┃┃┏┛┣╸    ┣┳┛┣╸ ┣┻┓┣━┫┗━┓┃┃┗┫┃╺┓ | 
				
			|||
              ╹╹ ╹ ╹ ┗━╸╹┗╸╹ ╹┗━╸ ╹ ╹┗┛ ┗━╸   ╹┗╸┗━╸┗━┛╹ ╹┗━┛╹╹ ╹┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - $ git rebase -i <commit-ish> | 
				
			|||
 | 
				
			|||
            Can be used to cleanup commit history | 
				
			|||
             | 
				
			|||
            - allows to basically change the history of your commits | 
				
			|||
            - each project should have a guideline | 
				
			|||
              - small feature may for example be _squashed_ together  | 
				
			|||
              - WIP- or unnecessary commits can be removed  | 
				
			|||
              - remove _checkpoint commits_ | 
				
			|||
               -> $ git rebase -i my_current_feature@{24.hours.ago}~1 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,21 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ╻┏┓╻╺┳╸┏━╸┏━┓┏━┓┏━╸╺┳╸╻╻ ╻┏━╸   ┏━┓┏━╸┏┓ ┏━┓┏━┓╻┏┓╻┏━╸    | 
				
			|||
              ┃┃┗┫ ┃ ┣╸ ┣┳┛┣━┫┃   ┃ ┃┃┏┛┣╸    ┣┳┛┣╸ ┣┻┓┣━┫┗━┓┃┃┗┫┃╺┓    | 
				
			|||
              ╹╹ ╹ ╹ ┗━╸╹┗╸╹ ╹┗━╸ ╹ ╹┗┛ ┗━╸   ╹┗╸┗━╸┗━┛╹ ╹┗━┛╹╹ ╹┗━┛    | 
				
			|||
 | 
				
			|||
 | 
				
			|||
             | 
				
			|||
            # Commands: | 
				
			|||
            # p, pick <commit> = use commit | 
				
			|||
            # r, reword <commit> = use commit, but edit the commit message | 
				
			|||
            # e, edit <commit> = use commit, but stop for amending | 
				
			|||
            # s, squash <commit> = use commit, but meld into previous commit | 
				
			|||
            # f, fixup <commit> = like "squash", but discard this commit's log message | 
				
			|||
            ... | 
				
			|||
            # | 
				
			|||
            # These lines can be re-ordered; they are executed from top to bottom. | 
				
			|||
            # | 
				
			|||
            # If you remove a line here THAT COMMIT WILL BE LOST. | 
				
			|||
             | 
				
			|||
@ -0,0 +1,17 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓┏━╸┏┳┓┏━┓╺┳╸┏━╸┏━┓ | 
				
			|||
              ┣┳┛┣╸ ┃┃┃┃ ┃ ┃ ┣╸ ┗━┓ | 
				
			|||
              ╹┗╸┗━╸╹ ╹┗━┛ ╹ ┗━╸┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Remote server to share code base | 
				
			|||
 | 
				
			|||
            - Gets setup with $ git clone  | 
				
			|||
            - $ git remote add <name> <url> | 
				
			|||
 | 
				
			|||
            - $ git fetch | 
				
			|||
            - $ git pull <remote> <branch> | 
				
			|||
            - $ git push <remote> <branch> | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏┳┓┏━╸┏━┓┏━╸╻┏┓╻┏━╸ | 
				
			|||
              ┃┃┃┣╸ ┣┳┛┃╺┓┃┃┗┫┃╺┓ | 
				
			|||
              ╹ ╹┗━╸╹┗╸┗━┛╹╹ ╹┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Multiple parallel workflows are encouraged  | 
				
			|||
             -> unavoidable conflicts  | 
				
			|||
  | 
				
			|||
            - Project guideline on how to handle conflicts | 
				
			|||
            | 
				
			|||
            - For more advanced usage: | 
				
			|||
              - $ git rerere | 
				
			|||
              - different merging strategies | 
				
			|||
						  | 
				
			|||
 | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏┳┓┏━╸┏━┓┏━╸╻┏┓╻┏━╸         ┏━╸┏━╸ | 
				
			|||
              ┃┃┃┣╸ ┣┳┛┃╺┓┃┃┗┫┃╺┓   ╺━╸   ┣╸ ┣╸  | 
				
			|||
              ╹ ╹┗━╸╹┗╸┗━┛╹╹ ╹┗━┛         ╹  ╹   | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - _fast-forward_ merge possible if HEAD direct ancestor | 
				
			|||
            - This allows for a clean, linear history on stable branches | 
				
			|||
              - helps with git blame, git bisect, git rebase -i | 
				
			|||
 | 
				
			|||
            ┌─────────────────────────────────────────────────────────────┐ | 
				
			|||
            │[spranger@gitWorkshop/stagingArea] git merge more_int_changes│ | 
				
			|||
            │Updating eff74ed..a2c365a                                    │ | 
				
			|||
            │Fast-forward                                                 │ | 
				
			|||
            │ testfile1 | 4 ++--                                          │ | 
				
			|||
            │  1 file changed, 2 insertions(+), 2 deletions(-)            │ | 
				
			|||
            └─────────────────────────────────────────────────────────────┘ | 
				
			|||
 | 
				
			|||
            - --ff, --no-ff, --ff-only | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓┏━╸┏┓ ┏━┓┏━┓╻┏┓╻┏━╸    | 
				
			|||
              ┣┳┛┣╸ ┣┻┓┣━┫┗━┓┃┃┗┫┃╺┓    | 
				
			|||
              ╹┗╸┗━╸┗━┛╹ ╹┗━┛╹╹ ╹┗━┛    | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Allows to move bases of branches (and more) | 
				
			|||
             | 
				
			|||
            - Most common usage: Update the base of your branch if outdated | 
				
			|||
            - Common strategy to _always_ ensure fast-forward merges | 
				
			|||
            - Very helpful in complicated branching settings | 
				
			|||
 | 
				
			|||
            Important Note: | 
				
			|||
              ┌─────────────────────────────────────────────────────────┐ | 
				
			|||
              │Do not rebase commits that exist outside your repository │ | 
				
			|||
              │             and that people (may) have based work on.   │ | 
				
			|||
              └─────────────────────────────────────────────────────────┘ | 
				
			|||
@ -0,0 +1,18 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸┏━┓┏┓╻┏━╸╻  ╻┏━╸╺┳╸┏━┓ | 
				
			|||
              ┃  ┃ ┃┃┗┫┣╸ ┃  ┃┃   ┃ ┗━┓ | 
				
			|||
              ┗━╸┗━┛╹ ╹╹  ┗━╸╹┗━╸ ╹ ┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Git tracks (per hunk-) conflicts over three files: | 
				
			|||
              - base/common | 
				
			|||
              - ours | 
				
			|||
              - theirs | 
				
			|||
 | 
				
			|||
            - $ git config --global merge.conflictstyle diff3 | 
				
			|||
              - Often helpful to have common state  | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
							┏━╸┏━┓┏┓╻┏━╸╻  ╻┏━╸╺┳╸┏━┓ | 
				
			|||
							┃  ┃ ┃┃┗┫┣╸ ┃  ┃┃   ┃ ┗━┓ | 
				
			|||
							┗━╸┗━┛╹ ╹╹  ┗━╸╹┗━╸ ╹ ┗━┛ | 
				
			|||
 | 
				
			|||
            ┌────────────────────────┐ ┌────────────────────────┐ | 
				
			|||
            │ #include <algorithms>  │ │ int main() {           │  				  | 
				
			|||
            │ <<<<<<< HEAD           │ │   int a = 5;           │   				  | 
				
			|||
            │  #include <sstream>    │ │ <<<<<<< HEAD           │   				  | 
				
			|||
            │ ||||||| 9275968        │ │   int b = 4;           │  				  | 
				
			|||
            │ =======                │ │ ||||||| 9275968        │ 				  | 
				
			|||
            │ #include <string>      │ │   int b = 8;           │ 				  | 
				
			|||
            │>>>>>>> new_feature     │ │ =======                │                                 | 
				
			|||
            └────────────────────────┘ │   int b = 9;           │  | 
				
			|||
                                       │ >>>>>>> new_feature    │ | 
				
			|||
                                       └────────────────────────┘ | 
				
			|||
						- Conflict markers appear in the file itself | 
				
			|||
						- Simplest way to handle:  | 
				
			|||
							-> directly modify the file	 | 
				
			|||
            - Git difftool for visual conflict resolving | 
				
			|||
@ -0,0 +1,18 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ╺┳╸┏━╸┏━┓┏┳┓   ╻ ╻┏━┓┏━┓╻┏ ┏━╸╻  ┏━┓╻ ╻┏━┓ | 
				
			|||
               ┃ ┣╸ ┣━┫┃┃┃   ┃╻┃┃ ┃┣┳┛┣┻┓┣╸ ┃  ┃ ┃┃╻┃┗━┓ | 
				
			|||
               ╹ ┗━╸╹ ╹╹ ╹   ┗┻┛┗━┛╹┗╸╹ ╹╹  ┗━╸┗━┛┗┻┛┗━┛ | 
				
			|||
 | 
				
			|||
             | 
				
			|||
 | 
				
			|||
            Team Workflows: | 
				
			|||
            - Merge vs. Rebase | 
				
			|||
              - Only fast-forward? | 
				
			|||
              - Keep merge commits? | 
				
			|||
            | 
				
			|||
            Branching Strategies:  | 
				
			|||
            - Main - Development - Feature branches - Stable branches | 
				
			|||
            - Main - Feature branches | 
				
			|||
            - etc. | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸┏━┓╻  ╻  ┏━┓┏┓ ┏━┓┏━┓┏━┓╺┳╸╻┏━┓┏┓╻ | 
				
			|||
              ┃  ┃ ┃┃  ┃  ┣━┫┣┻┓┃ ┃┣┳┛┣━┫ ┃ ┃┃ ┃┃┗┫ | 
				
			|||
              ┗━╸┗━┛┗━╸┗━╸╹ ╹┗━┛┗━┛╹┗╸╹ ╹ ╹ ╹┗━┛╹ ╹ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Git usage in the bigger picture. | 
				
			|||
 | 
				
			|||
            - Issue tracking, | 
				
			|||
            - Pull Request handling, | 
				
			|||
            - Assigning work, | 
				
			|||
            - Milestones, Projects, etc. | 
				
			|||
 | 
				
			|||
            Example frontends: | 
				
			|||
            - GitHub | 
				
			|||
            - Gitlab | 
				
			|||
            - Gitea | 
				
			|||
            - Gogs | 
				
			|||
 | 
				
			|||
@ -0,0 +1,18 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ╻┏━┓┏━┓╻ ╻┏━╸   ╺┳╸┏━┓┏━┓┏━╸╻┏ ┏━╸┏━┓ | 
				
			|||
              ┃┗━┓┗━┓┃ ┃┣╸     ┃ ┣┳┛┣━┫┃  ┣┻┓┣╸ ┣┳┛ | 
				
			|||
              ╹┗━┛┗━┛┗━┛┗━╸    ╹ ╹┗╸╹ ╹┗━╸╹ ╹┗━╸╹┗╸ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - Note-tacking, | 
				
			|||
            - feature requests, | 
				
			|||
            - track bug reports from clients. | 
				
			|||
 | 
				
			|||
            - Use labels to categorize  | 
				
			|||
              - bug, good-first-issue, enhancement, etc. | 
				
			|||
            - Associate milestones and assignees | 
				
			|||
 | 
				
			|||
            An issue should eventually be turned into a pull request (PR). | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓╻ ╻╻  ╻     ┏━┓┏━╸┏━┓╻ ╻┏━╸┏━┓╺┳╸┏━┓ | 
				
			|||
              ┣━┛┃ ┃┃  ┃     ┣┳┛┣╸ ┃┓┃┃ ┃┣╸ ┗━┓ ┃ ┗━┓ | 
				
			|||
              ╹  ┗━┛┗━╸┗━╸   ╹┗╸┗━╸┗┻┛┗━┛┗━╸┗━┛ ╹ ┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            At the heart of your team's workflow | 
				
			|||
 | 
				
			|||
            - Accompanies a branch | 
				
			|||
            - Gives the team | 
				
			|||
              - a plattform to discuss progress, | 
				
			|||
              - the branches history and | 
				
			|||
              - a list of all introduces changes. | 
				
			|||
 | 
				
			|||
            Project lead can review and ask for changes one a line-by-line basis | 
				
			|||
 | 
				
			|||
            Basis for Continuous Integration  | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸┏━┓┏┓╻╻ ╻┏━╸┏┓╻╺┳╸╻┏━┓┏┓╻┏━┓╻     ┏━╸┏━┓┏┳┓┏┳┓╻╺┳╸┏━┓ | 
				
			|||
              ┃  ┃ ┃┃┗┫┃┏┛┣╸ ┃┗┫ ┃ ┃┃ ┃┃┗┫┣━┫┃     ┃  ┃ ┃┃┃┃┃┃┃┃ ┃ ┗━┓ | 
				
			|||
              ┗━╸┗━┛╹ ╹┗┛ ┗━╸╹ ╹ ╹ ╹┗━┛╹ ╹╹ ╹┗━╸   ┗━╸┗━┛╹ ╹╹ ╹╹ ╹ ┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Syntax: | 
				
			|||
              ┌─────────────────────────────────────┐ | 
				
			|||
              │<type>[optional scope]: <description>│ | 
				
			|||
              │                                     │ | 
				
			|||
              │[optional body]                      │ | 
				
			|||
              │                                     │ | 
				
			|||
              │[optional footer(s)]                 │ | 
				
			|||
              └─────────────────────────────────────┘ | 
				
			|||
 | 
				
			|||
            - They enable | 
				
			|||
              - automated CHANGELOGs and,  | 
				
			|||
              - automated semantic version bump and | 
				
			|||
            - greatly help with readability. | 
				
			|||
@ -0,0 +1,15 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸┏━┓┏┓╻╻ ╻┏━╸┏┓╻╺┳╸╻┏━┓┏┓╻┏━┓╻     ┏━╸┏━┓┏┳┓┏┳┓╻╺┳╸┏━┓ | 
				
			|||
              ┃  ┃ ┃┃┗┫┃┏┛┣╸ ┃┗┫ ┃ ┃┃ ┃┃┗┫┣━┫┃     ┃  ┃ ┃┃┃┃┃┃┃┃ ┃ ┗━┓ | 
				
			|||
              ┗━╸┗━┛╹ ╹┗┛ ┗━╸╹ ╹ ╹ ╹┗━┛╹ ╹╹ ╹┗━╸   ┗━╸┗━┛╹ ╹╹ ╹╹ ╹ ┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            ┌──────────────────────────────────────────────────────────┐ | 
				
			|||
            │feat: allow provided config object to extend other configs│ | 
				
			|||
            │                                                          │ | 
				
			|||
            │BREAKING CHANGE: `extends` key in config file is now      │ | 
				
			|||
            │used for extending other config files                     │ | 
				
			|||
            └──────────────────────────────────────────────────────────┘ | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏┳┓╻┏━┓┏━╸┏━╸╻  ╻  ┏━┓┏┓╻┏━╸┏━┓╻ ╻┏━┓ | 
				
			|||
              ┃┃┃┃┗━┓┃  ┣╸ ┃  ┃  ┣━┫┃┗┫┣╸ ┃ ┃┃ ┃┗━┓ | 
				
			|||
              ╹ ╹╹┗━┛┗━╸┗━╸┗━╸┗━╸╹ ╹╹ ╹┗━╸┗━┛┗━┛┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - Protect master branch | 
				
			|||
            - Repository setting for PRs help with team workflow | 
				
			|||
              - e.g. can be set to create merge commits. | 
				
			|||
@ -0,0 +1,17 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓┏┓╻┏━┓╻  ╻ ╻┏━┓╻┏━┓         ╻┏┓╻┏━┓┏━┓┏━╸┏━╸╺┳╸╻┏━┓┏┓╻ | 
				
			|||
              ┣━┫┃┗┫┣━┫┃  ┗┳┛┗━┓┃┗━┓   ╺━╸   ┃┃┗┫┗━┓┣━┛┣╸ ┃   ┃ ┃┃ ┃┃┗┫ | 
				
			|||
              ╹ ╹╹ ╹╹ ╹┗━╸ ╹ ┗━┛╹┗━┛         ╹╹ ╹┗━┛╹  ┗━╸┗━╸ ╹ ╹┗━┛╹ ╹ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - Search through: code, modifications, commits or commit messages. | 
				
			|||
            - Look at history of lines of code | 
				
			|||
            - Binary search for bugs | 
				
			|||
            - List of most recent changes | 
				
			|||
 | 
				
			|||
             | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ╻  ┏━┓┏━╸ | 
				
			|||
              ┃╺┓┃ ┃    ┃  ┃ ┃┃╺┓ | 
				
			|||
              ┗━┛╹ ╹    ┗━╸┗━┛┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - $ git log | 
				
			|||
              - --patch, --after, --since, --before, --committer | 
				
			|||
              - -S"<search-pattern>"           // code | 
				
			|||
              - -L <start>,<end>:<filename>    // history of lines of code | 
				
			|||
              - -L :<function-name>:<filename> // history of a function | 
				
			|||
              - --grep "<search-pattern>"      // commit messages | 
				
			|||
 | 
				
			|||
            - $ git log --oneline | 
				
			|||
            - $ git log --graph | 
				
			|||
 | 
				
			|||
@ -0,0 +1,30 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏┓ ╻  ┏━┓┏┳┓┏━╸ | 
				
			|||
              ┃╺┓┃ ┃    ┣┻┓┃  ┣━┫┃┃┃┣╸  | 
				
			|||
              ┗━┛╹ ╹    ┗━┛┗━╸╹ ╹╹ ╹┗━╸ | 
				
			|||
 | 
				
			|||
						 | 
				
			|||
						 | 
				
			|||
						- $ git blame <filename> | 
				
			|||
            ┌────────────────────────────────────────────────────────────────┐ | 
				
			|||
            │[spranger@gitWorkshop/stagingArea] git blame testfile1          │ | 
				
			|||
            │2 days ago      Stefan  ^3b4a655│  1 │ #include <stdio.h>       │ | 
				
			|||
            │                                │  2 │ #include <algorithms>    │ | 
				
			|||
            │a day ago       Stefan  08b88afb│  3 │ #include <sstream>       │ | 
				
			|||
            │2 days ago      Stefan  ^3b4a655│  4 │                          │ | 
				
			|||
            │                                │  5 │ int main() {             │ | 
				
			|||
            │3 hours ago     Stefan  a2c365ad│  6 │   int a = 1;             │ | 
				
			|||
            │                                │  7 │   int b = 2;             │ | 
				
			|||
            │2 days ago      Stefan  ^3b4a655│  8 │                          │ | 
				
			|||
            │2 days ago      Stefan  a0bd6d8c│  9 │                          │ | 
				
			|||
            │                                │ 10 │   return a+b;            │ | 
				
			|||
            │2 days ago      Stefan  ^3b4a655│ 11 │ }                        │ | 
				
			|||
            └────────────────────────────────────────────────────────────────┘ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
     | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,15 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏━╸┏━┓┏━╸┏━┓ | 
				
			|||
              ┃╺┓┃ ┃    ┃╺┓┣┳┛┣╸ ┣━┛ | 
				
			|||
              ┗━┛╹ ╹    ┗━┛╹┗╸┗━╸╹   | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Powerful tool to search for code snippets | 
				
			|||
 | 
				
			|||
            - $ git grep "<search-pattern>" | 
				
			|||
              - -A <n>, -B <n>, -C <n> | 
				
			|||
              - --show-function/-p | 
				
			|||
              - --function-context/-W | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏┓ ╻┏━┓┏━╸┏━╸╺┳╸ | 
				
			|||
              ┃╺┓┃ ┃    ┣┻┓┃┗━┓┣╸ ┃   ┃  | 
				
			|||
              ┗━┛╹ ╹    ┗━┛╹┗━┛┗━╸┗━╸ ╹  | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Binary search to find commit that introduced a bug. | 
				
			|||
 | 
				
			|||
            ┌──────────────────────────────────────────┐ | 
				
			|||
            │$ git bisect start                        │  | 
				
			|||
            │$ git bisect bad <commit-ish>             │ | 
				
			|||
            │$ git bisect good <commit-ish>            │ | 
				
			|||
            └──────────────────────────────────────────┘ | 
				
			|||
             | 
				
			|||
            ┌──────────────────────────────────────────┐ | 
				
			|||
            │$ git bisect start HEAD HEAD~10 --        │ | 
				
			|||
            │$ git bisect run make test                │ | 
				
			|||
            │$ git bisect reset                        │ | 
				
			|||
            └──────────────────────────────────────────┘ | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━┓┏━┓╺┳╸┏━╸╻ ╻╻┏┓╻┏━╸ | 
				
			|||
              ┣━┛┣━┫ ┃ ┃  ┣━┫┃┃┗┫┃╺┓ | 
				
			|||
              ╹  ╹ ╹ ╹ ┗━╸╹ ╹╹╹ ╹┗━┛ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
             | 
				
			|||
            - Revert already commited changes | 
				
			|||
            - Pick a range of commits from different branches | 
				
			|||
            - Turn a commit into a git-readable file | 
				
			|||
@ -0,0 +1,14 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏━┓┏━╸╻ ╻┏━╸┏━┓╺┳╸ | 
				
			|||
              ┃╺┓┃ ┃    ┣┳┛┣╸ ┃┏┛┣╸ ┣┳┛ ┃  | 
				
			|||
              ┗━┛╹ ╹    ╹┗╸┗━╸┗┛ ┗━╸╹┗╸ ╹  | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Revert commits via new commits | 
				
			|||
 | 
				
			|||
            - Should be used when the commits are already public  | 
				
			|||
 | 
				
			|||
            - $ git revert <commit-ish>..  | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸╻╺┳╸   ┏━╸╻ ╻┏━╸┏━┓┏━┓╻ ╻   ┏━┓╻┏━╸╻┏  | 
				
			|||
              ┃╺┓┃ ┃    ┃  ┣━┫┣╸ ┣┳┛┣┳┛┗┳┛╺━╸┣━┛┃┃  ┣┻┓ | 
				
			|||
              ┗━┛╹ ╹    ┗━╸╹ ╹┗━╸╹┗╸╹┗╸ ╹    ╹  ╹┗━╸╹ ╹ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            Specify commits and apply them onto your HEAD | 
				
			|||
 | 
				
			|||
            - $ git cherry-pick <commit-ish>.. | 
				
			|||
 | 
				
			|||
            - $ git cherry-pick ..master | 
				
			|||
              - essentially the same as $ git rebase master | 
				
			|||
 | 
				
			|||
            - Useful if e.g. a hotfix has been pushed to a stable branch | 
				
			|||
            - Might need to clean such commits before merging | 
				
			|||
             | 
				
			|||
 | 
				
			|||
@ -0,0 +1,15 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏━╸┏━┓┏━┓┏┳┓┏━┓╺┳╸   ┏━┓┏━┓╺┳╸┏━╸╻ ╻   ┏┓     ┏━┓┏━┓┏━┓╻  ╻ ╻ | 
				
			|||
              ┣╸ ┃ ┃┣┳┛┃┃┃┣━┫ ┃ ╺━╸┣━┛┣━┫ ┃ ┃  ┣━┫   ┃╺╋╸   ┣━┫┣━┛┣━┛┃  ┗┳┛ | 
				
			|||
              ╹  ┗━┛╹┗╸╹ ╹╹ ╹ ╹    ╹  ╹ ╹ ╹ ┗━╸╹ ╹   ┗━┛    ╹ ╹╹  ╹  ┗━╸ ╹  | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            In certain situations it might be sensible to send commits per mail | 
				
			|||
 | 
				
			|||
            - $ git format-patch -1 <commit-ish> | 
				
			|||
            - colleague does not need to checkout your branch | 
				
			|||
 | 
				
			|||
            - $ git apply <filename> | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
              ┏┳┓┏━┓┏━┓┏━╸   ┏━┓┏┓╻╺┳┓   ┏┳┓┏━┓┏━┓┏━╸ | 
				
			|||
              ┃┃┃┃ ┃┣┳┛┣╸    ┣━┫┃┗┫ ┃┃   ┃┃┃┃ ┃┣┳┛┣╸  | 
				
			|||
              ╹ ╹┗━┛╹┗╸┗━╸   ╹ ╹╹ ╹╺┻┛   ╹ ╹┗━┛╹┗╸┗━╸ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            - git notes, | 
				
			|||
            - commit signing, | 
				
			|||
            - merge strategies, | 
				
			|||
            - git worktree, | 
				
			|||
            - refs, | 
				
			|||
            - git reflog, | 
				
			|||
            - porcelain commands and scripting, | 
				
			|||
            - the power of .gitconfig, | 
				
			|||
            - hooks on the server, | 
				
			|||
            - multiple remotes, | 
				
			|||
            - etc. | 
				
			|||
 | 
				
			|||
 | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue