Git Bash常用指令 - UtorLin/Git GitHub Wiki

設定使用者名稱及信箱

$git config --global use.name "{{Type User Name}}"

$git config --global use.email "{{Type User Email}}"

$git config --global --list ##查看設定內容

$vi ~/.gitconfig ##使用Vi編輯global config

$git init ##initialize git

Clone Git Res

$git clone {{url}}

Git 提交更改

$git add {{file name}} ##加入至staging area

$git status ##檢視git目錄狀況 (git status 預設為--long -s比較清楚)

$git rm --cached {{file name}} ##收回staging area的內容

$git commit -m "{{message}}" ##提交至git directory,必須加提交訊息

$git commit -am "{{message}}" ##提交至git directory,且先做掉add部分

Git Log

$git log ##顯示歷史紀錄

$git log --oneline ##顯示歷史紀錄並將每條歷史紀錄縮為單行

$git log {{file name}} ##顯示該檔案的歷史紀錄

$git log {{since ID}}..{{until ID}} ##顯示Since Id ~~ until Id之間的提交

$git log -n {{limit}} ##顯示limte筆提交

Git Checkout

該指令可以使Head指向某一分支 ex.

$git checkout {{Branch-Name}}

亦可使Head指向某一commit

$git checkout {{commit Id}}

Head 指的是指向某一分支的指標,可當作 Head 是指現在處在哪一個分支

detached HEAD指斷頭,就是Head目前在某一個commit,而該commit並沒有任何一個分支指向他,此時若跳去其他的branch,則Head在此處做的任何修改都將消失,但可以於該處開立branch以便保存

$git checkout -b {{branch-Name}} ##於此處開設名稱為{{branch-Name}}的分支

$git checkout {{commit-id}} {{file-name}} ##回復特定檔案,且回復到某個commit狀態,之後git commit -am即可,如果後悔了可以透過 $git checkout head {{file-name}} 再次回復

Git Revert

$git revert Head ##回復至上一個commit,此處的回復並不是真的回復,而是退版重新commit,git log亦會顯示,換句話說,用這個方式進行回復亦可檢視之前的snapshot

Git Reset

同Revert,但是退回方式是直接抹去

默設為Mixed mode,可手動調整為soft or hard

差別如下:

soft 工作目錄:不變 暫存目錄:不變

mixed 工作目錄:不變 暫存目錄:捨去

hard 工作目錄:捨去 暫存目錄:捨去

$git reset Head --{{mode}}

Git Clean

Git Clean用於刪除Git位址中沒有被追蹤的檔案,配合reset --hard可以做到「完全」回復到某一版本。

$Git Clean -n ##顯示會被刪除的檔案,並不會實際刪除,換言之這是個演習。

$Git Clean -f {{path}} ##實際刪除檔案//實際刪除特定目錄檔案

$Git Clean -df ##刪除當前目錄未追蹤的文件或目錄

$Git Clean -xf ##刪除當前目錄未追蹤的文件或目錄,即使已定義在git ignore下一樣刪除

##進行Git Clean的時候並不會對已設定在git ignore的檔案進行刪除

Git Pull/Push

$Git pull origin {{遠端主機名}} {{遠端Branch name}}:{{本地Branch name}} 遠端主機名預設為origin

$Git push origin {{遠端主機名}} {{遠端Branch name}}:{{本地Branch name}}

Git Branch & merge

$git branch -a 顯示本地與遠端所有分支

$git branch -r 顯示遠端分支

$git branch 顯示本地分支

$git branch -m {{branch-1}} {{branch-2}} 修改分支名稱從1=>2

$git branch -d {{branch-name}} 刪除分支

$git brnach -D {{branch-name}} 強制刪除分支 //主要原因是Branch的用意就是用來做不影養master的修改

因此若你的branch沒有進行commit的動作,那你要他幹嘛?會不會是你忘記commit? GIT大概是這樣想的

$git checkout -b {{branch-name}} master //創造與master一模一樣的歷程的分支,其中master可以替換成其他分支,即是base於其他分支創造

$git log --oneline --decorate --graph --all //顯示現在的分支圖

備註 checkout branch會更新工作目錄的文件以匹配該分支的內容

$git diff {{branchname-1}} {{branchname-2}} 可以比較兩個分支的差異 綠字為2

$git merge {{branch-name}} 將當前head指向的位置與{{branch-name}}做merge,快進模式。

$git merge {{branch-name}} --no--ff 非快進模式,會完整保留分支線圖。

$git merge {{branch-name}} -m "{{message}}" 3-way merge 當主線依舊前進的時候需要用,此時會合併在做一次commit

merge有可能造成衝突,衝突原因是因為主線和支線推進的時候改了同一份檔案,而這份檔案git會不知道要認哪一個為正確版本,因此錯誤 利用可視化工具可以從base(兩條線共同的祖先,即開始分歧的那點),Remote(遠端線,通常是指Master),Local(通常指本地支線) 從三者挑選正確的合併後commit

遠端https://blog.longwin.com.tw/2013/11/git-create-remote-branch-2013/