# So You Think You Know Git Part 2 - DevWorld 2024

## Switch and Restore

Wrapper around the `checkout` command to make more sense. You can do:

- `git switch branch` instead of `git checkout bracnh`
- `git restore file.txt` instead of `git checkout file.txt`

![](Pasted%20image%2020240417084933.png)

## Git Hooks

![](Pasted%20image%2020240417084959.png)

useful ones:

![](Pasted%20image%2020240417085036.png)

uses:

- Commit message formatting
- package install
- update ctags
- submodule status
- tabs or spaces
- linting
- large files
- test passes

Helpers (installable external tools):

- pre-commits
- husky

## Attributes

run files through intermediates and diff that:

```bash
echo '*.png diff=lexif' >> .gitattributes
git config diff.exif.textconv exiftool
``` 

## Fixup Commits

`git commit --fixup=<commit>`
`git rebase --autosquash`

## Rebasing Stacks

move dangling branches reference when doing a rebase

`git rebase --update-refs`

## Scaling Git

top level command `scalar`, it's only used to clone huge repositories.

## Worktrees

- working on more than one branch at a time
- provide a new working directory to each branch

![](https://www.youtube.com/watch?v=Md44rcw13k4)
