[Git] 最優秀的版本控制

Shi-Xun
JoeLifeStory
Published in
7 min readJun 13, 2019

▶ 終端機基本指令

▶ 環境設定

先安裝本地數據庫 在終端機輸入

git init

▶ GIT 基礎指令

當你有檔案需要被Git備份起來時 輸入

git add . 

將檔案提交到索引(staging area) 並使用

git status  查詢你上傳到索引的檔案

★ TIPS小幫手:

git add . 點則代表是所有檔案都提交

也可提交單一檔案 EX:

git add index.html

查看當前 git 遠端資料

vi .git/config

修改上一次提交資訊

git commit --amend [-m "xxx"]
可直接修改 如果沒有[-m "xxx"]
將會進入VIM修改提交資訊

修改歷史資訊

git rebase -i [提交流水碼前8位]

輸入進入 VIM 模式 將pick 改成 reword/r 然後退出選擇模式 (ESC + :wq)

就會進入該檔案 VIM 模式 修改commit 之後儲存退出 就完成修改了

當你做到一半時,如果有急件插入要修改 bug 卻又不想把未成品提交的時候可以將當前紀錄先隱藏起來

git stash當急件完成後 將藏起來的檔案給取出來
git stash pop

當你想查詢哪些人修改了這個檔案

git blame [檔案名稱]

▶Fast-forward 快轉模式

平常我們再合併分支的時候,會使用

git merge [分支名稱]

其實我們會注意到,下面會有一個 Fast-forward 快轉模式

而快轉模式會直接將合併分支的那條線,快速拉到你合併的那條上

即使你中間有三個版本差,也會直接併到同一個最新版本

但有時候你正式機上有出現bug時,你沒辦法第一時間知道這個新的版本合併了幾個

git merge [分支名稱] --no-ff

透過取消快轉模式,你會發現中間合併了哪些開發版本。

▶ Git log

git log --graph 查詢歷史紀錄並用簡單的圖形化顯示ㄈㄣgit log --oneline 提交紀錄用一行顯示 流水碼及提交資訊git log --all 顯示所有提交紀錄git log -p 查詢歷史提交紀錄差異可單用以外也可以合併再一起使用git log --graph --oneline --allgit reflog 可以查詢所有 git 指令得操作 如果不小心刪除了可以透過這個救回來

▶ 超級指令大全

➩ 基礎設定

查詢版本git version查詢設定列表git config — list設定姓名git config — global user.name “<你的名字>”設定emailgit config — global user.email “<你的email>”

↪ 新增本地/遠端數據庫

在本地資料夾新增數據庫git init複製遠端數據庫git clone <遠端數據庫網址>

↪ 增加/刪除檔案

增加檔案進入索引git add <檔案名稱>增加全部檔案進入索引git add .查詢狀態git status顯示歷史紀錄git log將索引提交到數據庫git commit -m ‘<更新訊息>’

➩ 還原指令

還原工作目錄與索引,會跟最後一次 commit 保持一樣git reset — hard全部檔案取消索引git reset HEAD 單一檔案取消索引git reset HEAD <檔案名稱>切換到某次 commit 紀錄git checkout <commit number>將單一檔案或資料內容變更回最後一次 commit 內容git checkout -- <檔案名稱>刪除最近一次 commitgit reset --hard “HEAD^”還原到上一次的 commit 狀態 git reset --hard ORIG_HEAD刪除最近一次 commit,但保留異動內容git reset — soft “HEAD^”commit 後發現有幾個檔案忘了加入進去,想要補內容進去時git commit — amend

↪ 分支

顯示所有本地分支git branch新增分支git branch <分支名稱>切換分支git checkout <分支名稱>合併指定分支到目前的分支git merge <分支名稱>刪除分支git branch -d <分支名稱>

➩ 遠端數據庫操作

複製遠端數據庫git clone <遠端數據庫網址>查詢遠端數據庫git remote <遠端數據庫網址>將本地分支推送到遠端分支git push <遠端數據庫名稱> <遠端分支名稱>將遠端分支拉下來與本地分支進行合併git pull

↪ 標籤

查詢標籤git tag查詢詳細標籤git tag -n刪除標籤git tag -d <標籤名稱>新增輕量標籤git tag <標籤名稱>新增標示標籤git tag -am “<備註內容>” <標籤名稱>

↪ 暫存

暫時儲存當前目錄git stash瀏覽 stash 列表git stash list還原暫存git stash pop清除最新暫存git stash drop清除全部暫存git stash clear

可以查看更多 Git 上得用法

https://gitbook.tw/interview 高見龍大大的文章

▶ 實際發生狀況

狀況一:權限不足

當我原本需要從正式環境將開發完的上線版本 git pull下來時
卻報錯,報錯的原因如下
remote: Counting objects : 20, done
remote: Compressing objects: 100% (11/11) done.
remote: Total 11 (delta 8), reused 0 (delta 0)
error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed
那後來查一下原因是,東西有從 remote 端載下來,但是 .git/objects 沒有權限可以寫入那我們這時候需要到 .git/object 給予權限
sudo chmod 777 -R .git/objects
chmod能改變權限,-R是目錄下所有文件,777就是最高權限(讀,寫,執行),
chmod -R 777 * 意思就是將當前目錄下所有文件都给予777權限
那這個權限給多少,就看當前狀況來決定
之後再執行 git pull 就可順利操作
那怎麼發生的原因並不確定,因為之前可正常操作,但突然發生權限問題,
推斷可能是 git server 上的權限有出現問題吧?

--

--