gitHub地址:https://github.com/susuGirl
版本控制工具
-
本地版本控制
-
集中版本控制 svn
-
分佈式版本控制 git (3種工作區域:工作目錄、暫存區域、本地倉庫)
建立分支的標準
-
master 分支
- 用來發布重大版本的分支
-
每個版本用tag打點一次
-
而且建議每次合併develop開發分支的時候將所有提交合併爲一個提交,保持mastr分支的提交記錄簡潔明瞭
-
develop 分支
-
git checkout -b develop master 在 master 分支的基礎上生成新分支 develop
-
-
feature 功能分支
- 由develop分支衍生出來,開發完成與develop分支合併完成後應刪除
-
release 預發佈分支
- 由develop分支衍生出來,開發完成與develop分支合併完成後應刪除
-
fixbug 修補bug分支
- 由master分支衍生出來,修補完畢再合併進develop和master分支
操作了一波錯誤的神操作後,一般需要用到的騷手段
想當年我年少無知,rebase代碼的時候衝突了,但是當時腦子裏水裝多了愣是沒發現,結果就在衝突生成的臨時分支上寫了新功能新代碼,問題是還commit了好幾天的好多提交,結果一波神操作直接在臨時分支上把代碼乾沒了臨時分支也乾沒了。幸好公司的小哥哥配合 cherry-pick 把代碼提交記錄一個一個撿回來了,不然都要急哭了,這就是菜和眼瞎的代價。
然後那週末自己就在家裏啃了兩天的git,建新項目自己造bug自己解,一邊想方設法丟代碼一邊又想方設法的撿回來…...雖然記不住那麼命令,但是以後再出情況至少你知道這種情況是能解決的就不慌了四不四
-
從遠程倉庫拉取一條本地不存在的分支,創建本地分支並拉取遠程分支
- git checkout -b develop origin/develop
-
git fetch origin 遠程分支名x:本地分支名x
-
重命名分支
- git branch -m oldName newName
-
修改最後一次的commit信息
- git commit --amend -m '......’
-
git commit —amend
- 會出現vim的編輯頁面
- i 開始編輯
-
ESC 退出編輯模式
-
u 撤銷
-
:w 保存
-
:q 退出
- 會出現vim的編輯頁面
-
將某一次的提交挑揀合入到當前分支
- git cherry-pick commit-id
-
如果有衝突則解決衝突 然後 commit
-
回滾到某一個commit,但是會保留下修改內容
- git reset —soft commit-id
-
回滾了最後一次commit提交,代碼回回到回滾版本時的狀態不保留下修改內容,並且未commit的內容會消失
- git reset —hard HEAD~1
-
看到所有的被刪除的 提交或者add或者未add的文件
- git fsck --lost-found
- git fsck --lost-found
-
查看提交
- git log --oneline -7 查看最近的 N 次提交
- git log -g 或者 git lg 查看全部提交
-
查看詳細記錄
- git show commit-id
-
找回不小心被回滾的這一次提交
- 查看記錄 git reflog
-
git reset —hard 63a9b5d
- 查看記錄 git reflog
-
誤刪分支,還原分支
-
git reflog 查看所有提交記錄,找到誤刪分支的最後一次提交
-
git branch branch-name commit-id
-
-
刪除遠程倉庫不存在的分支
-
git remote prune origin
-
-
刪除遠程分支
-
git push origin —delete branch-name
-
-
刪除分支
-
git branch -d branch-name 刪除,若分支還未合併不能刪除
-
git branch -D branch-name 強制刪除,即使還沒有合併
-
-
推送並創建遠程分支
-
git push origin branch-name
-
將遠程倉庫更新到本地以及分支的合併
-
git fetch / git rebase 推薦這種方式
- git fetch 更新
-
git rebase branch-name 複製提交
-
git mergetool 使用工具解決衝突
-
git clean -f 解決完衝突,清理臨時文件
-
git rebase —continue 繼續
-
生成的 git 圖譜:一條線表示強迫症看着很舒服
-
git pull / git merge
- git pull 的命令是 git fetch 和 git merge 的結合
-
生成的 git 圖譜:三線譜 四線譜 六線譜…十線譜…N線譜...
-
兩種方式的區別,簡單介紹下原理,畫了個圖:
-
merge 是指針形式,merge 的時候會多生成一個merge的提交記錄,保留兩個分支記錄,從而兩個分支都指向merge提交
-
fetch/rebase 則是複製每一個提交到主分支上,不會保留子分支記錄,不會衍生多餘的分支曲線,從而保持分支整潔
以上內容沒有做深入解說,想深入瞭解可參考以下文章: