# FAQ - git

#### How do I undo 'git add' before commit?

`git reset`

.<https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoadd>

#### Reset local repository branch to be just like remote repository HEAD

`git reset HEAD`

.<https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-emgitresetemltmodegtltcommitgt>

#### How do I checkout a remote Git branch

`git fetch j143 <branch-name>`

#### How do I delete a Git branch locally and remotely?

`git branch -d -r origin/branch-name`

.<https://git-scm.com/docs/git-branch#Documentation/git-branch.txt-Deleteanunneededbranch>

#### How to change URI for a remote git repository

`git remote set-url --add <name> <new-url>`

.<https://git-scm.com/docs/git-remote#_synopsis>

#### How do I push a new local branch to a remote git repository and track it?

`git push --set-upstream origin new-local-branch`

#### How do I revert a git repository to previous commit?

`git reset commit-SHA --hard`

#### How can I add empty directory to a git repository?

We cannot add empty directory. But, we need to keep a file `.gitkeep` or `.gitignore` or just `.keep` file with empty contents. For example, `touch .keep` would create a `.keep` file.

.<https://git-scm.com/docs/git-add#Documentation/git-add.txt-ltpathspecgt82308203>

specifying `git add <dir>` would add `dir/file1` and `dir/file2`.

#### Unstage files?

```bash
> git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   install.md
        modified:   MultiLogReg.dml
        new file:   MLogRegTest.java

> git restore --staged MultiLogReg.dml MLogregTest.java

> git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   install.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   MultiLogReg.dml

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        MLogregTest.java
        
> git stash

> git commit -m "update only install.md file"
```
