用資料夾比喻 Git 的原理
- 需要新版本:開一個資料夾
- 不想加入版本控制:不要加入資料夾
- 避免版本號衝突:用看似亂數的東西當作資料夾名稱
- 知道最新版本:用一個新檔案來存放版本資料
- 知道歷史軌跡:用一個新檔案來記錄歷史軌跡,知道亂數檔案名先後順序
Git 版本控制指令
git init : 初始化,我們要在這個資料夾下對此專案做版本控制囉
git add:加入版本控制
git add code.js:將 code.js 加入版本控制
git add . : 將全部檔案加入版本控制 (Staged 放入暫存區,還沒正式建成新版本)
git rm --cached code.js:將 code.js 取消版本控制 (變回 Untracked, 沒加入版本控制狀態)
git commit:建立一個新版本
git commit -m "first commit":給予 commit message 才能建立新的版本
git commit -am "second commit":為 git add + git commit ,用於更改的檔案時。新加入的檔案不適用,需自己先 git add 再 git commit。
git commit 的時候出現錯誤,跳出了一個要你設定帳號跟姓名的畫面,請輸入以下指令:
git config --global user.name "your name"
git config --global user.email "youremail"
git log: 檢查歷史紀錄
git log --oneline:顯示簡短的歷史紀錄
git checkout:回到某版本 或是 切換到某分支去
git checkout 某版本號(前七碼也可):切換回此版本號的狀態
git log:只能看到某本版號當時的歷史狀態
git checkout master:切換回最新版本號的狀態
.gitignore:要忽略的檔案
- 建立 .gitignore 檔 :
touch .gitignore
- 進入
vim 編輯器內打:
vim .gitignore
按 i 編輯,輸入想忽略的檔案名稱
跳出後,打 :wq 存檔離開
git diff:在 commit 之前,看見檔案前後的差異
git branch:切換版本號 或是 切換到某分支去
-
為什麼我們需要 branch ?
因為 branch 可以讓我們平行時空,各做各的事,在最後合併兩條分支變成一個最終版本。
-
git branch -v:檢查目前有哪些 branch & 在哪條 branch 上
-
git branch 123:建立命名為 123 的分支
-
git branch -d 123:刪除名叫 123 的分支
-
git checkout 123:從當前分支切換到名叫 123 的分支去
-
git merge 123:將 123 分支合併進來~
如果在 master 主支上,執行 git merge 123 ,表示 123 分支將合併進 master 主支內。
遇到衝突怎辦?
手動解決~
- CONFLICT:Merge conflict in XX檔
- git status 檢查哪個檔案 unmerged
- 進入 XX檔
- 看見以下內容,選擇要更改的內容,最後用 git commit -am "新檔名" 儲存。
<<<<<< HEAD (表示目前所在的 branch)
xcvvbnm (內容)
====== (分隔線)
>>>>>> new-feature (分歧的支線)
djfoieejfioe (內容)
Git狀況劇
我 commit了,但我想改 commit message
git commit --amend:可更改 commit message
我 commit了,可是我後悔了
git reset HEAD^ = git reset HEAD^ --soft: 上一個 commit 版本不要了,但內容還是要,只想將內容做一些修正。修正後,再 commit 回去。上一個 commit 會直接被修正的取代掉。
git reset HEAD^ --hard: 直接刪除上一個 commit 版本,上一個 commit 版本內容也一併都被刪除掉。
我還沒 commit,但我改的內容我不想要了
git checkout -- 檔案名稱:此檔案回復成前次內容
git checkout -- .:將有修改但未 commit 的所有檔案都回復成前一次的內容
我想改 branch 的名字
git branch -m 想改成的新名稱: 先切換到要修改名稱的分支,再輸入 git branch -m 想改成的新名稱即可修改
想把遠端的 branch 抓下來
git checkout 分支: 換到某條分支 或 將遠端的分支抓下來
用資料夾比喻 Git 的原理
Git 版本控制指令
git init: 初始化,我們要在這個資料夾下對此專案做版本控制囉rm -r .git:如欲刪除版本控制git status:看 git 版本控制的狀態git add:加入版本控制git add code.js:將 code.js 加入版本控制git add .: 將全部檔案加入版本控制 (Staged 放入暫存區,還沒正式建成新版本)git rm --cached code.js:將 code.js 取消版本控制 (變回 Untracked, 沒加入版本控制狀態)git commit:建立一個新版本git commit -m "first commit":給予 commit message 才能建立新的版本git commit -am "second commit":為 git add + git commit ,用於更改的檔案時。新加入的檔案不適用,需自己先 git add 再 git commit。git log: 檢查歷史紀錄git log --oneline:顯示簡短的歷史紀錄git checkout:回到某版本 或是 切換到某分支去git checkout 某版本號(前七碼也可):切換回此版本號的狀態git log:只能看到某本版號當時的歷史狀態git checkout master:切換回最新版本號的狀態.gitignore:要忽略的檔案.gitignore步驟:touch .gitignorevim編輯器內打:git diff:在 commit 之前,看見檔案前後的差異git branch:切換版本號 或是 切換到某分支去
為什麼我們需要 branch ?
因為 branch 可以讓我們平行時空,各做各的事,在最後合併兩條分支變成一個最終版本。
git branch -v:檢查目前有哪些 branch & 在哪條 branch 上git branch 123:建立命名為 123 的分支git branch -d 123:刪除名叫 123 的分支git checkout 123:從當前分支切換到名叫 123 的分支去git merge 123:將 123 分支合併進來~如果在 master 主支上,執行 git merge 123 ,表示 123 分支將合併進 master 主支內。
Git狀況劇
我 commit了,但我想改 commit message
git commit --amend:可更改 commit message我 commit了,可是我後悔了
git reset HEAD^ = git reset HEAD^ --soft: 上一個 commit 版本不要了,但內容還是要,只想將內容做一些修正。修正後,再 commit 回去。上一個 commit 會直接被修正的取代掉。git reset HEAD^ --hard: 直接刪除上一個 commit 版本,上一個 commit 版本內容也一併都被刪除掉。我還沒 commit,但我改的內容我不想要了
git checkout -- 檔案名稱:此檔案回復成前次內容git checkout -- .:將有修改但未 commit 的所有檔案都回復成前一次的內容我想改 branch 的名字
git branch -m 想改成的新名稱: 先切換到要修改名稱的分支,再輸入git branch -m 想改成的新名稱即可修改想把遠端的 branch 抓下來
git checkout 分支: 換到某條分支 或 將遠端的分支抓下來