主題
- commit講解
- 檔案在 git 底下的四種狀態
- git reset||commit –amend復原版本
- 建立分支(branch)
- 參考資料
commit講解
一個 commit 在 Git 中就是一個節點,這些 commit的節點就是未來你可以回朔及追蹤的參考,你可以想像就像是電玩遊戲時的存檔
,每一個 commit 是一次存檔
,讓我們未來在需要的時候都可以回到這些存檔時的狀態。
在git與github的第一步中
我們以第一個commit
做了一個完整的流程
然而其中的git add
、git commit
的意思卻不甚了解
這次我們來好好研究其
檔案在 git 底下的四種狀態
untracked
- 未追蹤的,代表尚未被加入 Git 儲存庫的檔案狀態staged
- 暫存區,只有放在裡頭的檔案才能進行commit,代表下次執行git commit會將這些檔案全部送入儲存庫。新檔案透過git add後的狀態。modified
- 已修改的,代表檔案已經被編輯過,或是檔案內容與上一個版本內容是不一致的狀態。unmodified
- 未修改的,代表檔案第一次被加入,或是檔案內容上一個版本內容是 一致的狀態
流程整理:
修改檔案(edit) => 加入 staged (git add) => 提交(git commit)=> 繼續修改其他檔案
至於要如何查看檔案狀態呢?
//查看工作目錄的狀態時...
$git status
//或是看更精簡一點的狀態...
$git status -s
關於git add
就是把untracked 或是 modified 狀態下的檔案改成 staged 的狀態 (等待被 commit 的版本)。
git add .
.
代表這個路徑底下的所有檔案
今天你若不想把路徑下所有的檔案都變成 staged 狀態
git add 你要改成 staged 狀態的檔名
假若想把檔案狀態從staged
轉成modified
該如何調整?
答:
$git reset HEAD 'file_name'
git reset||commit –amend復原版本
取消已經暫存的(git add)檔案
$git reset HEAD 'file_name'
取消對檔案的修改(edit)
$git checkout -- 'file_name'
在還沒有git add 'file_name'
的情況下使用指令。
此時回去看程式碼
發現已經修復回原本請注意
這指令有些危險
,針對該檔案的修改都沒有了,因為我們剛剛把之前版本的檔案複製過來覆蓋了此檔案。所以在用這指令前,請務必確定真的不再需要剛剛的修改。
恢復 Commit,重新提交 Commit
假如您想要修改 commit 訊息
,或者是尚未修改好檔案
$git reset --soft HEAD\^
--soft
代表銷毀 commit 但是保留 commit 內容\
為跳脫字元,加上後mac的指令才能跑HEAD^
代表上一個 commit (版本)
再commit一次想要輸入的message
即可
簡單來說reset soft
會銷毀 commit 又再重新 commit
第二種方法commit --amend
$git add 'file_name'
$git commit --amend
--amend
是指重新修改上一個 commit
提交時,預設的編輯器會出現,裡面會包含上一次提交的訊息內容。
如果懶得更改commit message
則打入
$git commit --amend --no-edit
--no-edit
則是代表不會修改 commit message
強制恢復到上一版本(commit)謹慎小心此方法
因為會將原來版本強行砍掉
$git reset --hard HEAD\^
想要回到多個版本之前
$git reset --hard HEAD~'num'
觀念複習與比較
//取消上一個 commit,但是保有 commit 內容
$git reset --soft HEAD^
//取消上一個 commit,並且刪除 commit 內容
$git reset --hard HEAD^
//將工作目錄現有的編輯合併到上一個版本
$git commit --amend
建立分支(branch)
在 git 的世界裡,分支 (branch) 是很重要的概念
簡單來說,分支就像是你的程式碼的平行世界
你可能在一個分支上搞砸了,但是不會影響到另一個分支的程式碼
建立完分支後需要切換到該分支才能開始作業
//創立新的分支
$git branch 新分支名稱
//切換到該分支:
$git checkout 新分支名稱
//回到主支
$git checkout master
#####git reset –soft HEAD^
推到雲端時不被接受
####git push origin master –force
強行毀掉遠端的commit存入local的commit
不破壞原本commit並進行現存commit的更改
#####git commit –amend
原本commit的其他功能
$ git commit –amend –no-edit
推到雲端時仍不被接受
原因:即便是同一個commit但是內容不同仍然不給上傳
git push origin master –force
參考資料
Git 版本控制:利用 git reset 恢復檔案、暫存狀態、commit 訊息