# Git Commands

## Random Ideas

[Kart: DVC for geospatial and tabular data. Git for GIS](https://kartproject.org/), [Discussion](https://news.ycombinator.com/item?id=38073512#git), [Go to Post from 2023-10-30T20:40:06](https://social.lansky.name/@hn50/111325898767760054)

[Use KeePassXC to sign your Git commits](https://code.mendhak.com/keepassxc-sign-git-commit-with-ssh/)

## Git Commands and Examples

Create a new branch locally within an already cloned repository:

```bash
git checkout -b <branch-name>
```

Delete a local branch:

```bash
git branch -d <branch-name>
```

Rebase onto the main branch:

```bash
git fetch
git rebase origin/main
git push origin HEAD -f
```

Abort a rebase:

```bash
git rebase --abort
```

Stash changes:

```bash
git stash
git stash pop
```

Revert a commit:

```bash
# Should work if only 1 commit was made
git reset --soft HEAD~1

# More forceful approach:
git revert cb7cf15b54ff09495201244b070d18d96d4703ce
git reset --hard HEAD~2
```

Show changes between two tags:

```bash
# Tag from previous version
git tag -a v0.1.0 -m "Release version 0.1.0"

# Add changes
git commit -am "add hint for change log"
# and more

# Add final tag for version
git tag -a v0.2.0 -m "Release version 0.2.0"

# Show diff between tags
git log v0.1.0..v0.2.0 --no-merges --format="%h - %s" --date=short
```

Git diff log between commits:

```bash
git log 79e28d9cef4cc777afc9e5b2569a5d34d9331867..6888fd61ae9d5744effcf27620a645e1750cbafc --no-merges --format="%h - %s (%an, %ad)" --date=short
```

Debug SSH connection via Git:

```bash
GIT_SSH_COMMAND="ssh -v"
git pull
unset GIT_SSH_COMMAND
```

Add executable flag on Windows:

```bash
git update-index --chmod=+x git_mirror.sh
```

Check the remote branch of a cloned repository and change it:

```bash
git remote -v

git remote set-url origin xwr@vs-ssh.visualstudio.com:v3/xwr/jambor.pro/app-docker-compose

git remote -v

for branch in $(git branch -r | grep -v '\->'); do
  git checkout ${branch#origin/}
  git push -u origin HEAD
  git push --tags origin
done
```

Renaming branches:

```bash
# Delete remote branch
git push origin --delete wikiMaster

# Delete local branch
git branch -d wikiMaster

# Move branch
git branch -m main wikiMaster

# Push
git push origin HEAD
```
