喵筆記:GIT

基本概念

  • Working directory 工作目錄、工作區
  • Staged 準備區
  • Repository 版本庫 (本地端)
  • Remote repository 版本庫(遠端)

設定

git config --global user.name "你的名字"
git config --global user.email "你的@電子郵件地址"
`</pre>

## 常用操作

### 查看狀態

絕大多數不曉得發生什麼事情的時候,就查查看...

<pre>`git status
`</pre>

### 查看版本紀錄

<pre>`git log
`</pre>

查看紀錄有許多可以調整修飾的,例如:

<pre>`git log --graph
git log --graph --pretty=short --date-order
git log --graph --pretty=oneline --abbrev-commit
git log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&lt; %an&gt;%Creset' --abbrev-commit --date=relative
`</pre>

### 查看操作記錄

<pre>`git reflog
`</pre>

### 比對差異

比對工作區與最新版本差異

<pre>`git diff
`</pre>

<pre>`git diff 檔案
`</pre>

比對版本與版本間差異

<pre>`git diff 版本號 版本號 檔案
`</pre>

比對準備區與最新版本差異

<pre>`git diff --cached
`</pre>

比對工作區與某版本差異

<pre>`git diff 版本
`</pre>

常用的詞:
  • HEAD 最新版本
  • -- 工作區版本

    初始化

    開始一個空的版本庫

    `git init
    `

    由既有的遠端版本庫複製

    `git clone 遠端庫路徑 本地路徑
    `

    例如

    `git clone https://github.com/Filitov/mydemo1.git .
    `
    `git clone git@github.com:Filitov/mydemo1.git .
    `

    版本管理操作

    加入檔案 add

    將檔案加入++準備區++,列入追蹤

    `git add 檔案
    `
    `git add test123.txt
    `

    將全部修改檔案加入準備區

    `git add .
    `

    提交修改 commit

    確認(提交)準備區 到 版本庫

    `git commit -m "本次修改說明"
    `

    若是懶得一個一個add,可以加上-a全部加入後提交

    `git commit -am "本次修改說明"
    `

    刪除檔案

    指示++準備區++刪除檔案,不再追蹤

    `git rm 檔案
    `

    會刪除++工作目錄++中的檔案,並在++準備區++中設定將要移除,事後記得要提交

    搬動更名檔案

    設定++準備區++搬移(或更名)檔案

    `git mv 檔案 新檔案
    `

    事後記得要提交

    還原加入

    將檔案移出++準備區++

    `git reset HEAD 檔案
    `

    如果將檔案git add到++準備區++了,可以這樣還原。

    放棄修改

    若是在工作目錄改到一半不滿意,決定放棄重來,可如此回復工作區檔案。

    `git checkout -- 檔案
    `

    -- 一定要打,不然會是更改++分支++
    這指令執行後,如果準備區有該檔案,會回到準備區版本,不然,回到版本庫的版本。

    時光追溯

    回到特定版本

    `git reset --hard 版本號
    `

    回到版本庫最新版本

    `git reset --hard
    `

    `git reset --hard HEAD
    `

    回到版本庫上一版本(相當於取消前一次commit)

    `git reset --hard HEAD^
    `

    回到版本庫上上一版本

    `git reset --hard HEAD^^
    `

    前面例子都是用 --hard ,這會將工作區與版本庫都設定到指定版本,如果改用 --soft 就會保留該版本至今的修改在工作區。

    分支操作

    查看分支狀況

    `git branch
    `
    `git branch -avv
    `

    新增分支

    `git branch 分支名
    `

    切換分支

    `git checkout 分支名
    `

    建立新分支,並切換到新分支:

    `git branch 分支名
    git checkout 分支名
    `

    上面哪兩行可以直接寫作

    `git checkout -b 分支名
    `

    合併分支 merge

    合併分支(到此分支)

    `git merge 來源分支名
    `
    `git merge -m "合併說明" 來源分支名
    `
    `git merge --no-ff -m "合併說明" 來源分支名
    `

    merge如果遇到衝突,修改完,再 addcommit

    `git add 衝突修正完的檔案
    git add 衝突修正完的檔案
    git commit -m '一夜無語'
    `

    合併分支 rebase

    合併分支(到此分支分岔前,然後再併入本分支修改)

    `git rebase 母分支
    `

    例如

    `git rebase origin
    `

    rebase如果遇到衝突,修改完,再 addrebase

    `git add 衝突修正完的檔案
    git add 衝突修正完的檔案
    git rebase --continue
    git rebase --abort
    `

    刪除分支

    刪除已合併分支

    `git branch -d 分支名
    `

    刪除分支

    `git branch -D 分支名
    `

    遠端遠端版本庫

    加入遠端庫

    為本地的版本庫加入遠端版本庫的路徑,這樣就有集中的遠端版本庫可以多人共用。

    `git remote add 遠端庫名稱 遠端庫路徑
    `

    例如

    `git remote add origin https://github.com/Filitov/mydemo1.git
    `
    `git remote add origin git@github.com:Filitov/mydemo1.git
    `

    推送 push

    將版本庫 推送到 遠端庫

    `git push 遠端庫名稱 本地分支名稱
    `

    例如

    `git push origin master
    `

    若是已經設定好upstream,可以直接

    `git push
    `

    第一次推送的時候可以用 -u 順便建立upstream

    `git push -u 遠端庫名稱 本地分支名稱
    `

    例如

    `git push -u origin master
    `

    拉回 pull

    由遠端庫 拉下到 版本褲

    `git pull origin master
    `

    當然…若是設定好,也可以…

    `git pull
    `

    克隆(複製)版本庫 clone

    由遠端庫複製到本地庫,並建立一切

    `git clone 遠端庫路徑
    `

    例如:

    `git clone https://github.com/Filitov/mydemo1.git .
    `
    `git clone git@github.com:Filitov/mydemo1.git .
    `

    差不多相當於

    `git init
    git remote add origin git@github.com:Filitov/mydemo1.git
    git pull origin master
    git branch --set-upstream-to=origin/master master
    `

    分支與遠端庫

    新建遠端庫分支

    建立新分支,並切換到新分支,然後推送到遠端庫建立遠端庫分支

    `git checkout -b oooxxx
    git push -u origin oooxxx
    `

    切換遠端庫分支

    切換到新分支,並與遠端庫連結

    `git checkout -tb oooxxx origin/aabbcc
    `

    若出現沒有該分支,但確定有,則應該是缺少參考。

    取回遠端庫的物件參考(分支標籤等)

    `git fetch origin
    `

    分支仍舊可以逕行push/pull,若出現沒有upstream…

    `git branch --set-upstream-to=origin/分支名 分支名
    `

    刪除遠端分支

    `git push git push origin :oooxxx
    `

    下載遠端分支合併到目前分支

    `git pull origin oooxxx
    `

    標籤操作

    查閱標籤

    `git tag
    git show 標籤名稱
    `

    加上標籤

    `git tag 標籤名稱
    `
    `git tag 標籤名稱 提交編號
    `
    `git tag -a 標籤名稱 -m "標籤說明" 提交編號
    `

    刪除標籤

    `git tag -d 標籤名稱
    `

    刪除遠端標籤

    `git push origin :refs/tags/標籤名稱
    `

    推送標籤到遠端

    `git push origin 標籤名稱
    `

    推送全部標籤到遠端

    `git push origin --tags
    `

    暫存 stash

    `git stash
    git stash apply
    git stash list
    git stash apply stash@{1}