git

常用Git

Posted by Leo Yang on 2020-07-02

基本指令

init - 建立版本庫

1
git init

add - 加入目前資料夾所有檔案到git

1
git add .

commit - 提交

1
git commit -m "commit message"

remote - 設定git remote位置(git server)

設定

1
git remote add origin https://github.com/e23882/test.git

查詢

1
git remote -v

刪除

1
git remote remove RemoteName

同一個RemoteName可以設定多個GitRemote位置(一次push三個位置)

1
2
3
git remote set-url RemoteName --push --add \\123.1.1.1\GitLocation1
git remote set-url RemoteName --push --add \\123.1.1.1\GitLocation2
git remote set-url RemoteName --push --add \\123.1.1.1\GitLocation3

Pull

指令 : git pull GitRemoteURL BranchName

1
git pull original master

Push - 推送

指令 : git push -u

1
git push -u original master

Log - 查看紀錄

看所有本地git紀錄

1
git log

看指定數量本地git紀錄
指令 : git log -n <數量>

1
git log -n 2

輸出log
指令 : git log -n 1 > [AbsolutePath]

1
git log -n 1 > "D:\NeverRemove.txt"

一行顯示commit log

1
git log --oneline

checkout - 切換branch

切換分支(Branch)
指令: git checkout [BranchName]

1
git checkout LeoDerBranch

建立並切換分支 : git checkout -b [BranchName]

1
git checkout -b LeoDerBranch

branch - 建立分支

指令 :
git branch

1
git branch LeoDerBranch

rm - 移除版控上檔案

1
2
git rm -r -n --cached ./folder
git rm -r --cached ./folder

reset - 復原

- hard

會把目前專案目錄都復原到某個版本
本地git回復到最新版本(目前本地最新的)

1
git reset --hard HEAD

本地git復原到git remote最新版本

1
git pull GitRemoteURL

本地git回復到上一個版本(原本的那個版本就不見了)

1
git reset --hard HEAD~

回復到前n個版本(n之後的版本都不見了)

1
git reset --hard HEAD~n

- soft

跟hard一樣,但是本地專案的檔案不會跟著復原,只有版控有變更而已



常用組合用法

顯示出某日區間所有異動檔案清單(會重複)

1
git log --no-merges --pretty=format:\"%an_%ae|%s|%ad\" --name-only --since='2020/3/1' --until '2020/3/30' -- *.cs *.sql *.xaml > logs.txt

建立專案第一次初始化git、commit、push

1
2
3
4
5
6
7
8
9
10
11
12
13
初始化
git add .
看那些檔案加入commit
git status
復原加入commit的檔案
git reset HEAD FileName
git reset HEAD FolderName
提交
git commit -m "commit message"
設定GitRemote位置
git remote add original gitServerLocation
Push
git push -u original master

狀況:修改程式後commit > pull,pull時發現git remote已經發生異動

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
git add .
git commit -m "update content"
git pull
發生 :
CONFLICT (content): Merge conflict in xxx.xx
Automatic merge failed; fix conflicts and then commit the result.

解決方法:
取消git自動merge的動作, 這時候檔案會變成異動完,但是還沒merge,所以不會有衝突,要先解決衝突
git reset --merge

解決衝突(把有衝突的檔案移動到上一層,避免新改的code被復原成舊的版本)
move file.txt ..
git reset --hard HEAD~
git pull
這時候就沒有衝突了,可以在把移動到上一層的檔案人工合併到目前版控中的檔案
然後再push
git add .
git commit -m "commit content"
git push origin master

刪除指定日期前的所有紀錄

1
2
git replace --graft CommitID
git filter-branch