Hike News
Hike News

Git基礎使用2

返回過去版本

在我們不斷更新原代碼的過程中,有可能還未完成,但是項目必須本機持續work,因此只能先運行過去的版本,必須將本機的專案返回到過去的狀態


reset

強制返回(—hard)

  • 後面須填入參數為返回的版本
    版本:
    HEAD:上一次commit版本
    HEAD~ (HEAD^):上上次commit的版本 (HEAD版本-1)
    HEAD~n:前N代的版本
    • HEAD^^(前二代版本);HEAD^^^(前三代版本) 依此類推

git log —oneline 所顯示的版本號

1
2
3
4
5
git reset --hard HEAD
git reset --hard HEAD~
git reset --hard HEAD~4 # 返回前四個版本
git reset --hard b4f2d74 # 返回到指定版本號
(即使是比當前版本更新的版本號也可以,只要還記得版本號就可以)
  • 因為此命令會修改本地文件 使用時務必做好備份

reflog

要是沒有記住特定的版本號可使用reflog查看做了那些移動HEAD的操作來推估版本號
再搭配reset一起使用

1
2
git reflog 
git reflog -4 #指定顯示前四條操作


使用分支(branch)

查看分支狀態

1
git branch 
  • *所指向的分支為當前所在分支
  • 如要列出包含遠程庫的所有分支須加 -a 參數
    1
    git branch -a

建立分支

1
2
3
git branch 分支名
git branch 分支名 分支點基礎
git branch dev remotes/origin/dev #以遠程的remotes/origin/dev分支,作為興建本地dev分支的基礎
  • 如果只填入分支名,默認以本地主分支(master)作為興建分支的基礎

切換分支(checkout)

1
git checkout 分支名

建立分支的同時切換到該分支(-b)

1
git checkout -b 分支名
  • 切換過去的分支狀態與主分支狀態是一樣的
  • 再次使用git branch確認*所指向的分支

刪除分支(-d)

1
git branch -d 分支名

合併分支(merge)

將開發分支的內容合併到主分支(合併成最新版本)

1
git merge 分支名

  • 切換到主分支底下操作
  • 合併完後記得刪除分支

tips

  • 通常合併分支時,git會用快速合併(fast forward)模式,但是有些快速合併不能成功,但是合併並沒有發生衝突,git會在此時合併之後幫忙進行新的提交
  • 要是要禁止使用快速合併
    1
    git merge --no-ff -m "信息備註" 分支名1022222今天他透視嗎與可喔嗎耨黑獄

分支衝突

當團隊中多人同時編輯一個文件的時候,難免會出現源碼合併時產生衝突問題
在merge之後會產生衝突conflict,需手動修改衝突代碼,再重新提交


使用tag標籤

任何軟體或是應用程序在發布時都應該給一個版本號,來管理每次的發布內容,便於今後的管理

顯示tag狀態

1
git tag

為當前git庫的狀態打tag

1
2
git tag 版本號
git tag v1.0.0 #將當前的git庫狀態作為1.0.0版本

查看不同tag的狀態

1
2
git show tag名
git show v1.0.1 #查看tag為v1.0.1的狀態

連接遠程伺服器

將編寫完成的代碼提交到服務器端,其他開發人員可從服務器拉取你推送的代碼,完成團隊的協同開發

把遠程庫拷貝到本地(clone)

1
git clone 網址

生成ssh-key

1
ssh-keygen -t rsa "郵件地址"

連接服務器信息(remote)

1
git remote -v 
  • 用作確認pull或是fetch是對哪個遠程庫載入 push是對哪個遠程庫進行推送

本地推送至服務器(push)

1
git push origin 分支名稱
  • 要是遠程庫上沒有此分支名稱,遠程庫會建立一個新的分支

本地的分支跟蹤遠程的分支

本地的提交與遠程的提交記錄要是不一致,會給出提示

1
git branch --set-upstream-to=origin/分支名 本地分支名

  • 如果有不一致的地方可用git status查看
  • 且如果設置跟蹤遠程分支git push時可不加任何參數,將自己目前所在的庫往遠程庫推送

從遠程分支拉取代碼(pull)

1
git pull origin 分支名稱
  • 將遠程分支上的代碼下載並合併到本地的所在分支