/gitflow

practice git flow

Primary LanguagePython

gitflow

Git flow 練習用專案

Git flow 簡介

  • 主要分支

    • master: 永遠處在 production-ready 狀態,也就是跟 itunes 上的版本一致
    • develop: 最新的下次發佈開發狀態
  • 支援性分支

    • feature: 開發新功能都從 develop 分支出來,完成後 merge 回 develop
    • release: 要 release 的版本,只修 bugs。從 develop 分支出來,完成後 merge 回 master 和 develop。這裏使用 build version 當作 release name, ex: release/1.0.0
    • hotfix branches: 等不及 release 版本就必須馬上修 master 趕上線的情況。會從 master 分支出來,完成後 merge 回 master 和 develop。一樣使用 build version 當作 hotfix name, ex: hotfix/1.0.0
  • 小工具(建議熟悉 git 指令之後再來使用)

指令

  • push branch 到遠端

    • git flow feature publish some_awesome_feature
    • git push origin feature/some_awesome_feature
  • 追蹤一個遠端的 branch

    • git flow feature track some_awesome_feature
    • git checkout -b feature/some_awesome_feature -t origin/feature/some_awesome_feature
  • 刪除遠端的 branch

    • git push origin :feature/some_awesome_feature
    • 注意:git-flow 小工具不會自動刪除已經存在遠端的 feature branch,要手動刪除

如何合併 Branch

  1. 先確定 develop 是最新的 git pull origin develop
  2. 對 feature branch 做 git rebase develop -i (這裏最難,要學會 interactive mode,可以拿掉某個 commit 以及合併或修改內容)
  3. 在從 develop bracnh 做 git merge feature/some_awesome_feature -–no-ff,-–no-ff 的意思是會強制留一個 merge commit log 記錄,這可以讓 commit tree 看清楚發生了 merge 動作。(因為我們剛做了 rebase,而 git 預設的合併模式是 fast-forward,所以如果不加 –no-ff 是不會有 merge commit 的) 這個 merge commit 的另一個額外方便之處是,如果想要 reset/revert 整個 branch 只要 reset/revert 這個 commit 就可以了
  4. 如果此 feature branch 有 remote branch,要先砍掉 git push origin :feature/some_awesome_featuregit push origin develop (這是因為 rebase 一個已經 push 出去的 repository,然後又把修改的 history push 出去,會讓 develop branch 產生大問題)

重要 Git 指令

  • revert 可以針對某個 commit 進行還原,並留下紀錄(之前的 commit)
  • rebase 重新 commit,使用 -i 可以用來修正 commit 的紀錄
  • reset 清除掉某個 commit 之後的 commit
    • reset A
    • reset HEAD^ 保留修改的內容在 working tree
    • reset HEAD^ --soft 保留修改的內容在 staging area
    • reset HEAD^ --hard 全部砍光光~

待補充