mynote
fork
(Fork)則是把別人專案的遠端儲存庫內容複製一份到自己的遠端儲存庫,黃保翕生動的形容:「就像是在餐桌上用叉子把盤子上的一塊肉叉到自己的盤子上。」
clone
將遠端資料庫複製到本地
pull
(Pull Request)是GitHub協作開發的重要功能。透過拉取要求,主動要求他人把自己的程式碼納入專案中。比方A開發者看到B開發者的專案,覺得也想參與開發,便執行Fork指令複製一份到自己的遠端儲存庫。而A開發者完成某個新功能後,向B開發者提出拉取要求,希望能把變更整併到B的專案中。透過拉取要求,開發者也能做到基本的權限控管,而不是無條件的讓別人的變更合併到自己的專案中。比方在收到拉取要求後,原專案發起者能在GitHub上比對兩個版本間差異,覺得變更有益於原專案後再合併到自己的專案。許多人使用拉取要求,在GitHub上面開始跟其他開發者展開專案的討論。
fetch
執行 fetch,可以取得遠端數據庫的最新歷史記錄。取得的提交會導入在自動建立的分支中,並可以切換這個名為 FETCH_HEAD 的分支。
但是不影響到local的commit
VSCODE有auto git fetch不需要在做ferch
merge前要把暫存區先commit或是清空工作區和暫存區
merge
fast-foward
假設被merge的分支包含所有的主分支內容, 則叫做fast-forwar
normal merge
假設被merge的分支不包含所有的主分支內容, 則會創建一個新的commit
squash
直接建立一個新的commit可以用squash
git A rebase B
意思是將A分支接到B分支之後
ex: 將issue3合併到master, 如果直接使用merge的話
假設有conflict就會多產生一個commit
用rebase將issue3接到master之後(conflict還是要解決)
再做merge就不會多一個commit
恢復到任意一個commit
mix | soft | hsar | |
---|---|---|---|
commit | move to unstage | move to stage | discard |
stage | move to unstage | remain | discard |
再做一個新的 Commit,來取消你不要的 Commit
如果是自己一個人做的專案,用 Revert 指令其實有點過於「禮貌」了,大部份都是直接使用 Reset 就好。但如果對於多人共同協作的專案,也許因為團隊開發的政策,你不一定有機會可以使用 Reset 指令,這時候就可以 Revert 指令來做出一個「取消」的 Commit,對其它人來說也不算是「修改歷史」,而是新增一個 Commit,只是剛好這個 Commit 是跟某個 Commit 反向的操作而已。
標籤是用於標記特定的點/提交的歷史,通常會用來標記發布版本的名稱/號碼(如:v1.0)。
rebase -i
如果出現fatal: It seems that there is already a rebase-merge directory,刪除.git內部哦rebase-merge資料夾
stash
可以將stage和unstage都存起來
使用時機: 切換branch的時候
git reflog
可以查詢git的歷史log
gitignore
如果檔案本來就沒有track
直接對檔案ignore即可
如果檔案已經track了