Synthesis about git
Tags: github, git
Published: 2020-05-03 08:09:23

# Synthesis about git

> New key word

- synthesis: tổng hợp
- nature: bản chất

## Remote

To add a new remote, use the `git remote add` command on the terminal, in the directory your repository is stored at.

The `git remote add` command takes two arguments:

- A remote name, for example, `origin`
- A remote URL, for example, `https://github.com/user/repo.git`

For example:

```
$ git remote add origin https://github.com/user/repo.git
# Set a new remote

$ git remote -v
# Verify new remote
> origin  https://github.com/user/repo.git (fetch)
> origin  https://github.com/user/repo.git (push)
```

## Branch

### 1. Branching off (copy)

```
$ git checkout -b <new_working_branch>
```

### 2. Listing branches

```
$ git branch
```

### 3. Switching branch

```
$ git checkout <branch_name>
```

### 4. Remove branch on local

```
$ git branch -D <branch_name>
```

### 5. Remove branch on remote

```
$ git push --delete origin <branch_name>
```

## Status

```
$ git status
```

## Diff

show status change each file

```
$ git diff
```

If files have added (committed), use

```
$ git diff --cached
```

> Note, add color to see easy and cool

```
$ git config --global color.ui true
```

## Commit 

```
$ git add .
```

or 

```
$ git add -A
```

`add .` and `add -A ` add all change into committed list.

just add specific file need to commit, use

```
$ git add <file_path>
```

Reset commit, not create new commit, use

```
$ git commit --amend -m "an updated commit message"
$ git commit --amend --no-edit
```

## Log

```
$ git log
```

Press [Enter] to scroll the list till the end or press q to quit

To search commit logs matching a specific pattern, use:

```
$ git log -g --grep=<pattern>
```

- Add flag –oneline to show on line 1 commit.
- Add flag –graph to show relationship parent-child


## blame 

Check who is author of line in 1 file (and commit hash id, time)

```
$ git blame <file_path>
```

## Push 

After to commit, push these changes on origin (remote repo)

```
$ git push origin <branch_to_push>
```

Use push to delete remote branch (note have ":")

```
$ git push origin :<branch_to_remove>
```

## Tag

Tag version

```
$ git tag -a <tag_name> -m 'message'
```

Or

```
$ git tag <tag_name>
```

Push tag on remote repo

```
$ git push origin <tag_name>
```

Delete tag 

- Delete in local first: $ git tag -d <tag_name_to_delete>
- Delete in remote: $ git push origin -delete <tag_name_to_delete>

## Merge

Use to join 2 or more commit from difference branch

```
$ git merge <branch_to_merge>
```

## Fetch
Use to update branch origin in local with branch similar on remote repo

```
$ git fetch origin <branch_on_remote_repo_to_fetch>
```

## Pull

Nature is `fetch` before `merge`

```
$ git pull origin <branch_on_remote_repo_to_pull>
```

Or add flag `-rebase` to `fetch` before `rebase`

```
$ git pull --rebase origin <branch_on_remote_repo_to_pull>
```

## Reset

Point local repo to old commit in history 


```
$ git reset HEAD
```

Or

```
$ git reset <commit_hash_id>
```

> Note: Use $ git reflog to show list <commit_hash_id>

Flag `–hard`: destroy all change

```
$ git reset --hard
$ git reset <commit_hash_id> --hard
```

After reset can update changes on remote repo to override history commit of this branch

```
$ git push --force origin <remote_branch>
```

> Note: you should limit the use of operations that change the commit history

## Revert

Used to reverse the changes of an old commit in history, essentially creating a new commit with the opposite change from the selected commit.


This is the safest way to revert changes because the commit history is completely unchanged, and the revert is also logged.

```
$ git revert <commit_hash_id>
```


References

- https://codeboy.info/git-basic
- https://help.github.com/en/github/using-git