iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Software Development

Zero to Ruby on Rails系列 第 18

Day 18 - Git 常用指令(三)

  • 分享至 

  • xImage
  •  

人生不能重來,但 Git 可以...人生中,我們常常會後悔某些決定,但卻無法回到過去重新來過。然而,在軟體開發的世界中,有一個強大的工具可以幫助我們紀錄、回顧和修正過去的決定,這個工具就是 Git 而其中強大的功能就是 git reset

git reset

reset = become 的概念,也可以說是對 git 說我想要變成xxx的樣子

假設一個專案已經 commit 5次分別是:

A1 -> A2 -> A3 -> A4(a3742e17) -> A5(main/HEAD所在)

$ git reset a3742e17 #目前的分支以及 HEAD 由 A5移動到 A4 這個提交a3742e17(commit)

A5 會暫時移動到工作目錄(預設行為) 後面的參數決定檔案去留

--mixed / --soft / --hard

git reset commit編號 後面加上--mixed / soft / hard

mixed: 把檔案丟回工作目錄
soft: 把檔案丟回暫存區
hard: 直接丟掉

不小心 --hard reset 怎麼辦?

別擔心,可以用 git reflog 指令去查看,Git 保留了一個叫做 reflog 的日誌,它記錄了分支和 HEAD 的移動歷史。就可以使用 git reflog 指令來找這些日誌,找到之前的提交位置。然後用 git reset 將 HEAD 移回到之前的位置,進行恢復就行了

# 查看 reflog
$ git reflog

# 使用 reflog 恢復 HEAD 到指定位置
$ git reset --hard HEAD@{N}

tips: N 是你想要恢復到的 reflog 的索引

Caret ^ & Tilde ~

在剛剛的示範中如果想要再變成上一步 A3 可以用 ^表示,等於是我想要回到A4前一個狀態,或是使用HEAD~1後面的數字代表要變成HEAD的前一個狀態

$ git reset a3742e17^ # 由A4 變成 A3 

$ git reset HEAD~1 # 變成HEAD前一個狀態

協作專案 git 指令分享

一般專案協作會在 GitHub 上操作,首先第一次需要先 clone 專案到你的本地端,記得要確定有先 checkout 到 main(dev)

接著要從 git 拉下來的一個最新的 main 或是 dev 的分支

$ git pull origin main(dev)

替自己建立一個分支(貼上標籤) issue_n(這就是你要做的功能或是修改之類的,想一個好的名字讓你可以清楚知道自己在做什麼)

$ git branch issue_n

接著在本機完成做XX功能或是xx修改等等,每次做完在本機存檔然後輸入:

$ git add <新增/更改的文件檔案> # 除非你確定所有檔案都要推上去才用 $ git add .

$ git commit -m "說明提交"

當做完確定要上傳 push 到 GitHub 前請切換到最新的分支 main/dev

$ git checkout dev

下載 GitHu 上最新的 main/dev

$ git pull origin main(dev)

接著切回自己實作的分支

$ git checkout issue_n

rebase 確認是否有衝突要解

$ git rebase main(dev) 

如果有的話就解衝,解完記得 存檔 git add然後git rebase --continue

接著上傳到 GitHub

$ git push origin issue_n # 把本機的issue_n分支推到遠端的儲存庫

然後就可以發 PR 給協作者們,在 PR 的說明也是越清楚越好讓協作者們去看 PR ,可以用截圖或是錄製影片的方式搭配文字說明,就跟 ruby on rails 一樣, 可讀性是非常重要的!

預告

Day 19 預計介紹 Rails 的 CRUD,我們明天見!


上一篇
Day 17 - Git 常用指令(二)
下一篇
Day 19 - CRUD 相關介紹
系列文
Zero to Ruby on Rails30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言