[ week 1 ] Git 新手入門


Posted by vick12052002 on 2020-06-15

簡介

Git為分散式版本控制系統,是為了更好管理Linux內核而開發的。

一人開發:一份報告、文件有不同版本,為了要保留每個版本,就是在做版本控制
團隊開發:很多人共同開發一個檔案,如果有兩個人同時進行編輯的話,先進行編輯的人的修改內容會被覆蓋,相信大家都有這樣的經歷。這時候就容易產生有錯誤。

Git的版本控制系統就是為了解決這樣的問題而開發的。

優點:

1.有系統的存放每個版本
2.不需要儲存過多的檔案(備份)
3.可任意讀取之前的版本


常用指令

初始化

到任何一個新的目錄都必須先初始化,該目錄下有 .git 的資料夾,就代表該目錄可使用 git 版本控制,查看 git 目前的狀態,可以使用 git status

git init (folder) git 初始化,該目錄下會建立 .git 檔案並建立新的folder中,有.git檔案

git 有三個層級 :local < global < system

git config <user.name & email>: git 規定一定要有 user.name & email 才可以順利執行版控,所以在git init後,要git config 設定使用者與信箱

範例

git config --global user.name "your name"
git config --global user.email "youremail"

git config --list (--local /global /system ):列出目前有效的設定( 可選擇層級)


為什麼要設帳號與email?
擁有 user.name & email 的資訊,未來在 commit 等等都會留存資料,在團體開發時,若有衝突 Conflict,較快可抓到兇手(誒~不是拉),是比較好團隊溝通


四大區域 ( workspace 工作目錄 , staging暫存區 ,local 本地端 , remote 遠端)

git

我稱它為四大區域,簡單可以把它想像成:

workspace:我現在的位置
staging:暫存區(放那些準備要去新版本資料的地方)
local repo:本地端的資料夾( PC 上)
remote repo:遠端的資料夾(GitHub)

每一個 commit ,都可以想像成創立一個「新版本」的資料夾 ,在 commit 前的 add 就是這個版本的檔案,檔案可以有很多個


必學指令

git status git 暫存區目前狀態
git add ( <file> / . ) :將 workspace 中的檔案加入到 staging 暫存區 ( . 代表全部檔案都加入)
git rm --cached <file>: 將暫存區中的檔案退回工作區(不被追蹤的狀態)
git commit新建一個版本,將 staging 暫存區 的檔案加入local repo 本地資料庫,如果沒帶參數,他會跳到 Vim 編輯器,可輸入比較長的敘述(備註:新增了什麼功能等)
git commit -m “備註”新建一個版本,m 為 messerge 的意思,輸入較短敘述(備註)
git commit -am:更改檔案內容且檔案已加入到 local repo 本地資料庫,可跳過暫存區直接 commit
git commit --amend:可用來更改最新commit的檔案“標題與內容”,這邊指的標題與內容僅是上傳的標題

git log:列出所有 commit 過的紀錄
git diff (A B):比較 暫存區與工作區 的比較差異/ 比較A、B版的差異
git diff --cached:比較暫存區與HEAD比較差異
git cat-file -p _____:查看__id的內容
git show ( ID ):查看最新commit修改的log 包含異動內容//若要指定 就後面加個ID

git log --all :log 全部的
git log --all --graph 顯示有線的log紀錄
git log --oneline:可縮排成一行,較好閱覽
git reflog 可以查看所有 commit 紀錄與動作

log 與 show 差異

log 所有 commit 過的紀錄
show 是最新commit的修改,包含異動內容

git add -p:選取部分內容加入到暫存區
(按s可以切割成更小區塊,y 加入到暫存區,e取消到暫存區)
以上用法適用於該檔案,已commit過到local respository才可

.gitignore 用法

比較機密的專案或沒有實質幫助的資料,不想放在 git 中備份的,就可新增.gitignore的檔案,並在內文打上不要需要備份的檔名, git 皆自動不將它儲存
.gitignore範例


分支多重要

git branch :產生分支
git branch < new-branch-name > -m: 重新命名目前分支的名稱
git switch <branch>:切換分支
git branch -v:顯示目前所有分支與當前 commit
git branch --list:顯示目前所有分支
git branch <branch-name> -d:刪除分支
git branch <branch-name> commit id:建立dev分支在特定的commit 上

要跳到別的分支,可使用 checkout

merge 跟 rebase 差異

merge :我拉別人-我在主線 拉分支
rebase :別人拉我 -我跳到分支 拉主線

fast-forward :快進(只需要移動分支)。

rebase的概念

rebase的概念

no fast-forward :一定會產生commit ,因此會有節點,優於未來尋找分支方便。

merge的概念

merge的概念

進階(不一定要記)

git stash save 命名 :將目前未commit 檔案收藏起來
git stash list:列出暫存的項目,先進後出
運用git stash pop可將收藏項目推出來


切換狀態

切換
git revert (-n):復原 commit ,重做一個的意思 (不會重送出commit)
revert 的恢復是有順序性
git checkout改變目前的版本/將 HEAD 轉移到指定 branch 上

  • 有分 file - 工作目錄重設
  • commit / branch - 工作目錄, HEAD 重設

git reset 有分三種--hard/--mixed/--soft 三者皆會HEAD位置&目前分支重設,預設為--mixed

hard & mixed 的差異

差異為 hard 工作目錄區也會一併重設

git cherry-pick commit :擷取某個commit套用在目前分之上
git tag :標籤(跟隨版本紀錄)
gitk --all:git 內建陽春版圖形化介面

以上內容參考
1.偷米齊巴哥-簡單介紹GIT版本控制-Part1-4
2.[GIT101] Git 超新手入門


#Git #branch







Related Posts

用 Python 自學程式設計:程式設計思維入門

用 Python 自學程式設計:程式設計思維入門

滲透測試重新打底(6)--Metasploit與Port Forwarding簡介

滲透測試重新打底(6)--Metasploit與Port Forwarding簡介

[ 筆記 ] Express 01 - 基本架構 MVC

[ 筆記 ] Express 01 - 基本架構 MVC


Comments