# Git Tutorial Overview ###### tags: `tutorials` > For those who only know `git add` `git commit` `git push` ## Git config setup ## Basic concept ### `git log` usage ```bash= $ git log --author="acebenson0704" $ git log --grep="add" # commit message contains "add" $ git log -S "content" # commit file content conains "content" $ git log --since="9am" --until="12am" $ git log --oneline $ git log --graph $ git log --all ``` ### Rename, delete, edit files #### `git mv <file>` ```bash= $ mv <file> $ git add <file> ``` #### `git rm <file>` ```bash= $ rm <file> $ git add <file> ``` #### `git rm --cached <file>` Only remove `<file>` from git, the file still retains in folder ```bash= $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) deleted: <file> Untracked files: (use "git add <file>..." to include in what will be committed) <file> ``` #### `git restore <file>` Discard changes in working directory, old version use `checkout` ```bash= $ git checkout <file> $ git checkout -- <file> ``` :::info why checkout work? ```bash= git checkout <commit> <file> ``` update current `<file>` with `<commit>` version (checkout that version to here) ::: #### `git restore --staged <file>` Unstage (staging area -> working directory), or using `reset` ```bash= $ git reset HEAD -- <file> ``` :::info why reset work? * --mixed(default): retain in working directory * --soft: retain in staging area * --hard: discard `reset` is more like **go to** ::: :::success The difference between `git checkout` and `git reset` > `checkout` only change HEAD > `reset` change HEAD and branch ::: ## Commit ### Edit last commit revise message ```bash= $ git commit --amend -m "New Message" ``` add file to last commit ```bash= $ git add <file> $ git commit --amend --no-edit # no edit message ``` > Create a new commit object (new SHA value) ## Files in `.git` folder ### Objects: Blob, Tree, Commit Tag > example folder structure ``` / │ README.md │ index.html └───public │ image1.png └───image2.png ``` ```graphviz digraph gitfiles { Blob1 [label="Blob1|image1.png" ,fillcolor=brown1, fontcolor=White, fontsize=24, shape=Mrecord, style=filled] Blob2 [label="Blob2|index.css" ,fillcolor=brown1, fontcolor=White, fontsize=24, shape=Mrecord, style=filled] Blob3 [label="Blob3|index.js" ,fillcolor=brown1, fontcolor=White, fontsize=24, shape=Mrecord, style=filled] Tree1 [label="Tree1|public/" ,fillcolor=darkgoldenrod1, fontcolor=White, fontsize=24, shape=Mrecord, style=filled] Tree2 [label="Tree2|/" ,fillcolor=darkgoldenrod1, fontcolor=White, fontsize=24, shape=Mrecord, style=filled] Tree3 [label="Tree3|/" ,fillcolor=darkgoldenrod1, fontcolor=White, fontsize=24, shape=Mrecord, style=filled] Commit1 [label="Commit1" ,fillcolor=darkgreen, fontcolor=White, fontsize=24, shape=Mrecord, style=filled] Commit2 [label="Commit2" ,fillcolor=darkgreen, fontcolor=White, fontsize=24, shape=Mrecord, style=filled] Commit2->{Tree3} Commit1->Tree2 Tree1->Blob1 Tree1->Blob2 Tree2->Tree1 Tree2->Blob3 {rank=same; Commit2 Commit1} {rank=same; Blob1 Blob2 Blob3} } ```
{"metaMigratedAt":"2023-06-16T22:11:55.699Z","metaMigratedFrom":"Content","title":"Git Tutorial Overview","breaks":true,"contributors":"[{\"id\":\"29bcc883-2696-4c4a-b9b9-4f5f52c23449\",\"add\":5506,\"del\":2281}]"}
Expand menu